LoginSignup
2
0

More than 3 years have passed since last update.

GithubのReleaseをトリガーにしてCircleCI2.0でデプロイする

Posted at

GithubのReleaseを使う

GithubのRelease機能を使ったことある人はいますでしょうか?
これまでブランチをdevelopment, staging, productionに切って、それぞれに対応するデプロイ環境にリリースするようにしていたのですが、仕事ではフロントエンドとサーバーサイドの開発をそれぞれ別リポジトリで管理しており、デプロイしたバージョンに何を入れたか忘れてしまったり、コミット履歴長すぎて見る気しなかったりして、リリースノートにすべてまとめたいと思い、今回はGithubのReleaseを公開したらCircleCIでデプロイまで走る方法を調べました。

基本的な実装方法は、ここを参考にしました。
https://qiita.com/oohira/items/09aa91cc01109f8d053b

デプロイには以下の条件を設定しました。

  • リポジトリのブランチはmasterブランチのみを使用する
  • masterブランチにコミットされたら、develop環境にデプロイする
  • GithubのReleaseでRCバージョンのタグ(ex. 0.1.0-rc1)が打たれたら、staging環境にデプロイする
  • GithubのReleaseでリリースバージョンのタグ(ex. 0.1.0)が打たれたら、production環境にデプロイする
  • sandboxブランチにコミットされたら、sandbox環境にデプロイする(masterブランチにマージする前に実験できるお遊びサーバーを追加しました)

対象のブランチ&タグでビルドが走るようにする

要点だけまとめると、.circleci/config.ymlに以下の点に気をつけて書くだけでOKです。

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8.15.1
    steps:
      - checkout
      - deploy:
          name: deploy build artifact
          command: |
            if [[ "${CIRCLE_TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+\-rc[0-9]+$ ]]; then
              echo "Deploy to staging"
            elif [[ "${CIRCLE_TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
              echo "Deploy to production"
            else
              if [ "${CIRCLE_BRANCH}" == "master" ]; then
                echo "Deploy to development"
              elif [ "${CIRCLE_BRANCH}" == "sandbox" ]; then
                echo "Deploy to sandbox"  
              else
              fi
            fi

環境変数のCIRCLE_TAGが設定してある場合、CIRCLE_BRANCHにはブランチ名が入ってこないため、タグで判定したあとにブランチで判定しています。
念の為補足ですが、CIRCLE_BRANCHが設定してある場合、CIRCLE_TAGは空になっています。

workflows:
  version: 2
  build-and-deploy:
    jobs:
      - build:
          filters:
            tags:
              only:
                - /^[0-9]+\.[0-9]+\.[0-9]+\-rc[0-9]+$/
                - /^[0-9]+\.[0-9]+\.[0-9]+$/
            branches:
              only:
                - /^sandbox$/
                - /^master$/
      - deploy:
          requires:
            - build
          filters:
            tags:
              only:
                - /^[0-9]+\.[0-9]+\.[0-9]+\-rc[0-9]+$/
                - /^[0-9]+\.[0-9]+\.[0-9]+$/
            branches:
              only:
                - /^sandbox$/
                - /^master$/

requiresで指定している前処理でfilterを設定しているだけだと、その後の処理は実行されないため、タグですべての処理に実行してほしい処理全てにfilter設定を書く必要があります。

2
0
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
2
0