GitLabを使ってDjangoアプリケーションのCI/CDを実現したい。そう思って色々調べてたのですが、色々な実装パターンがあるようで、どうもベストプラクティスがわからない。。。しかしながらやっと自分の中のベストプラクティスを見つけたので、まとめておきます。
開発はローカル環境
まず開発はローカルPCを使用することとし、作成したソースコードはgitでGitLabにPUSHします。
GitLabにPUSH
次に特定のブランチにPUSHされるとGitLab Runnerが.gitlab-ci.ymlを実行します。この中でDockerファイルによる、ソースコードのコンテナ化が実施され、GitLabのプロジェクト内 Container Registry に作成されたコンテナが配置されます。また、デプロイ先のサーバーで叩くコマンドをまとめた、deploy.shもこのgitlab-ci.ymlにより起動をさせます。このときGitLab Runnerより、デプロイ先のサーバーにSSH接続することになりますので、GitLab Runner内にSSHの秘密鍵の配置が必要になります。
サーバーへ全自動デプロイ
デプロイ先のサーバーでは、docker pull と git pull が実行され、最新のコンテナとソースコードを配置します。(いずれもdeploy.shで実行、ただし一度手動で実行しておくなどの準備は必要)
最後にdocker-compose upが実行され、無事新しい資源で環境がアップデートされます。
上記に使ったファイル群をgitlabに登録していますので、どうぞ合わせて参考にしてください。https://gitlab.com/Karapon/django_docker_template