Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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設定を書く必要があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away