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()
希望对您有所帮助
如果上一步失败,我正在尝试执行一些选项步骤。 我需要下载旧工件以避免我的 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()
希望对您有所帮助