sgo*_*owd 17 github github-actions
这个问题类似于如何运行 github-actions 步骤,即使上一步失败,同时仍然使作业失败,但接受的答案对我没有帮助,因为它创建了额外的作业。
我想在下面完成的是
如何修复以下代码以使其发生?
name: CI
on:
pull_request:
branches:
- master
push:
branches:
- master
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: test-app
run: ./gradlew test
- name: test-clean
run: some cleanup that should run always
- name: action-slack
if: ${{ step2.result != 'success' }}
uses: 8398a7/action-slack@v3
with:
status: ${{ step2.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
- name: fail-action
run: |
if ${{ step2.result != 'success' }}; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 25
您可以使用状态检查功能来了解之前步骤的状态。如果您不包含这样的功能,if: success() && ...则暗示如此。这意味着当先前的作业失败时,作业将不会运行,除非您在子句中使用always()or 。failure()if
要解决前面步骤的结果,您可以使用(应用之前)或(应用之后)等步骤。contextsteps.<id>.outcomecontinue-on-errorsteps.<id>.conclusioncontinue-on-error
这是一个结合了所有内容的工作示例:
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Mock to test workflow
- name: Test app
id: test-app # will be referenced later
run: |
echo "Testing app (randomly fails)"
if [[ $(($RANDOM % 2)) == 0 ]]; then exit 0; else exit 1; fi
# runs always
- name: test-clean
if: always()
run: echo "Cleanup after tests"
# runs if previous jobs failed and test-app was not successful (failure/cancelled)
- name: action-slack
if: failure() && steps.test-app.outcome != 'success'
run: |
echo "Run action-slack"
echo "Result of test-app was '${{ steps.test-app.outcome }}'"
Run Code Online (Sandbox Code Playgroud)
PS:另一个问题的答案不会添加额外的工作,而是包含一个如何将其应用于不同工作的示例。然而,这个答案并没有解决您的确切用例,但它可以通过提供一些指导来帮助您。