summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-10 15:43:15 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-13 15:11:21 +0100
commit9202b1f4dfc65df9daff3797b3012840f6359f03 (patch)
treeffd346862ff90e8c9a2da9d081a2cdff4f81953c
parent4e3fc2121731b42318af13968638e8cfc6651a61 (diff)
downloadgitlab-ce-9202b1f4dfc65df9daff3797b3012840f6359f03.tar.gz
Extract CI/CD build retry code to separate service
-rw-r--r--app/models/ci/build.rb27
-rw-r--r--app/services/ci/retry_build_service.rb43
2 files changed, 44 insertions, 26 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 8c1b076c2d7..db0cf032087 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -63,32 +63,7 @@ module Ci
end
def retry(build, user = nil)
- new_build = Ci::Build.create(
- ref: build.ref,
- tag: build.tag,
- options: build.options,
- commands: build.commands,
- tag_list: build.tag_list,
- project: build.project,
- pipeline: build.pipeline,
- name: build.name,
- allow_failure: build.allow_failure,
- stage: build.stage,
- stage_idx: build.stage_idx,
- trigger_request: build.trigger_request,
- yaml_variables: build.yaml_variables,
- when: build.when,
- user: user,
- environment: build.environment,
- status_event: 'enqueue'
- )
-
- MergeRequests::AddTodoWhenBuildFailsService
- .new(build.project, nil)
- .close(new_build)
-
- build.pipeline.mark_as_processable_after_stage(build.stage_idx)
- new_build
+ Ci::RetryBuildService.new(build, user).retry!
end
end
diff --git a/app/services/ci/retry_build_service.rb b/app/services/ci/retry_build_service.rb
new file mode 100644
index 00000000000..92006cb331c
--- /dev/null
+++ b/app/services/ci/retry_build_service.rb
@@ -0,0 +1,43 @@
+module Ci
+ class RetryBuildService
+ def initialize(build, user)
+ @build = build
+ @user = user
+ @pipeline = build.pipeline
+ end
+
+ def retry!
+ clone_build.tap do |new_build|
+ new_build.enqueue!
+
+ MergeRequests::AddTodoWhenBuildFailsService
+ .new(@build.project, @user)
+ .close(new_build)
+
+ @pipeline.mark_as_processable_after_stage(@build.stage_idx)
+ end
+ end
+
+ private
+
+ def clone_build
+ Ci::Build.create(
+ ref: @build.ref,
+ tag: @build.tag,
+ options: @build.options,
+ commands: @build.commands,
+ tag_list: @build.tag_list,
+ project: @build.project,
+ pipeline: @build.pipeline,
+ name: @build.name,
+ allow_failure: @build.allow_failure,
+ stage: @build.stage,
+ stage_idx: @build.stage_idx,
+ trigger_request: @build.trigger_request,
+ yaml_variables: @build.yaml_variables,
+ when: @build.when,
+ environment: @build.environment,
+ user: @user)
+ end
+ end
+end