GitHub Actions矩阵策略中如何正确访问步骤输出?
解决GitHub Actions中Matrix动态步骤输出的访问问题
GitHub Actions不支持嵌套的${{ }}表达式,所以你之前的嵌套写法会失效。以下是两种可行的解决方式:
方式1:在单个表达式内用方括号访问动态属性
GitHub Actions的表达式支持在方括号中使用字符串拼接来访问动态生成的步骤ID和输出名称,替代点语法的静态属性访问。
修改后的步骤代码示例:
jobs: your-job-name: runs-on: ubuntu-latest strategy: matrix: users: [user1, user2] comment-type: [issue, pr] steps: - name: ${{ matrix.users }}-${{ matrix.comment-type }} id: ${{ matrix.users }}-${{ matrix.comment-type }} shell: bash run: | # 示例生成日期,替换为你的实际逻辑 COMMENT_DATE=$(date +%Y-%m-%d) # 推荐使用新的输出语法(替代已弃用的::set-output) echo "${{ matrix.users }}-${{ matrix.comment-type }}=$COMMENT_DATE" >> "$GITHUB_OUTPUT" - name: echo issue and pr comment dates shell: bash run: | # 用方括号语法访问动态步骤和输出 echo "Last ${{ matrix.comment-type }} comment date for ${{ matrix.users }}: ${{ steps[matrix.users '-' matrix.comment-type].outputs[matrix.users '-' matrix.comment-type] }}"
关键说明:
- 方括号
steps[动态ID]允许你通过表达式拼接的方式引用动态生成的步骤ID,而点语法steps.xxx仅支持静态名称。 - 建议使用
echo "key=value" >> "$GITHUB_OUTPUT"替代旧的::set-output命令,后者已被GitHub官方弃用。
方式2:通过Job Outputs汇总Matrix结果(如需跨实例访问)
如果第二个步骤需要汇总所有Matrix实例的输出(而非仅当前实例),可以将每个Matrix步骤的输出导出到Job的outputs,再通过needs在后续Job中访问:
jobs: collect-comment-dates: runs-on: ubuntu-latest strategy: matrix: users: [user1, user2] comment-type: [issue, pr] # 导出每个实例的输出到Job级别 outputs: ${{ matrix.users }}-${{ matrix.comment-type }}: ${{ steps.get-date.outputs.comment-date }} steps: - name: Get comment date id: get-date shell: bash run: | COMMENT_DATE=$(date +%Y-%m-%d) echo "comment-date=$COMMENT_DATE" >> "$GITHUB_OUTPUT" summarize-dates: runs-on: ubuntu-latest # 依赖前面的Matrix Job needs: collect-comment-dates steps: - name: Echo all comment dates shell: bash run: | echo "user1 issue comment date: ${{ needs.collect-comment-dates.outputs.user1-issue }}" echo "user2 pr comment date: ${{ needs.collect-comment-dates.outputs.user2-pr }}"
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

