Dockerを使ったCI/CDパイプラインを学習したときのメモです。
CI/CDとは
画像引用:ThikIT「DevOps、CI/CDパイプラインでもコンテナは大活躍!」
継続的インテグレーション、継続的デリバリー(デプロイ)するためのプロセスを仕組み化。CIツールの代表的なものに以下がある。
- Jenkins
- Travis CI
- circleci
- Git Hub Actions
CI/CDとGitコマンド
TravisCI+Docker+Heroku+Railsを使った例。TravisCIの流れとGitコマンドのみ記載。
ワークディレクトリに以下YAMLファイルを格納。
sudo: required
services: docker
before_install:
- docker-compose up --build -d
- docker login -u "$HEROKU_USERNAME" -p "$HEROKU_API_KEY" registry.heroku.com
script:
- docker-compose exec --env 'RAILS_ENV=test' web rails db:create
- docker-compose exec --env 'RAILS_ENV=test' web rails db:migrate
- docker-compose exec --env 'RAILS_ENV=test' web rails test
deploy:
provider: script
script:
docker build -t registry.heroku.com/$HEROKU_APP_NAME/web -f Dockerfile.prod .;
docker push registry.heroku.com/$HEROKU_APP_NAME/web;
heroku run --app $HEROKU_APP_NAME rails db:migrate;
on:
branch: master
権限の設定、Dockerを使う、コンテナを起動、DB準備、テスト実行、デプロイ実行(gitブランチがmasterの場合のみ)が順番に記述されている。
featureブランチを作成
$ git checkout -b feature
変更したファイルをGitのステージングに上げる
$ git add .
変更をコミットする
$ git commit -m '<commit message>'
featureブランチにpush
$ git push origin feature
TravisCIのbuildが走り、テストコードが実行される。
GitHubでプルリクエストを作成・Merge
GitでMasterブランチに反映されることで、TravisCIのbuildが走り、アプリがデプロイされる。