drone.io からansible playbookを流し込む

この記事は drone.io Advent Calendar 2017 - Adventar の10日目の記事です。

drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。

github.com

昨日の記事で他のホストにsshする方法をご紹介しましたが、 応用技でansible playbookを流し込んでみようと思います。

好きなイメージでsshする

droneからsshする場合は SSH | Plugins | Drone を利用する方法がありますが、この場合すきなイメージを指定することができません。 droneからansible playbookを流し込みたいと思った場合、ansibleが入ったイメージを利用しなければなりません。そこで

まずは前回の記事を参照して公開鍵と秘密鍵を設定しましょう。

ashphy.hateblo.jp

次に利用するイメージですが 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に応用が効くはずです。