summaryrefslogtreecommitdiff
path: root/app/services/ci/retry_pipeline_service.rb
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-13 15:14:40 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-13 15:14:40 +0100
commit19ef4083f373dd5fdc6b4c59325a4cb14179e699 (patch)
tree281a0820d22651199b8e7aba6792d13fd3b98178 /app/services/ci/retry_pipeline_service.rb
parent1be454e71272f1a6489883e9d4b27c40c6277591 (diff)
downloadgitlab-ce-19ef4083f373dd5fdc6b4c59325a4cb14179e699.tar.gz
Add a separate CI/CD pipeline retry service class
Diffstat (limited to 'app/services/ci/retry_pipeline_service.rb')
-rw-r--r--app/services/ci/retry_pipeline_service.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb
new file mode 100644
index 00000000000..f873acc9964
--- /dev/null
+++ b/app/services/ci/retry_pipeline_service.rb
@@ -0,0 +1,22 @@
+module Ci
+ class RetryPipelineService
+ include Gitlab::Allowable
+
+ def initialize(pipeline, user)
+ @pipeline = pipeline
+ @user = user
+ end
+
+ def execute
+ unless can?(@user, :update_pipeline, @pipeline)
+ raise Gitlab::Access::AccessDeniedError
+ end
+
+ @pipeline.stages.each do |stage|
+ stage.builds.failed_or_canceled.find_each do |build|
+ Ci::Build.retry(build, @user)
+ end
+ end
+ end
+ end
+end