初めに
参加している開発プロジェクトでは、CIツールdroneを使っています。
私はdroneの知識がほぼゼロで、CI環境構築をスタートしたので、ハマリまくりました。
相当苦戦しましたが、先日やっとデプロイパイプラインを作れたので、droneについて、色々整理して書きたいと思います。
※ 使っているdroneはversion 0.7.3になります。
※ つい先日に、droneのversion 0.8がリリースされましたので、興味ある方は【release-0.8.0】を確認してください
詳細なアーキテクチャなどは説明できませんが、
こんな感じでdroneを使っています。
① Github Enterprise → drone → AWS
↑
② Slack
今回はとりあえず下記2点について、まとめました。
① droneの仕様
② GithubのWebhook送信から、droneのジョブ実行までの流れ
droneについて、まだまだ理解が足りていないところがたくさんありますので、間違いとかありましたら、ご指摘ください。
droneの仕様
構成
- droneにはdrone server と drone agentがあります。
- drone server: 管理画面、認証、githubなどとの連携
- drone agent: ジョブの実行
- droneが利用するデフォールトのデータベースはSQLiteで、Docker HubにあるdroneイメージにSQLiteが入っています。ビルド履歴、ユーザ情報、シークレット情報などすべてdatabaseに格納しています。
- droneはデフォルトでDocker Hubからイメージを取ってきますが、プライベートのレジストリも利用できます。
ビルドジョブの実行
- .drone.ymlにdroneにやって欲しいこと(どの条件でどういったこと)を定義します。
- drone serverはやってほしいジョブをキューに入れ、drone agentは順番にキューからジョブを取得し、実行します。
- drone serverとdrone agentは指定されたシークレットキー(任意の文字列)でお互いに認証を行い、WebSocketで通信する。
GithubのWebhookから、droneのジョブ実行までの流れ
Github側の設定は、drone公式ページの【GitHub】に記載されています。
GithubのWebhook送信から、droneのジョブ実行までの流れを自分なりに整理しました。間違っていたら、是非ご指摘ください。
-
GitHub上何かしらのイベントが発生したら、GithubがdroneへWebhookを送信します。
Webhookの詳細内容はGithub → Settings → Webhooksにて確認できます。 -
drone serverはGithubからのWebhookを確認し、Githubへレスポンスを返信します。
- Webhookから送られたeventが.drone.ymlに書かれたeventであれば、drone serverがジョブをキューに入れます。
- 対象ブランチに.drone.ymlがないと、drone serverはGithubにエラーを返します。
※ 具体的な動作について、(Goで書かれた)ソースコードを見てもよく分からなかったので、ご存知の方がいれば、是非教えてください。
Webhook例:
.drone.ymlがなく、drone serverから404が返された例
- drone agentはキューから順番にジョブを取得します。
- drone agentは.drone.ymlに書かれたジョブを実行します。
4-1: gitのコンテナーを起動して、ソースコードを取得します。
4-2 ~ 4-n: .drone.ymlに書かれたタスクを順番に実行します。
最後
今回下記2点について、自分なりに整理しました。
① droneの仕様
② GithubのWebhook送信から、droneのジョブ実行までの流れ
時間がありましたら、SlackでのChatOpsとか自分がハマったところとかについて整理して共有したいと思っています。