diff options
author | Rydkin Maxim <maks.rydkin@gmail.com> | 2017-02-20 01:17:24 +0300 |
---|---|---|
committer | Rydkin Maxim <maks.rydkin@gmail.com> | 2017-04-04 21:11:24 +0300 |
commit | c81ef3041e50411166620a99e6ac80f9dc97d86e (patch) | |
tree | 783a8d8fd59b62a21b218722bcc765143b4a00c9 /app/services/ci/create_pipeline_service.rb | |
parent | 0a4b853f2ceb0ad6c7394d1056f9139e53b38688 (diff) |
add auto-cancel for pending pipelines on branch, if they are not HEAD
fix changelog MR reference
add non-HEAD builds finder and add `created` pipelines to scope
add spec for auto-cancel non-HEAD pipelines and refactor create_pipeline_service_spec
more refactoring for spec
adds option for auto-cancel into CI/CD settings
fix spec to new configuration
fix rubocop
fix schema.rb
fix schema.rb
replace Gitlab 9.0 with 9.1 in doc
change wording on pipeline settings
added auto_canceled_by field as identifier of autocancel subject
remove unnecessary index
replace service with retry_lock
replace auto_cancel_pending_pipelines boolean setting with integer (and enum in model)
fix schema.rb
fix schema.rb
remove projekt attribute and clean up spec
clean up spec withcouple of shared examples
added spec for "It does not cancel current pipeline" scenario
add some specs to auto-cancel
add spec for another branch pipelines
Diffstat (limited to 'app/services/ci/create_pipeline_service.rb')
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 38a85e9fc42..cb09973081a 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -53,6 +53,8 @@ module Ci .execute(pipeline) end + cancel_pending_pipelines if project.auto_cancel_pending_pipelines? + pipeline.tap(&:process!) end @@ -63,6 +65,16 @@ module Ci pipeline.git_commit_message =~ /\[(ci[ _-]skip|skip[ _-]ci)\]/i end + def cancel_pending_pipelines + Gitlab::OptimisticLocking.retry_lock( + pipeline.auto_cancelable_pipelines) do |cancelables| + cancelables.find_each do |cancelable| + cancelable.cancel_running + cancelable.update_attributes(auto_canceled_by: pipeline.id) + end + end + end + def commit @commit ||= project.commit(origin_sha || origin_ref) end |