Skip to Content

Embeddedアクション

embeddedアクションはジョブファイルを1つのステップとして実行します。共通のセットアップやチェックを別ファイルに切り出し、複数のワークフローから再利用できます。

読み込むファイルはワークフローではなくジョブです。name、steps、必要ならdefaultsを持ち、jobsキーはありません。

基本的な構文

auth.yml:

name: Authentication steps: - name: Get token id: get_token uses: shell with: cmd: echo "0123456789" test: res.code == 0 outputs: mytoken: replace(res.stdout, '\n', '')

workflow.yml:

name: Main vars: environment: staging api_url: "{{API_URL}}" jobs: - name: Main steps: - name: Authenticate id: auth uses: embedded with: path: "./auth.yml" vars: environment: "{{vars.environment}}" test: res.code == 0 outputs: token: res.outputs.mytoken - name: Call the API uses: http with: method: GET url: "{{vars.api_url}}/me" headers: authorization: "Bearer {{outputs.auth.token}}" test: res.code == 200

パラメータ

埋め込みのステップでは、実行するジョブファイルと、そこに渡す変数を指定します。

パラメータ型必須デフォルト説明
pathString必須-ジョブファイルのパス。ワークフローファイルからではなく、カレントディレクトリからの相対パスとして解決されます
varsObject任意{}埋め込みジョブに渡す変数。埋め込みジョブの中ではvars.<name>で参照します

ジョブファイルの中でuses: ./greetのようにローカルの外部アクションを使うと、ワークフローの中でワークフローファイルから探すのと同じく、そのジョブファイルからの相対パスで探します。

名前を付けた外部アクション

ジョブファイルのステップでは、ワークフローがactionsで外部アクションに付けた名前を、usesとdefaultsのキーに書けます。ジョブファイル自身はactionsを持ちません。使える名前は、そのジョブを埋め込むステップがあるワークフローのものです。

workflow.yml:

actions: redis: github.com/mozership/probe-redis@7d60e0699a914e3c987ed5f2403ed8a7f3d176fa # v0.1.0 jobs: - name: Session steps: - name: Check the session store uses: embedded with: path: "./jobs/session.yml" test: res.code == 0

jobs/session.yml:

name: Session store defaults: redis: url: redis://localhost:6379 steps: - name: The store answers uses: redis with: commands: [PING] test: res.results[0] == "PONG"
  • コミットはワークフローに1度書くだけで、埋め込むジョブファイルにも効きます。2つのワークフローから埋め込まれるジョブファイルは、それぞれのワークフローが名前を付けたアクションで動きます。
  • ジョブファイルがさらに埋め込むジョブファイルも、同じワークフローの名前で読まれます。
  • greet: ./greetのようにローカルパスを指す名前は、ジョブファイルがどこにあっても、ワークフローファイルの隣のディレクトリを指します。
  • ガードの下では、--allow-actionには名前ではなくアクションを完全な形で渡します。ローカルパスを指す名前の場合は、そのディレクトリの絶対パスです。
  • ワークフローが付けていない名前はアクションではありません。最初のジョブの前に終了ステータス2で実行が止まり、どのジョブファイルのどのステップがその名前を使っているかを示します。ステップが埋め込むジョブファイルと、それがさらに埋め込むジョブファイルが対象です。outputsから読むpathのように実行が進まないと分からない場合は、代わりにジョブを埋め込むステップが同じ内容で失敗します。probe checkは、ジョブを埋め込むステップのpathの行でその名前を報告します。pathがテンプレートのときは報告しません。

レスポンスオブジェクト

埋め込みジョブの終了後、resにその結果と出力が入ります。

プロパティ型説明
res.codeInteger埋め込みジョブのすべてのステップが成功したとき0
res.outputsObject埋め込みジョブのステップが公開したoutputs。出力名がキーになります
res.reportString埋め込みジョブのレポート。親のレポートにもネストして表示されます
res.errorString失敗時のエラーメッセージ
res.dumpBoolean常にfalse
statusIntegerres.codeと同じ値
rtObject埋め込みジョブの実行時間

res.outputsのキーは出力名なので、mytokenとして公開した値はres.outputs.mytokenで読みます。同じ値は公開したステップのidの下にもres.outputs.get_token.mytokenとして入っています。2つのステップが同じ名前を公開した場合、res.outputs.<name>には先に公開したステップの値が入り、ステップのidの下の形にはそれぞれの値が入ります。

関連項目

更新日時