为什么我的 Github Actions 作业被跳过了?

问题描述 投票:0回答:1

这几天一直在努力解决这个问题。我在 GitHub Actions 工作流程中有这些工作:

jobs:
    
  check-for-changes:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v2
        
      - name: Install Black
        run: python -m pip install black
        
      - name: Check Black Formatting
        id: check
        continue-on-error: true
        run: |
          black black_test.py --check
          exit_code=$?
          echo "exit_code=$exit_code" >> $GITHUB_OUTPUT

  black-formatting:
    runs-on: ubuntu-latest
    needs: [check-for-changes]
    if: ${{ needs.check-for-changes.outputs.exit_code == 1 }}
    steps:
      - name: Checkout Code
        uses: actions/checkout@v2
        
      - name: Install Black
        run: python -m pip install black
        
      - name: Apply Black Formatting
        run: black black_test.py

我要构建的逻辑是让

check-for-changes
作业始终先运行。然后,它检查 Python 文件是否需要使用 Black 进行格式化。我正在捕获退出代码并使用 output.

保存它

下一个工作,

black-formatting
应该运行ONLY如果
1
来自
check-for-changes
工作的退出代码。

我只是使用提供的

yml
文件运行它,其中包含一个需要重新格式化的文件(我检查了
check-for-changes
作业的输出,并且有一条消息指出文件需要格式化,退出代码为1)工作被跳过了?如果我将
if: ${{ needs.check-for-changes.outputs.exit_code == 1 }}
行切换为
== 0
,那么它会继续,但不应该发生这种情况。我不确定我是否正确捕捉了
exit_code
或者是否有更好的方法来做到这一点。

yaml github-actions exit-code
1个回答
1
投票

如果您不将其声明为作业输出,您的第二个作业将无法访问步骤输出:

jobs:
  check-for-changes:
    # Map a step output to a job output
    outputs:
      exit_code: ${{ steps.check.outputs.exit_code}}

    steps:
      - name: Check Black Formatting
        id: check
        continue-on-error: true
        run: |
          black black_test.py --check
          exit_code=$?
          echo "exit_code=$exit_code" >> $GITHUB_OUTPUT

然后在第二份工作中参考:

jobs: 
  black-formatting:
    runs-on: ubuntu-latest
    needs: [check-for-changes]
    if: ${{ needs.check-for-changes.outputs.exit_code == 1 }}
© www.soinside.com 2019 - 2024. All rights reserved.