support/misc/gitlab-ci.yml.in: retry a job only if it failed due to a runner issue

Each time a new pipeline is triggered, some jobs may fail due to
temporary issue with a Gitlab runner (network, power supply, docker or
maintainance).

Most of the problems are "runner system failure" [1] and require to
retart each failed jobs manually by maintainers to complete the
pipeline with only real failures if any.

The "retry" keyword allows to configure how many times a job is retried
if it fails. "retry:when" allows to retry a failed job only on
specific failure types like "runner_system_failure".

While at it, retry a job if it failed due to a timeout failure (this
timeout means that the job was pending for more than 24h) [2].

Such timeout failures occur on pipelines testing each Buildroot's
defconfig since there is not enough gitlab runner available to build
all of them within 24h.

Retry only jobs that are more likely to wait for a runner
(generate-gitlab-ci-yml, runtime_test_base, defconfig_base and test_pkg).

[1] https://gitlab.com/buildroot.org/buildroot/-/jobs/4936949397 (runner system failure)
[2] https://gitlab.com/buildroot.org/buildroot/-/jobs/4936949530 (timeout failure or the job got stuck)

https://docs.gitlab.com/ee/ci/yaml/#retrywhen

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Romain Naour 2023-08-26 23:00:11 +02:00 committed by Thomas Petazzoni
parent 5acaac7122
commit e0166ecba0
2 changed files with 20 additions and 0 deletions

View File

@ -10,6 +10,11 @@ stages:
generate-gitlab-ci-yml: generate-gitlab-ci-yml:
stage: generate-gitlab-ci stage: generate-gitlab-ci
script: ./support/scripts/generate-gitlab-ci-yml support/misc/gitlab-ci.yml.in > generated-gitlab-ci.yml script: ./support/scripts/generate-gitlab-ci-yml support/misc/gitlab-ci.yml.in > generated-gitlab-ci.yml
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
artifacts: artifacts:
when: always when: always
paths: paths:

View File

@ -67,6 +67,11 @@ before_script:
tail -200 runtime-test.log tail -200 runtime-test.log
exit 1 exit 1
} }
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
artifacts: artifacts:
when: always when: always
expire_in: 2 weeks expire_in: 2 weeks
@ -99,6 +104,11 @@ before_script:
- TEST_CASE_NAME=${CI_JOB_NAME} - TEST_CASE_NAME=${CI_JOB_NAME}
- echo "Starting runtime test ${TEST_CASE_NAME}" - echo "Starting runtime test ${TEST_CASE_NAME}"
- ./support/testing/run-tests -o test-output/ -d test-dl/ -k --timeout-multiplier 10 ${TEST_CASE_NAME} - ./support/testing/run-tests -o test-output/ -d test-dl/ -k --timeout-multiplier 10 ${TEST_CASE_NAME}
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
artifacts: artifacts:
when: always when: always
expire_in: 2 weeks expire_in: 2 weeks
@ -119,6 +129,11 @@ before_script:
needs: needs:
- pipeline: $PARENT_PIPELINE_ID - pipeline: $PARENT_PIPELINE_ID
job: generate-gitlab-ci-yml job: generate-gitlab-ci-yml
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
artifacts: artifacts:
when: always when: always
expire_in: 2 weeks expire_in: 2 weeks