跳到主要内容

任务间传递输出参数

适用场景 :当你需要在 step 之间、job 之间、甚至 workflow 之间传递输出参数时,例如将构建版本号从 build job 传递给 deploy job。

前提条件

  • 理解 idoutputsneeds 的作用。
  • 理解 ATOMGIT_OUTPUT 环境变量的用法。

快速示例

name: pipeline-with-outputs

on:
push:
branches:
- main

jobs:
prepare:
runs-on: [ubuntu-latest, x64, small]
steps:
- id: version
run: echo "version=1.0.0" >> "$ATOMGIT_OUTPUT"
- id: sha
run: echo "sha=${{ atomgit.sha }}" >> "$ATOMGIT_OUTPUT"

build:
runs-on: [ubuntu-latest, x64, small]
needs: prepare
steps:
- name: Use output from prepare
run: |
echo "version=${{ jobs.prepare.outputs.version }}"
echo "sha=${{ jobs.prepare.outputs.sha }}"

配置说明

三级传递模型

AtomGit Action 支持 outputs 的三级传递:Step → Job → Workflow

Step 输出(ATOMGIT_OUTPUT)
→ 映射到 Job 输出(jobs.<job_id>.outputs)
→ 映射到 Workflow_call job 输出(jobs.workflow_call_job_id.outputs)

Step 输出

在 step 中使用 ATOMGIT_OUTPUT 环境变量写入输出:

steps:
- id: version
run: echo "version=1.0.0" >> "$ATOMGIT_OUTPUT"

- id: build-result
run: |
echo "status=success" >> "$ATOMGIT_OUTPUT"
echo "artifact-path=dist/app.tar.gz" >> "$ATOMGIT_OUTPUT"

- name: Use step output
run: echo "version=${{ steps.version.outputs.version }}"

注意:每个输出参数的值最大不超过 1MB。多行输出需使用分隔符语法。

Job 输出

将 step 输出映射到 job 输出,使其他 job 通过 needs 引用:

jobs:
prepare:
runs-on: [ubuntu-latest, x64, small]
steps:
- id: version
run: echo "version=1.0.0" >> "$ATOMGIT_OUTPUT"
- id: build-result
run: echo "status=success" >> "$ATOMGIT_OUTPUT"

deploy:
runs-on: [ubuntu-latest, x64, small]
needs: prepare
steps:
- name: Use job output
run: |
echo "version=${{ jobs.prepare.outputs.version }}"
echo "status=${{ jobs.prepare.outputs.status }}"

Workflow 输出

在可重用工作流(workflow_call)中,可将 job 输出映射到 workflow 输出:

name: reusable-build

on:
workflow_call:
outputs:
version:
description: "构建版本号"
value: ${{jobs.prepare.outputs.version}}

jobs:
prepare:
runs-on: [ubuntu-latest, x64, small]
steps:
- id: version
run: echo "version=1.0.0" >> "$ATOMGIT_OUTPUT"

调用方接收输出:

jobs:
call-build:
uses: ./.gitcode/workflows/reusable-build.yml
deploy:
needs: call-build
runs-on: [ubuntu-latest, x64, small]
steps:
- name: Use workflow output
run: echo "version=${{ jobs.call-build.outputs.version }}"

多行输出

写入多行值到 ATOMGIT_OUTPUT 时使用分隔符语法:

steps:
- id: multiline-output
run: |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "content<<$EOF" >> "$ATOMGIT_OUTPUT"
echo "line1" >> "$ATOMGIT_OUTPUT"
echo "line2" >> "$ATOMGIT_OUTPUT"
echo "$EOF" >> "$ATOMGIT_OUTPUT"