今回は、GitHub Actions Outputsについてまとめました。artifact同様使えて損はない技術なのだなと思います。でも必要になった時にじゃないと知る機会がないのが悩ましいところです。たまには公式リファレンスを読み解くチャレンジも必要かもしれません。体系的に学ぶ本もアリですね。
挨拶
ども!皆さん新年あけて盛り上がっていますか?まだギアが上がっていない龍ちゃんです。プロジェクトの動きもゆっくりなので、去年の積み残しブログを消化していこうと思います。
前回に引き続き『GitHub Actions』にまつわることについて書いていこうと思います。前回記事では、Actionsで作成したファイルを保存するartifactについて触れました。そこからの発展形で、artifactに一時保存してjob間のデータ共有をする方法などがありました。今では、もっと単純な方法でJob間のデータ共有ができるようなので、そこについて書いていきます。使用のシナリオは1パターンしか知らないので、もしこんなシナリオにも使えるなどの情報がありましたらください。
Job間のデータ受け渡し
今回の解説は、公式リファレンスにもしっかりと記載があります。前提知識として、Job間で実行環境が異なるという点を抑える必要があります。
赤枠で宣言したものは、青枠で使用することができません。あと重要なのは、needs
で設定をしなければ、jobは並列で実行されます。今回は、赤枠で情報をインプットして、青枠で情報を表示するために『赤枠→青枠』という流れで実行します。
name: Outputs Sample
on: workflow_dispatch
jobs:
set-outputs:
runs-on: ubuntu-latest
outputs:
my-outputs: ${{ steps.set.outputs.my-outputs }};
my-outputs2: ${{ steps.set.outputs.my-outputs2 }};
some-outputs: ${{ steps.out.outputs.some-outputs }};
steps:
- name: Create Outputs
id: set
run: |
echo "my-outputs=初めてのoutputs" >> $GITHUB_OUTPUT
echo "my-outputs2=こんちゃ" >> $GITHUB_OUTPUT
- name: Create Outputs2
id: out
run: echo "some-outputs=初めてのoutputs2" >> $GITHUB_OUTPUT
load-outputs:
runs-on: ubuntu-latest
needs: set-outputs
steps:
- name: Read Outputs
run: |
echo "my-outputs: ${{ needs.set-outputs.outputs.my-outputs }}"
echo "my-outputs2: ${{ needs.set-outputs.outputs.my-outputs2 }}"
echo "some-outputs: ${{ needs.set-outputs.outputs.some-outputs }}"
outputsでは宣言的に使用するということが、イメージとして近いかと思います。宣言時に「どこのステップでなんという名前か」というものを設定します。その後、特定ステップで「変数名を指定して書き込み」という処理で書き込むことができます。呼び出しは、例を読んでもらえればよいかと思います。前処理のjob名を指定して情報を抜き出します。
どんな時に使うのか?
さて、サンプルで情報共有することができるということはわかったかと思います。ここからは、自分がどんな時にoutputsを使用したかについて書いていきたいと思います。
以下の三つのJobを作成したときに、コンテナレジストリーのパスを出力してJob間共有を行いました。
- Dockerで構築したプロジェクトのイメージをコンテナレジストリーにビルド
- Dockerで構築したプロジェクトに対してセキュリティスキャンを実行する
- ファイルスキャンでプロジェクトのコードをスキャンする
僕が感じたメリットとしては、どこで処理が落ちているのかわかりやすいという点です。1つのJob内に処理がたくさん書いてあると、エラーが起きた時にショックが大きいです。分けておくと、エラー部分を探す時間が短縮されました。
あとは、並列処理が魅力的です。Jobを切り分けてneedを使用しなければ、並列実行で処理することができます。そのため処理時間を短縮することができます。実際にファイルスキャン自体は、事前処理が必要なかったため並列実行で処理を行いました。
実際に触った感想としては、以上のメリットが考えられました。まだまだ、ワカル程度なのでこれから使用して使えるようにしていきたいです。
終わりも
とりあえず終了です。去年の積み残しを消化しなければならないという固い意志で書き終えました。やはり思いついたら書き上げておかないといけませんね。忘れてしまうので….
さて、今年もしっかりとブログを執筆していきましょう。たまにはカフェでブログ執筆という週末もアリかもしれません。ワーケーションなどで温泉に入りながら執筆も憧れます。
さて!ぬるっと書いていきましょう。今年もオナシャス!
勉強に使った書籍はこちらです。