先日、JenkinsからConcourseに乗り換えてみたばかりですが、Jenkinsに代わるGo製OSS CIツールDroneを読んでいたら、Droneの方がプラグインも充実していてとっつきやすそうだったので、Droneも試してみました
GithubからKeyを取得
Registering OAuth Appsなどを参考に、Client ID
とClient Secret
を作成しておきます
コールバックURLなどは、公式のInstallationを参照
コンテナ作成
公式のInstallationを見ると、Docker Compose使えと書かれているので、docker-compose.ymlを作成します
1 | $ vim docker-compose.yml |
1 | version: '2' |
それぞれの環境変数の設定内容は下記
- DRONE_HOST: Droneが稼働するURL。変数名は「HOST」ですがURLのようです(http or https://~)
- DRONE_GITHUB_CLIENT: Githubから取得したClient ID
- DRONE_GITHUB_SECRET: Githubから取得したClient Secret ※←これは公開したらダメなやつ
- DRONE_SECRET: なんでもいいのでハッシュを設定します。sanzenchouenhosiiとかでもOKです。serverもagentも同じ物です
今回はGithubを例にとりましたが、BitbucketやGitLabもサポートされています。それぞれのInstallationを参照してください。
ちなみに、GithubとBitbucket両方同時に設定してみた所、リストにGithubのリポジトリしか表示されず、その後Githubの環境変数を消したらBitbucketの認証画面が出てきたので、おそらく2つのサービスを同時に、というのは今のところ非対応で、1サービス=1コンテナという運用になる模様(たぶん)
追記: 複数コンテナ立ち上げてね。将来的にも対応する予定ないよって書いてた → Multiple remote drivers, i.e. Github and Gogs enabled #1336
その後、up実行
1 | $ docker-compose up -d |
http://[Droneのホスト]/
にアクセスすると、GithubのOAuth認証が表示されます
hello world
リポジトリのルートにある.drone.yml
に従ってビルドが走ります
ビルドトリガは、Web画面のハンバーガーメニューの「Settings」で設定します。以下は、PushしたときにHelloするだけのyml
1 | $ vim .drone.yml |
1 | pipeline: |
ビルドトリガに合わせてSSHでなんやかんやする
このサイトは元々Jenkinsでデプロイしてたんですが、今回の乗り換えの本来の目的である、masterブランチにPushがあったら指定のサーバでデプロイするみたいな事をします
SSH Pluginが公開されているので、これを利用して.drone.yml
にデプロイを記述します
SSH鍵を作ってDroneに登録
専用のDroneユーザを作ります。細部は各々の環境に合わせてください
1 | user ~$ sudo useradd -d /home/drone drone |
秘密鍵は右上のハンバーガーメニューの「Secret」に設定します
- key: ssh_key
- value: [コピーした秘密鍵の内容を入力]
.drone.ymlを作る
接続確認等してみて問題なければ、.drone.yml
を作成します。
1 | $ vim .drone.yml |
1 | pipeline: |
追記:Droneにアクセス制限をかける
このあと、Nginx側でアクセス制限をかけたところ、ビルドが走らなくなったので調べてみたところ、Pipeline側のIPも弾いていたようなので、Bitbucketの公開IPを許可すると通りました
1 | $ cat /etc/nginx/conf.d/inc/allow_bitbucket_pipeline |