LoginSignup
5
4

More than 5 years have passed since last update.

GitHub管理のリポジトリをCircleci2.0 + Herokuと連携しgit tagをトリガーにしてデプロイする

Last updated at Posted at 2018-04-21

はじめに

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_KEYHEROKU_LOGINを以下のように設定します
    • HEROKU_API_KEY → Herokuのアカウント設定画面から取得できるAPI KEYを値に設定
    • HEROKU_LOGIN → Herokuにログインする際に使用するメールアドレス

GitHubとHerokuとCircleCiが連携していればこれだけで準備は完了です。

circleci.ymlにtagデプロイ用の記載を追加

いよいよcircleci.ymlにtagをトリガーにする処理を書いていきます
以下でやっている事としてはjobsにデプロイに必要な処理や設定を記載しworkflowsjobsを実行するタイミングを記載しています

今回は本番環境デプロイ用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も実行前にtestjobを実行させるようにしています。

# .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

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4