diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-10 15:43:15 +0100 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-02-13 15:11:21 +0100 |
commit | 9202b1f4dfc65df9daff3797b3012840f6359f03 (patch) | |
tree | ffd346862ff90e8c9a2da9d081a2cdff4f81953c | |
parent | 4e3fc2121731b42318af13968638e8cfc6651a61 (diff) | |
download | gitlab-ce-9202b1f4dfc65df9daff3797b3012840f6359f03.tar.gz |
Extract CI/CD build retry code to separate service
-rw-r--r-- | app/models/ci/build.rb | 27 | ||||
-rw-r--r-- | app/services/ci/retry_build_service.rb | 43 |
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 |