はじめに
Drone CIは、クラウド版とオンプレ版があるコンテナベースのCIツール。
職場ではJenkinsおじさんをしているが、Jenkinsから卒業したいので味見含めて、オンプレ版のDroneCIを触ってみた。
環境
Linux Mint 19
起動
下準備
- docker,docker-composeのインストール
- ngrokのインストール 参考
ローカルでDroneCIを動かす場合に、パブリックからアクセスする必要があるので、ngrokの利用が必要。
公式だとアカウント作成が手順に含まれるが、そこは割愛して問題ない。
drone ci 起動
ngrokの起動
適当にポートを指定してngrokを起動させておく。
ngrok http 9999
githubアカウントとの連携
ここは参考記事を参照。
oauthに必要なclient,secretなどをコピーしておく。
.envファイルの作成
DRONE_GITHUB_URL=https://github.com
DRONE_GITHUB_CLIENT=ここはgithubから取得
DRONE_GITHUB_SECRET=ここはgithubから取得
DRONE_SECRET=abcdefg
DRONE_HOST=https://849403dd.ngrok.io
DRONE_SECRETは、任意のランダム文字列
DRONE_HOSTは、ngrok実行時に表示されるURL。このホストにアクセスすると、ローカルPC上で動作するDroneCIにフォワードする。
docker-compose.ymlの作成
公式に記載してあるサンプルをそのままコピーして作れば良い。
drone-serverのportのみngrokと整合性を取る必要がある。今回の場合
ports:
- 9999:8000
- 9000
になる。
起動
docker-compose.ymlとenvファイルを同じフォルダに配置して、
docker-compose up
起動確認は、https://849403dd.ngrok.io/login にアクセスして、認証ページに飛べばOK。
droneciでログインすると自分のレポジトリの一覧が見えるはず。
お試しビルド
レポジトリに下記の.drone.ymlというビルドスクリプトを追加してビルド。
pipeline:
# ステップは順に実行
gradle-sample:
# ステップごとにベースとなるdockerイメージを指定
image: openjdk
# コマンド一覧
commands:
- ./gradlew hello
gradle-hello:
image: openjdk
commands:
- ./gradlew hello
githubのレポジトリ:
https://github.com/yohachiSuga/gradle-sample
.drone.ymlの記法は公式が詳しい。
Droneのポータル>Settingsでビルドトリガーを変更可能。
プラグイン
drone.ioのプラグインは全てDockerコンテナ
マーケットプレイスは公式から。
Jenkinsのジョブを実行するプラグインもある。
特別なジョブ(UIテストやマルチプロセスのテスト等)をJenkins側で定義してdroneから呼び出したり、Jenkinsからの移行の初手に使いそう。
http://plugins.drone.io/appleboy/drone-jenkins/
所感
- Jenkinsと違ってコンテナベースなので、同じパイプラインでもステップごとに携帯性があるのが特徴的。
- Jenkinsだと、分散ビルドを行おうとすると、各プラグインが対応しているよね?とか色々確認がいる。一方でコンテナベースはそれが不要みたいで、簡単にスケールできそう。
- Jenkinsはpipeline as codeは任意だけど、droneはそれを強制化できるのがgood。
- Jenkinsは自由度やプラグインの多彩さがメリットだけど、管理コストを考えると、個人的にはコンテナベースのCIツールに分配が上がる気がする。
参考記事