GitHub Actions の環境を試してみたメモ

3 min read読了の目安(約2800字

GitHub Actions でずっと気になってた環境の機能をちょっと試してみようと思います。

環境を使うと、誰かが承認しないと実行できないワークフローとかが定義出来るみたいなのでずっときになってました。

環境を作ってみる

環境の作り方は GitHub のリポジトリの Settings にある Environments の New environment のボタンから作れるみたいなので押してみましょう。

名前を入れて環境を作ると、いくつかの環境を保護するためのルールが設定できる画面に活きました。

Required reviews でレビューする人を設定できて、Wait timer で実行までの猶予時間が設定できます。

その他にもブランチを指定できたり、Environment secrets で環境固有のシークレットが設定できます。

とりあえず自分がレビューしないと出来ないようにしてみました。

あとは、シークレットの確認用に Environemtn secrets に MESSAGE という名前のシークレットに「テスト環境!!!」という値を設定しました。

GitHub Actions から環境を使ってみる

GitHub Actions のジョブから環境を使うようにするには environment で name を指定します。
これだけで、そのジョブが実行する際に環境に対してレビューが必要だと設定されていると、ジョブが承認されるまで実行されないということが実現できます。

デフォルトで生成される Hello world 的なワークフローに for_test_env という名前のジョブを追加して、これに先ほど作った Test という環境を設定してみました。

name: CI

on:
  push:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run a one-line script
        run: echo Hello, world!
  # Test 環境を指定したジョブ
  for_test_env:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: Test
    steps:
      - name: Hello
        run: echo Hello from test env.

このワークフローが実行されると以下のように for_test_env のジョブは実行されずにペンディングの状態になっています。

Review deployments を選択するとジョブが実行されます!!思ったより簡単でした。

シークレットも設定していたので、それを使ってみようと思います。
シークレットは普通に Settings の Secrets で設定したのと同じ要領で使えるみたいです。以下のように ${{ secrets.MESSAGE }} と入力すると Environment の Secrets に設定した MESSAGE の値が取得できます。

ということで、こんな感じにワークフローを少し変えてみました。

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run a one-line script
        run: echo Hello, world!
  # Test 環境を指定したジョブ
  for_test_env:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: Test
    steps:
      - name: Hello
        run: echo Hello from test env. ${{ secrets.MESSAGE }}

シークレットの値を標準出力に出力すると *** になるので表示はされていませんが、出てるっぽい空気を感じます。

まとめ

とりあえず動いた上に凄く簡単でした…。今まで触ってなかったのがちょっともったい無かったです…