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パラメータ
埋め込みのステップでは、実行するジョブファイルと、そこに渡す変数を指定します。
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
path | String | 必須 | - | ジョブファイルのパス。ワークフローファイルからではなく、カレントディレクトリからの相対パスとして解決されます |
vars | Object | 任意 | {} | 埋め込みジョブに渡す変数。埋め込みジョブの中では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 == 0jobs/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.code | Integer | 埋め込みジョブのすべてのステップが成功したとき0 |
res.outputs | Object | 埋め込みジョブのステップが公開したoutputs。出力名がキーになります |
res.report | String | 埋め込みジョブのレポート。親のレポートにもネストして表示されます |
res.error | String | 失敗時のエラーメッセージ |
res.dump | Boolean | 常にfalse |
status | Integer | res.codeと同じ値 |
rt | Object | 埋め込みジョブの実行時間 |
res.outputsのキーは出力名なので、mytokenとして公開した値はres.outputs.mytokenで読みます。同じ値は公開したステップのidの下にもres.outputs.get_token.mytokenとして入っています。2つのステップが同じ名前を公開した場合、res.outputs.<name>には先に公開したステップの値が入り、ステップのidの下の形にはそれぞれの値が入ります。
関連項目
更新日時