J'ai dans mon travail pour CI quelques étapes pouvant lancer une erreur. Je ne veux pas de redémarrer le flux de travail à chaque étape avec une erreur et je veux aller à la dernière étape qui vérifie ces étapes et compléter ce travail d'échec. Mais je ne peux pas obtenir les informations de statut auparavant.
name: CI
on: [pull_request]
jobs:
myjob:
runs-on: ubuntu-latest
steps:
- name: Step 1
id: hello
run: <any>
continue-on-error: true
- name: Step 2
id: world
run: <any>
continue-on-error: true
- name: Check on failures
if: job.steps.hello.status == failure() || job.steps.world.status == failure()
run: exit 1
Lorsque j'utilise les prochaines constructions de "si" ou "courir", alors obtiendrez: étapes -> {}, job.steps -> null.
Comment puis-je obtenir des informations sur le statut?
Vous pouvez obtenir le statut à l'aide de : SETPS.STEPNAME.OUTEMENCE , associé à un chèque de succès () ou de défaillance ()
name: CI
on: [pull_request]
jobs:
myjob:
runs-on: ubuntu-latest
steps:
- name: Step 1
id: hello
run: <any>
continue-on-error: true
- name: Step 2
id: world
run: <any>
continue-on-error: true
- name: Check on failures
if: (${{ success() }} || ${{ failure() }}) && (${{ steps.hello.outcome }} == 'failure' || ${{ steps.world.outcome }} == 'failure')
run: exit 1
jobs:
build:
name: Build
env:
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
runs-on: ubuntu-latest
steps:
- name: script
id: test1
continue-on-error: true
run: |
ls -l sadasd
- name: script
id: sync
continue-on-error: true
run: |
ls -l
- name: Dump steps context
env:
STEPS_CONTEXT: ${{ toJson(steps) }}
run: echo "$STEPS_CONTEXT"
le résultat
Run echo "$STEPS_CONTEXT"
{
"test1": {
"outputs": {},
"outcome": "failure",
"conclusion": "success"
},
"sync": {
"outputs": {},
"outcome": "success",
"conclusion": "success"
}
}
alors pourrait utiliser l'étape:
- name: sync run
id: sync
continue-on-error: true
run: |
.....
- name: after_success
run: |
...
if: steps.sync.outcome == 'success'
- name: after_failure
run: |
...
if: steps.sync.outcome != 'success'
J'utilise un peu similaire à @peterevans suggéré plus tôt mais tirant parti de la sortie Shell pour une commande et set +e
drapeau:
name: CI
on: [pull_request]
jobs:
myjob:
runs-on: ubuntu-latest
steps:
- name: Step 1
id: hello
run: |
set +e
./my-script.sh
echo ::set-output name=exit_status::failure
- name: Step 2
id: world
run:
set +e
python3 ./my-script.py
echo ::set-output name=exit_status::$?
- name: Check on failures
if: steps.hello.outputs.exit_status != 0 | steps.world.outputs.exit_status != 0
run: exit 1