- CI/CD(Continuous Integration/Deployment)は最高
- ここでの雰囲気は以下
- CI: 全部Git管理してcommit毎に色々検証
- これでPull Request上でマズいものはチェックする
- CD: HEADのものを自動でどーんとデプロイ
- k8s+ArgoCDによる最高の体験
docker-compose
でもContinuous Deploymentしたい!- k8s+ArgoCDは素晴らしいが,環境構築もメンテもダルい
- コストに見合わない単純な(
docker-compose
で十分な)やつでもどうにかならんか
- 開発場所とデプロイ先を分けたい
- デプロイ先で
docker-compose build
とかやりたくない - → イメージは(ちゃんとビルド・プッシュして)コンテナレジストリから
- → 設定ファイル群はGit管理
git pull
とdocker-compose up -d
だけでデプロイしたい(するようにしている)
- デプロイ先で
docker-compose
で立てたサービスの更新がダルい- イメージの更新がダルい
- 例:
:latest
:v1.0
とかでも実際のイメージ(digest)は裏でどんどん更新されていくことは多い- 新しいものがあるなら更新したい(逆に,真にイメージを固定したいならdigest pinningするべき)
- 例:
- 設定とかも更新したい
git pull
してdocker-compose down/up -d
するだけではある- めんどい
- イメージの更新がダルい
- 定期的に以下を実行するスクリプト
git pull
docker-compose pull
docker-compose down
docker-compose up -d
- Shell script(Bash)
- 移植性を考えるとBashはやや微妙だが,
docker-compose
を使うような環境では問題ないだろう
- 移植性を考えるとBashはやや微妙だが,
- 定期実行部以外のすべての実装はこのファイル1つに集約(ポン置きで動く)
- 設定ファイルは
/etc/compose-cd/config
(compose-cd install
時に生成)- グローバルな設定を
HOGE=value
の形でしておき,実態としてはsource
するだけ DISCORD_WEBHOOK
:
- グローバルな設定を
compose-cd update
を定期的に実行する- systemd timerで実装
- 定期実行以外に要求は無いので実際はcronでも雑なスクリプトでのループでもよい