こんにちは、MLBお兄さんこと松村です。
MLB はオールスターゲームを終え、後半戦に突入しました。8月1日のトレードデッドラインに向かって、各球団が慌ただしくなる時期になります。
GitHub Actions でデプロイを行う際に環境 (Environment) という機能を用いて、保護ルールやシークレットの管理をすることができます。
環境 (Environment) とは
環境 (Environment) で設定可能な主なルールは以下の通りです。
ルール | 内容 |
---|---|
必須レビューアー | 6名のユーザー、もしくはチームを指定する |
待機タイマー | ワークフローの開始を遅らせる時間を指定する |
また、環境ごとにシークレットや変数を指定することもできます。
ワークフローの各ジョブにおいてどの環境を適用するのかは、environment
という項目で指定します。
下記の YAML ファイルでは production
という環境が適用されます。
name: Deployment on: push: branches: - main jobs: deployment: runs-on: ubuntu-latest environment: production steps: - name: deploy # ...deployment-specific steps
パラメーターで環境を指定する
さて、この環境の値はハードコーディングすることが多いと思いますが、実は手動実行(workflow_dispatch
)ではパラメーターとして指定することができます。
下記の YAML ファイルを例に説明します。
name: GitHub Actions environment inputs on: workflow_dispatch: inputs: environment: description: '環境名' required: true type: environment jobs: show-vars-on-environment: environment: ${{ inputs.environment }} runs-on: ubuntu-latest steps: - name: show variables run: echo ${{ vars.WHO_AM_I }}
行番号 | 内容 |
---|---|
6行目 | 環境をパラメーターで受け取る設定です 手動実行の際に環境をリストから選択することができるようになります |
13行目 | 指定した環境をジョブに適用します |
17行目 | 環境に定義された変数の値を出力します |
環境に env1
を指定した場合の実行結果
環境に env2
を指定した場合の実行結果
何が嬉しい?
ジョブ1つにつき環境は1つしか指定できない(はず)ため、「やることは同様だけど環境が異なる」場合には同じジョブを2つ記載する必要がありました。
長くなればなるほどメンテナンスが大変ですよね。
jobs: deploy-staging: environment: staging runs-on: ubuntu-latest steps: - name: show variables run: echo ${{ vars.WHO_AM_I }} deploy-production: environment: production runs-on: ubuntu-latest steps: - name: show variables run: echo ${{ vars.WHO_AM_I }}
environment
を指定できると、上記のような記述をまとめることができます。
jobs: deploy: environment: ${{ inputs.environment }} runs-on: ubuntu-latest steps: - name: show variables run: echo ${{ vars.WHO_AM_I }}
ハードコーディングなワークフローと動的なワークフローを使い分けができるようになりたいですね。