CI/CDパイプラインとDocker


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が走り、アプリがデプロイされる。