はじめに
CI/CDの学習のため,初めてGitHub ActionsとArgoCDを使用したので,作成したパイプラインの紹介と感想を書きます.
目次
1.はじめに
2.目次
3.作成したもの
4.感想
5.おわりに
作成したもの
このように作成しました.
コードがpushされると,GitHub Actionsが起動します.
ユーザが作成したコード(今回はDjango)をGitHub Actions内でテストします.
テストを通ったものはimageを作成しDocker Hubにアップロードします.
次にk8sのManifestsが置いてあるレポジトリに対してイメージの名前を更新してcommit, pushを行います.
次にmanifestsの更新をArgoCDが感知して,Kubernetesに対してimageの更新を要求します.
更新されたらデプロイまで完了です.
感想
できたこと
GitHub Actions
GitHub Flowを中心として考えると,使用するサービスの選定がかなりスムーズに感じました.
素直にGitHub Actionsを使用していれば,コードを元に使用すべきworkflowsを提案してくれます.今回はDjangoだったので当然workflowがあり,ほぼ選択するだけでテストが実装できました.
jobの流れもUIで確認出来て,動作中は緑のチェックが出ていくのをワクワクしながら見守ってました(笑)
ArgoCD
ArgoCDについても非常に素直で初めて学ぶ身としては,GUIがありがたかったです.設定内容も大して躓くこともなく,素直に使用できました.
【追記】
クラスターを移動させる機会がありました。移動のため新しいサーバにはArgoCDを導入し、リポジトリを登録したところ、すぐにリソースが作成され、稼働が開始しました。以前はyamlファイルを移動させて、手動でapplyしていたためArgoCDの良さをとても強く感じました。
苦労したこと,できなかったこと
-
サービスの数が多かったため,アカウントやtokenの扱いに苦労しました.おそらくAWS等のクラウドサービスでまとめて管理すればもう少し簡単だと思います.
【追記】私はHashiCorp Vaultを使用して解決しました. -
docker hubに上げたimageのpullに苦労しました.初めはtagをmainにしていたので,更新されたことが検知できず,pullをしてくれなかったです.一度常にimageをpullする仕組みにしましたが,やはりtagで管理すべきではと思い,GitHubのtagから引っ張ってくることにしました.
-
上のことに関連しますが,ArgoCDがGitHub Actionsから見えていないため,imageがpullされているかを確認するために結局ページにアクセスする必要がありました.workflowの中でデプロイができたかどうかも確認できるとすべて1つの画面で見れて楽なのですが... ここに関してはSlackなどで通知するという解決方法がありそうです.
おわりに
半分は個人的な感想っぽくなってしまいましたが,CI/CDに使用するサービスの決定の手助けになったらいいなと思います.