這個問題類似于如何運行 github-actions 步驟,即使上一步失敗,但仍然無法完成作業,但接受的答案對我沒有幫助,因為它會創建額外的作業。
我在下面要完成的是
- 當 test-app (step2) 通過時;test-clean 步驟應該運行并且 github 操作作業流回傳成功。
- 當 test-app (step2) 失敗時;應該運行 test-clean、action-slack 和 fail-action 步驟。github 操作作業流回傳失敗。
如何修復以下代碼以實作它?
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
uj5u.com熱心網友回復:
您可以使用狀態檢查功能來了解先前步驟的狀態。如果不包括這樣的功能,if: success() && ...則暗示。這意味著除非您在子句中使用always()or ,否則當先前的作業失敗時,作業將不會運行。failure()if
要解決前面步驟的結果,您可以使用(應用前)或(應用后)之類的步驟context。steps.<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 }}'"
PS:另一個問題的答案沒有添加額外的作業,但包括一個關于如何在作業中應用它的示例。但是,該答案并未解決您的確切用例,但它可以通過提供一些指示來幫助您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443666.html
上一篇:當我將發布分支合并到main,然后合并到dev以將更改合并到那里時,我的開發人員說它是X提前提交,X提交落后。為什么?
