drone.io からansible playbookを流し込む
この記事は drone.io Advent Calendar 2017 - Adventar の10日目の記事です。
drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。
昨日の記事で他のホストにsshする方法をご紹介しましたが、 応用技でansible playbookを流し込んでみようと思います。
好きなイメージでsshする
droneからsshする場合は SSH | Plugins | Drone を利用する方法がありますが、この場合すきなイメージを指定することができません。 droneからansible playbookを流し込みたいと思った場合、ansibleが入ったイメージを利用しなければなりません。そこで
まずは前回の記事を参照して公開鍵と秘密鍵を設定しましょう。
次に利用するイメージですが williamyeh/ansible を利用します。各OSごとのイメージも利用されており、改造もしやすいと思います。
.drone.yml は以下のようになります。
pipeline: ansible: image: williamyeh/ansible:alpine3 secrets: [ ssh_key ] environment: - ANSIBLE_HOST_KEY_CHECKING=False commands: - echo "$SSH_KEY" > deploy_key && chmod 600 deploy_key - "ansible-playbook -i hosts playbook.yml --private-key=deploy_key"
まずは secrets を指定することで公開鍵が環境変数 $SSH_KEY に展開されます。これをファイルに書き足して、ansible-playbookに食わせてあげます。 $SSH_KEY を ""で囲うのと、パーミッションの変更を忘れないようにしましょう。
イメージをそのまま利用する場合はHost Key Checkingで弾かれてしまうので、上記のように無効化するか、焼いたイメージを作るかします。
環境変数を経由して鍵を設定する方法はなんにでも使えるので、各種deployに応用が効くはずです。