こんにちは、技術本部 OpenSaaS Studioでサーバサイドエンジニアをしている安里です。2019年5月に開催された社内勉強会のレポートをお届けします。
技術本部ではエンジニアの技術向上を目的として定期的に勉強会を開催しており、
今回は同じくOpenSaaS Studioのメンバーである安井さん(@gkuga)に講師をお願いし、ProwというKubernetesベースのCI/CDシステムの勉強会を行いました。
Prowについて
勉強会の前半では、こちらの資料をもとにProwの成り立ちや機能、仕組みが説明されました。
KubernetesのCI/CDは元々Jenkinsで行なっていましたが、以下のような運用上の課題を抱えており、これらを解決するためにProwが開発されたとのことです。
- Jenkinsのバージョンを上げる際に全ノードを停止する必要がある
- Githubと連携するのが難しい
- スケールアウトが難しい
- スレーブ接続が切れた後の復旧が手間
- デバッグの属人化
Kubernetesはスケールアウトが容易で、コンテナの自動回復など耐障害性に優れた特性を持ち、スケジュールや設定の管理などCIに必要な機能が既に存在していたことから、Prowのプラットフォームとして採用されたとのことでした。
また、Prowは様々な点でKubernetesの仕組みをうまく利用しているとのことですが、CIのジョブをProwJobというCRDとして定義し、ProwJobを元に作成したPodの実行結果をProwJobのステータス(=ジョブのステータス)として扱う点が特に興味深かったです。
機能面ではGithubボットを使ったPRに対するオペレーションが特徴的で、ワークフローやマージの自動化、 “/foo” 形式のコマンド実行が可能とのことです。
例えば、PRを作成すると自動でレビュアーを割り当てたり、 “/kind bug” とコメントするとbugラベルが設定されたり、全てのチェックにパスすると自動でマージしたり、といったことができ、Pluginを追加することで機能の追加も可能になるようです。
私がジョインしているプロジェクトでもProwを使っていますが、PRだけでオペレーションができ、その履歴やCIの結果が集約されるためPRだけに集中して快適に開発できています。
ハンズオン
勉強会の後半では、こちらの資料を元にGKEにProwを構築してPRの自動マージを試してみる、というハンズオンを行いました。
ハンズオンの最中にTerraformがうまく反映できなかったり、GCPの無料枠が上限を迎えたり、といったトラブルがありましたが、slackで参加者同士アドバイスしあって解決しながら進んでいきました。
Prowをデプロイする、プラグインを使ってみる、ジョブを作る、自動マージを試す、という4つのステップがありましたが、私はトラブル対応に時間がかかってしまい1ステップ目のProwをデプロイしたところでタイムアップとなりました。
懇親会
懇親会では寿司やピザが振舞われ、参加者の体験談や色々なCI/CDシステムについての議論などで盛り上がりました。
最後になりますが、勉強会を開催して頂いた関係者の方々、および講師の安井さんありがとうございました。