在 GitHub Action 中如何根据上一个步骤的输出条件化一个步骤?

13

构建一个基于提交消息的GitHub操作,我正在尝试根据提交消息设置步骤,以确定它是否包含特定字符串,将其设置为变量,然后在下一步中通过条件检查。

我的当前操作实现已经可以工作:

name: Smoke Test
on:
  push:
    branches:
      - main

permissions:
  contents: read
  issues: write

jobs:
  smoking:
    runs-on: [ubuntu-latest]
    steps:
      - name: Run smoke tests
        if: ${{ !contains(github.event.head_commit.message, 'smoke_test') }}
        run: |
          echo 'Smoke Test not requested'
          exit 1
  stuff:
    needs: smoking
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: JasonEtco/create-an-issue@v2
        env:
          GITHUB_TOKEN: ${{ secrets.TOKEN }}
        with:
          filename: .github/ISSUE_TEMPLATE/smoke-test.md
        id: create-issue
      - run: 'echo Created issue number ${{ steps.create-issue.outputs.number }}'
      - run: 'echo Created ${{ steps.create-issue.outputs.url }}'

但随着实现:

exit 1

导致动作在操作面板中指示出错,尽管这样做可以起到作用,但从技术上讲并不准确,因为我不需要它出错,我只是不希望剩余的步骤运行。
我已经尝试设置一个变量:
if: ${{ contains(github.event.head_commit.message, 'smoke_test') }}
with:
  run-smoke-test: true
run: |
  echo 'Smoke Test requested'

但它没有进入下一步。

研究

在步骤 smoking 中,不依赖于另一个 Github actions,是否有一种方法来设置一个环境变量,以便在运行步骤 stuff 之前进行验证?

编辑

在阅读了答案并实施 工作产出 后,我写下了以下内容:

name: Smoke Test
on:
  push:
    branches:
      - main

permissions:
  contents: read
  issues: write

jobs:
  commitMessage:
    runs-on: ubuntu-latest
    outputs:
      output1: ${{ steps.isSmoke.outputs.test }}
    steps:
      - id: isSmoke
        if: ${{ contains(github.event.head_commit.message, 'smoke_test') }}
        run: echo "::set-output name=test::true"

  smokeTest:
    runs-on: ubuntu-latest
    needs: commitMessage
    steps:
      - uses: actions/checkout@v2
      - uses: JasonEtco/create-an-issue@v2
        if: steps.isSmoke.output.test == true
        env:
          GITHUB_TOKEN: ${{ secrets.DEV_TOKEN }}
        with:
          filename: .github/ISSUE_TEMPLATE/smoke-test.md

但是当使用smoke_test的提交消息时,它会绕过create-an-issue

enter image description here

我在阅读 "基于输出条件运行Github Actions步骤" 和以下内容后,得出我的结论:

一个条件是否可以在步骤之前,或者根据前一步骤的输出运行步骤的正确方式是什么?

1个回答

3
您正在寻找作业输出,它可以让您将数据发送到以下作业。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接