Github 动作可选步骤执行

Github action optional step execution

如果上一步失败,我正在尝试执行一些选项步骤。 我需要下载旧工件以避免我的 Terraform 构建操作未检测到更改。因此,我添加了一个 diff 操作来识别用于构建 zip 层的 docker 文件是否已更改,如果没有更改,则应下载先前执行的旧工件。在某些情况下,最后一次执行不包含工件,例如职位的失败。在这种情况下,我想根据现有的 docker 图像获取最新版本。 注意:该代码是矩阵执行的一部分,但为简单起见,我将操作减少到问题区域。

  job_prepare:
     .....
  job_layers:
    needs: job_prepare
    runs-on: ubuntu-latest
    strategy:
      matrix: ${{fromJson(needs.job_prepare.outputs.layer_matrix)}}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: matrix name
        run: |
          echo $GITHUB_WORKSPACE
          echo ${{ matrix.path }}
      - uses: technote-space/get-diff-action@v3
        id: git_diff
        with:
          PREFIX_FILTER: ${{ matrix.prefix }}
          SUFFIX_FILTER: Dockerfile
      - name: LayerDockerBuild
        id: layerDocker
        if: steps.git_diff.outputs.diff
        run: |
          docker build ...
          docker push ...
      - name: Layer via Artifacts
        if: (steps.git_diff.outputs.diff == false)
        uses: dawidd6/action-download-artifact@v2
        with:
          workflow: review.yml
          name: ${{ matrix.name }}
      - name: Layer via Docker
        if: steps.git_diff.outputs.diff && ${{ failure() }}
        id: layerD
        run: |
          ....
          docker pull "docker.pkg.github.com/$REPO_NAME/$IMAGE_ID:$VERSION"
          docker run --rm -v $GITHUB_WORKSPACE:/data docker.pkg.github.com/$REPO_NAME/$IMAGE_ID:$VERSION cp /packages/${{ matrix.name }}.zip /data
      - name: Upload layer zip
        if: ${{ always() }}
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.name }}
          path: ${{ matrix.name }}.zip

问题基本上是if: steps.git_diff.outputs.diff && ${{ failure() }}

行的逻辑

感谢您提供任何提示帮助,当 diff 为 false 并且步骤 ~Layer via Artifacts~ 没有失败时如何设置步骤选项。

如果前一个步骤没有失败,要执行您的步骤,您只需设置不带括号的 failure()。有了 if,就不需要括号了。

if: steps.git_diff.outputs.diff && failure()

希望对您有所帮助