https://zenn.dev/matken/articles/approve-deployments-with-github-environments

GitHub で共同開発をしている場合、GitHub Actions を使用して継続的なデプロイを行っていることがあると思います。 例えば Production デプロイするために、Git のタグを使用して、そのタグ作成をフックに自動デプロイみたいな運用が考えられます。

ただ、そういった運用は、運用自体が簡単ではあっても、セキュリティに難があります。 業務委託等の、社外エンジニアが開発に参加している場合でも、開発に参加するには、そのレポジトリに対して Write 以上の権限が必要になります。

すると、Git タグを作成する権限もあるわけで、そうなると、社外メンバーが Production デプロイを勝手に行えてしまいます。

そういったことを防ぐために、Production デプロイ自体に承認機能を付けることができます。 それを、GitHub Actions と GitHub Environments という機能を組み合わせることで実現できます。

Environment を作成する

  1. レポジトリのページから、Settings > Environments へアクセスする

  2. New environment をクリックして、Production 等を入力する

  3. Required reviewers を有効にし、社内メンバーを追加し、Save protection rules をクリックする

  4. Deployment branches で、Selected branches を選択し、v* タグを指定する

Deployment branches には、ブランチだけではなく、タグも指定できます。 しかし、Currently applies to 0 branches とあるように、そのタグが存在していても、カウントされないようです。

GitHub Actions を作成する

例えば、以下の GitHub Actions を作成してみます。

name: 'Deploy'

on:
  push:
    tags:
      - 'v*'

jobs:
  deploy:
    environment:
      name: Production

    runs-on: ubuntu-latest

    steps:
      - uses: actions/[email protected]
      - run: echo 'Hello'

environment のところで、先程作成した Environment の名前を指定します。

steps の内容は、本来は、Cloud Run へのデプロイ等の処理が入ってきます。

また、GitHub Environments は、steps の中の処理が失敗しないかしか見ていません。

デプロイする

上記の GitHub Actions は、tag で実行されます。