Home > Blockchain >  How to block a gitlab merge until a script passes?
How to block a gitlab merge until a script passes?

Time:08-24

We are using GitLab and GitLab CI which has a build, test and package step. We have written a script which checks if a user has done some house keeping for the feature they have added. The script returns a 1 or 0 depending on if the house keeping is done. At the moment the script goes in the build step of the GitLab CI, which means the build fails unless the house keeping is done. This is good, as the developer wont be able to merge until the house keeping is done. But, it would be better if the build and tests would continue to run, but the user was simply blocked from completing the merge request. E.g. by adding some automated "approve" step that is approved when the script passes.

Is there an obvious, easy or best way to do this?

Thanks

CodePudding user response:

You could have this check as the very last step in the CI, this way everything else would go through and only this would fail.

Another way is marking all the other jobs as when: always instead of only running them when the previous jobs where successful.

CodePudding user response:

Set the job to use the builtin .post stage and use needs: []. This will cause the job to (1) run immediately with no delay and (2) will not stop your build/test or any other jobs from starting because it is in the last stage and (3) the failure of the job will still block the merge (provided you have the require pipelines to succeed setting enabled)

housekeeping:
  stage: .post  # always the last stage in any pipeline
  needs: []  # start immediately with no dependencies
  script: "..."
  # ...
  • Related