LoginSignup
3
1

More than 1 year has passed since last update.

Github Actions で、特定のブランチにリリースを発行した場合のみCI/CDを実行する

Last updated at Posted at 2022-01-20

題名の通りです。
あまり綺麗だなとは思えないので、良い方法を知っている方がいたら教えて頂ければ幸いです。。

前提

検証環境と本番環境が存在していて、それぞれstagingブランチとmainブランチに対応しています。

  • stagingブランチは、マージされたときにCI/CDが実行されます。
  • mainブランチは、手動の承認フローをいれたいのと、Release管理を忘れないようにするために、Releaseが発行されたら実行するようにしたいです <-今回はここの話

やりたいこと

GithubのReleaseで、特定のブランチ(main)に対してリリースが発行された場合のみ

に、Github Actionを実行させたい

ただし、ヒューマンエラーで、発行先のブランチを(stagingなどに)間違えてしまった場合は、CIが実行されないようにしたい

image.png

設定方法

name: リリースタグがついたときにデプロイする
on:
  release:
    types:
      - released

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    # mainにリリースタグがついたときだけ、、はこれではできなかった
    #if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v2
      - run: git fetch --all
      # mainブランチ以外でタグが発行されたら失敗させる
      - run: diff <(git rev-parse HEAD) <(git rev-parse origin/main) && exit 0 || (echo "mainブランチではないためデプロイしません"; exit 1)
      - run: (デプロイ)

はじめ、コメントアウトしてある if を使おうとしましたが、リリースタグが付いた時のGithubのイベントでは、refがタグ名になってしまい、うまく動作しません

そこで、

  1. stepsの中で git fetch --all し、ブランチ情報を引っ張ってくる
  2. タグがついたコミットハッシュと、mainブランチのコミットハッシュが一致しないと、終了コード1で終了させ、次に進ませない

という形にすることで、やりたかったことは実現できました。

しかし、もっと簡単な方法があってもいいような...(見逃しているだけかもしれません)

3
1
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
3
1