WIP : Allow CI/CD jobs to be locked
What does this MR do?
Enable CI/CD to lock jobs -so that jobs with the same lock string may not be run concurrently
Are there points in the code the reviewer needs to double check?
Why was this MR needed?
There are some situations where we want to define a CI/CD pipeline so that e.g. deployments to production don't happen concurrently and can only deploy to production one at a time.
Screenshots (if relevant)
Does this MR meet the acceptance criteria?
-
Changelog entry added, if necessary -
Documentation created/updated -
API support added -
Tests added for this feature/bug - Conform by the code review guidelines
-
Has been reviewed by a UX Designer -
Has been reviewed by a Frontend maintainer -
Has been reviewed by a Backend maintainer -
Has been reviewed by a Database specialist
-
-
Conform by the merge request performance guides -
Conform by the style guides -
If you have multiple commits, please combine them into a few logically organized commits by squashing them -
Internationalization required/considered -
End-to-end tests pass ( package-and-qa
manual pipeline job)
What are the relevant issue numbers?
https://gitlab.com/gitlab-org/gitlab-ce/issues/20481
Tasks
-
Extend CI.yml -
Check PopulatePipelineService creates jobs with the new lock
attribute -
Add new database column to Ci::Build
-
Prevent jobs from being picked up if there is another running job for the same project of the same stage -
Show that a job is locked due to another running job, (see app/views/projects/jobs/show.html.haml
) -
Update doc/ci/yaml/README.md
-
Invalid values for lock
string ? -
Consider refactoring can_pick?