はじめに
git管理のリポジトリのリリース時にgit tag
でタグを付ける事があると思います。
そんなgit tag
ですがCircleCiと連携させるとタグ付けに反応してそのままデプロイさせることが出来ます。
ただCircleCi公式ドキュメントの手順とgithubリポジトリの場合は少し手順が違ったのでその手順を残したいと思います。
注意点
今回の想定はGitHubにあるリポジトリをデプロイすることを想定しています。
GitHub以外のリポジトリをtagデプロイしたい場合は公式の手順をご覧ください。
前提条件
- GitHubにあるリポジトリがCircleCiとherokuに連携している状態
- CircleCiは2.0を対象としています
また今回デプロイ先はHerokuとします。
CircleCiの設定
- CircleCi画面のBUILD SETTINGS → Environment Variables画面で環境変数
HEROKU_API_KEY
とHEROKU_LOGIN
を以下のように設定します-
HEROKU_API_KEY
→ Herokuのアカウント設定画面から取得できるAPI KEYを値に設定 -
HEROKU_LOGIN
→ Herokuにログインする際に使用するメールアドレス
-
GitHubとHerokuとCircleCiが連携していればこれだけで準備は完了です。
circleci.ymlにtagデプロイ用の記載を追加
いよいよcircleci.ymlにtagをトリガーにする処理を書いていきます
以下でやっている事としてはjobs
にデプロイに必要な処理や設定を記載しworkflows
にjobs
を実行するタイミングを記載しています
今回は本番環境デプロイ用job(deploy_to_heroku
)はv_1.0.0
のようなtagをpushした時のみ反応させ、stg環境デプロイ用job(deploy_to_heroku_stg
)はstg_v_1.0.0
のようなtagをpushした時とmasterにマージした時に反応させるようにしました
またどちらのjobも実行前にtest
jobを実行させるようにしています。
# .circleci/circleci.yml
defaults: &defaults
working_directory: ~/your_repository
environment:
TZ: "/usr/share/zoneinfo/Asia/Tokyo"
deploy: &deploy
<<: *defaults
machine:
enabled: true
steps:
- checkout
- run:
name: Setup Heroku
command: bash .circleci/setup-heroku.sh # 後述
- run:
command: |
git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git HEAD:refs/heads/master
# 他デプロイに必要なタスクがあれば記載
sleep 5 # sleep for 5 seconds to wait for dynos
heroku restart --app $HEROKU_APP_NAME
version: 2
jobs:
test:
<<: *defaults
docker:
# 省略 ここにはテスト実行用の処理・設定を記載
deploy_to_heroku:
<<: *deploy
environment:
HEROKU_APP_NAME: "your-app" # 本番のapp_nameを設定
deploy_to_heroku_stg:
<<: *deploy
environment:
HEROKU_APP_NAME: "your-app-stg" #stg環境ののapp_nameを設定
workflows:
version: 2
build:
jobs:
- test:
filters:
branches:
only: /.*/
tags:
only: /.*/
- deploy_to_heroku:
requires:
- test
filters:
branches:
ignore: /.*/
tags:
only: /^v_[0-9](\.[0-9]){2}$/
- deploy_to_heroku_stg:
requires:
- test
filters:
branches:
only: master
tags:
only: /^stg_v_[0-9](\.[0-9]){2}$/
- herokuでデプロイする際は別途shファイルが必要とのこと
- .circleci/setup-heroku.shに以下を記載
#!/bin/bash
wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz
sudo mkdir -p /usr/local/lib /usr/local/bin
sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib
sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
cat > ~/.netrc << EOF
machine api.heroku.com
login $HEROKU_LOGIN
password $HEROKU_API_KEY
EOF
cat >> ~/.ssh/config << EOF
VerifyHostKeyDNS yes
StrictHostKeyChecking no
EOF
これで設定は完了です!
あとはgit tag v_1.0.0
でタグを付けてgit push origin v_1.0.0
でtagをpushしたらデプロイが自動で始まります。
参考
https://circleci.com/docs/2.0/deployment-integrations/
https://christina04.hatenablog.com/entry/circleci-workflow