[gitlab-ci] new "when" values for "retry" attribute acting on job's script output log with regex and/or exit code

Problem to solve

As a dev/devops, I want my pipeline jobs to retry automatically on functional/technical script errors, so that I don't have to do it myself :)

Intended users

  • devops
  • dev

User experience goal

We use acceptance tools to guarantee the quality of our code, e.g. we use sonarQube, Fortify etc ... The problem is that sometimes the api called by the scripts of our jobs do not respond and we get timeouts on our scripts that we log functionally or for which we have a specific exit code.

Proposal

currently the "retry" attribute in the gitlab ci allows us to use several "when" corresponding to gitlab or gitlab-runner errors, we would also like to be able to decide on a retry based on the exit code of our script or on a regex search of the job output log.

Further details

test:
  script: rspec
  retry:
    max: 2
    when: job_exit_code_equals
    exit_code: 3
test:
  script: rspec
  retry:
    max: 2
    when: job_exit_code_less_than
    exit_code: 3
test:
  script: rspec
  retry:
    max: 2
    when: job_exit_code_greater_than
    exit_code: 3
test:
  script: rspec
  retry:
    max: 2
    when: job_output_log_contains
    regex: /.*reset by peer.*/

Permissions and Security

Anyone with gitlab-ci.yml write rights :)

Documentation

Availability & Testing

What does success look like, and how can we measure that?

What is the type of buyer?

Is this a cross-stage feature?

Links / references

Edited by Filipe Pinto