Github Actions入門その4-環境変数/スクリプト/Artifactsを使う
はじめに
以下のエントリに引き続き、Github Actions を学習して学んだことをまとめて見ました。
- Github Actions 入門その 1-概要と用語の整理 | ゲンゾウ用ポストイット
- Github Actions 入門その 2-簡単なワークフローを作成してみる | ゲンゾウ用ポストイット
- Github Actions 入門その 3-アクションを探す・使う・自作する | ゲンゾウ用ポストイット
このエントリでは、カスタマイズのテクニックについて触れていきます。
変数の使用方法、スクリプトの実行方法、ジョブとジョブの間をつなぐための方法により、カスタマイズが可能です。
ワークフローの中で変数を使う
Github Actions では、ワークフローが実行されるたびに 割り当てられるデフォルトの環境変数 があります。
デフォルトの環境変数だけで不十分であれば、独自に環境変数を追加することも可能です。
ワークフローの YAML 設定ファイルに定義することでこれを実現できます。
サンプルコードを見ていきましょう。
以下のサンプルコードでは、 POSTGRES_HOST
と POSTGRES_PORT
という 2 つの環境変数を作成しています。
環境変数は node client.js
の中で参照可能です( Github Actions のなかでは、 Node.js はデフォルトで利用可能みたいです )。
---
name: use-environment-variables
run-name: use-environment-variables
on:
- push
jobs:
use-environment-variables:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- run: node .github/scripts/use_environment_variables.js
env:
POSTGRES_HOST: postgres_host
POSTGRES_PORT: 5432
呼び出している JavaScript のコードは以下のようになっています。
$ cat .github/scripts/use_environment_variables.js
#!/usr/bin/env node
console.log("START------");
// デフォルトの環境変数
console.log(process.env.GITHUB_ACTOR);
// 独自の環境変数
console.log(process.env.POSTGRES_HOST);
console.log(process.env.POSTGRES_PORT);
console.log("END------");
実行結果を gh run list
で確認すると以下のようになりました。
$ gh run view --log 4840935837
...
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5370003Z ##[group]Run node .github/scripts/use_environment_variables.js
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5370525Z node .github/scripts/use_environment_variables.js
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5427717Z shell: /usr/bin/bash -e {0}
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5428101Z env:
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5428391Z POSTGRES_HOST: postgres_host
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5428649Z POSTGRES_PORT: 5432
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.5428940Z ##[endgroup]
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.7089290Z START------
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.7095077Z genzouw
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.7095402Z postgres_host
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.7095682Z 5432
use-environment-variables Run node .github/scripts/use_environment_variables.js 2023-04-29T23:20:30.7095977Z END------
...
use-environment-variables Complete job 2023-04-29T21:51:14.3371069Z Cleaning up orphan processes
設定した環境変数が JavaScript のコードから参照できていることがわかります。
ワークフローの中でスクリプトを使う
アクションの中でスクリプトやシェルコマンドを実行できます。
実行される環境は runs-on
属性で設定した仮想環境上となります。
( runs-on: ubuntu-22.04
の場合、 Ubuntu 22.04 上で実行されます )
先程の「ワークフローの中で変数を使う」のところで見たように、ステップ内の run
フィールドにはシェルコマンドを記述できます。run
に記述したシェルコマンドは仮想環境 Ubuntu 22.04 上で実行されます。
Github Actions のドキュメントのサンプルコードには、ワークフロー内でのみ利用するスクリプトは .github/scripts/
ディレクトリに配置されていますし、先の例でも同じ場所に配置してみました。
特に好みがなければここに配置するのが良いでしょう。
スクリプト実行時の「シェル」を指定できます。
jobs:
example-job:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash
ここでは ./.github/scripts/build.sh
ファイルを Bash で実行するようにしています。
ただし、 bash ./.github/scripts/build.sh
のようにrun
フィールドに明示してもいいと思いますし、シバン ( シェルスクリプトの1行目に記述する #!/usr/bin/env bash
)を記述しておけば、利用されるシェルを明示できます。
利用するシーンとしては、以下のようにシェルコマンドを実行させるシェルを明示したい場合でしょう。
jobs:
example-job:
steps:
- shell: bash
run: |
expr 1 + 1
ジョブ間でデータを共有する
ワークフロー内で定義したしたジョブが他のジョブと共有するためのファイルをいくつか生成したとします。
あるいは他の目的でも構いませんが、後ほど参照するためにファイルを保存しておきたいとします。
その場合には Github 内に Artifacts として保存しておくのが良いでしょう。
Artifacts はビルドやテストのタイミングで生成されたファイルの総称です。
例えば、ビルド時に生成された実行ファイルが考えられます。
テストの実行結果、スクリーンショット、ログなども考えられます。
Articles は、それらを生成したワークフローと紐付けられており、同じワークフロー内の他のジョブから参照できます。
サンプルコードを見ていきましょう。
以下のサンプルコードでは、 output.log
というログファイルを Artifacts としてアップロードしています。
Artifacts のアップロードのためには、 actions/upload-artifact@v3
アクションを利用します。
---
name: upload-artifacts
run-name: upload-artifacts
on:
- push
jobs:
upload-artifacts:
runs-on: ubuntu-22.04
steps:
- shell: bash
run: |
expr 2 + 1 > output.log
- name: Upload output file
uses: actions/upload-artifact@v3
with:
name: output-log-file
path: output.log
実行が成功すれば、 実行結果フローの下に Artifacts の一覧が表示されます。
アップロードした output-log-file
が確認できます。
Artifacts のダウンロードのためには、 actions/download-artifact@v3
アクションを利用します。
ジョブコードを抜粋すると以下のようになります。
---
jobs:
upload-artifacts:
#...
download-artifacts:
needs: [upload-artifacts]
steps:
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: output-log-file
upload-artifacts
ジョブが終了しファイルがアップロードされている必要があるため、 needs
フィールドで実行順序を制御しています。
ひとこと
Artifacts はどのぐらいの容量までアップロードできるんだろう?
以下のページを見ると、無料アカウントの場合は 500MB までのようですが。
ディスカッション
コメント一覧
まだ、コメントがありません