GitHub ActionsでJob間でデータをやり取りしたい outputs

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

今回は、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を使用しなければ、並列実行で処理することができます。そのため処理時間を短縮することができます。実際にファイルスキャン自体は、事前処理が必要なかったため並列実行で処理を行いました。

実際に触った感想としては、以上のメリットが考えられました。まだまだ、ワカル程度なのでこれから使用して使えるようにしていきたいです。

終わりも

とりあえず終了です。去年の積み残しを消化しなければならないという固い意志で書き終えました。やはり思いついたら書き上げておかないといけませんね。忘れてしまうので….

さて、今年もしっかりとブログを執筆していきましょう。たまにはカフェでブログ執筆という週末もアリかもしれません。ワーケーションなどで温泉に入りながら執筆も憧れます。

さて!ぬるっと書いていきましょう。今年もオナシャス!

勉強に使った書籍はこちらです。

アバター画像
About 龍:Ryu 107 Articles
2022年入社で主にフロントエンドの業務でTailwindと遊ぶ日々。お酒とうまいご飯が好きで、運動がちょっと嫌いなエンジニアです。しゃべれるエンジニアを目指しておしゃべりとブログ執筆に注力中(業務もね)//
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる