GitHubのEnvironmentsことはじめ
GitHubのEnvironmentsという機能がとても便利だったので紹介します。
本記事では、Environmentsの設定方法や、GitHub Actionsと組み合わせた簡単な事例で説明していきます。
公式のDocs
Environmentsとはなにか?
公式のDocsには下記のように書いてありました。
A workflow job that references an environment must follow any protection rules for the environment before running or accessing the environment's secrets.
GitHubのリポジトリに対して、保護ルールやSecret情報を持つ環境を設定することができる機能になります。
ここで言う環境とは、develop(開発)・staging(検証)・production(本番)といった、ソフトウェア開発におけるリリース運用フロー時によく構築する環境のことを指しています。
ブランチ運用のGit-Flowでも、developやfeature、mainなどが登場しますが、基本的にはmainブランチが本番相当の環境であることが多いと思います。
Git-Flowの参考
また、このEnvironmentsはGitHub Actionsと組み合わせることによってCICDのデプロイワークフローを組むことが可能になります。
Environmentsの設定
実際に、Environmentsを設定していきます。
環境名の設定
-
リポジトリのSetting > Environments
-
Environments > New Environmentを押下
-
New Environmentで登録したい環境名を入力
production
という環境を作成してみました。詳細設定について解説していきます。
環境の詳細設定
Environment Protection rules
環境に対して保護設定を行うことができます。
- Required Reviewers
- Wait timer
Required Reviewersのチェックを入れると、デプロイに対する承認が必須となり、承認がないとデプロイのジョブが実行されないように保護をかけることができます。(Pull Requestの流れと同じです。)
また、wait timeでジョブ実行までの待機時間を設定することができます。
Deployment Branches
デプロイ対象ブランチの制限を行うことができます。
-
All Branches
すべてのブランチからデプロイが可能です。 -
Protected Branches
ブランチ設定の保護機能で保護されているブランチのみ、デプロイが可能です。 -
Selected Branches
ブランチ保護設定とは別に、デプロイ対象ブランチを独自に指定して制限します。
Add secret
環境ごとに環境変数の登録が可能です。
(例)NameをHOGE_KEY
で登録すると、GitHub Actionsからは、下記のように指定してValueを参照することができます。
{{ secrets.HOGE_KEY }}
productionとstagingというEnvironmentを設定して、GitHub Actionsで簡単なワークフローを組んでみました。(特にデプロイ作業は行いません。echoで出力するだけのシンプルなフローです)
name: Deploy-Staging-Production
on:
workflow_dispatch:
jobs:
deploy_staging:
runs-on: ubuntu-latest
environment:
name: staging
url: https://yahoo.co.jp
steps:
- run: echo deploy staging
- run: echo secret ${{ secrets.SAMPLE_SECRET }}
deploy_production:
runs-on: ubuntu-latest
environment:
name: production
url: https://google.com
steps:
- run: echo deploy production
- run: echo secret ${{ secrets.SAMPLE_SECRET }}
environment:
name: production
url: https://google.com
で、job.environment.name
・job.environment.url
を指定することができます。
この指定を行うと、ジョブがenvironment機能の対象になります。
項目
-
name
・・・environmentの環境名を設定します -
url
(任意)・・・成果物のurlパスを指定します。デプロイ結果画面にリンクが表示されるようになります。
実行&承認作業
production環境にレビュー設定を入れているため、GitHub Actionsを動かすと画像のように、deploy_productionのフローが待機状態になります。
Review deploymentsを押すと、承認画面に遷移します。
チェックと、コメントを入れてRejectするかApprove & deploymentを押下します。
- Rejectすると、deploymentは失敗します。
- Approve & deploymentすると、productionのジョブが始まります。
すべてのフローが終了すると、下記のような状態になり、承認者とコメントも見ることができます。
デプロイ履歴の確認
リポジトリにEnvironmentの項目が表示されるようになります。画像右下
環境名を押下し、詳細画面に遷移すると、過去のdeploy履歴が閲覧でき、デプロイ状態とバージョンの紐付けの閲覧が可能になります。
まとめ
- Environmentsを利用することで、GitHub Actionsでのデプロイ承認フローを構築することができ、安全なデプロイ作業が実現できる。
- 複数の環境を設定して柔軟なGitHub Actionsのワークフローを組むことができる。
- デプロイ履歴の確認や状態の閲覧を簡単に行うことができる。
Discussion
2023/03/17現在、
と書かれており、ProやTeamでも環境の機能を使用できるようです。
いつ頃変更が入ったのか一次ソースは見つからなかったのですが、
のコメントを見るとおそらく2022年の9~10月頃みたいです。