2017-02-10 09:43:15 -05:00
|
|
|
module Ci
|
2017-02-14 04:38:17 -05:00
|
|
|
class RetryBuildService < ::BaseService
|
|
|
|
def execute(build)
|
2017-02-14 07:39:14 -05:00
|
|
|
reprocess(build).tap do |new_build|
|
|
|
|
new_build.enqueue!
|
2017-02-14 06:20:02 -05:00
|
|
|
|
2017-02-14 04:38:17 -05:00
|
|
|
MergeRequests::AddTodoWhenBuildFailsService
|
|
|
|
.new(build.project, current_user)
|
|
|
|
.close(new_build)
|
2017-02-10 10:19:29 -05:00
|
|
|
|
2017-02-14 04:38:17 -05:00
|
|
|
build.pipeline
|
|
|
|
.mark_as_processable_after_stage(build.stage_idx)
|
|
|
|
end
|
2017-02-10 09:43:15 -05:00
|
|
|
end
|
|
|
|
|
2017-02-14 04:38:17 -05:00
|
|
|
def reprocess(build)
|
|
|
|
unless can?(current_user, :update_build, build)
|
2017-02-13 10:38:08 -05:00
|
|
|
raise Gitlab::Access::AccessDeniedError
|
|
|
|
end
|
2017-02-10 09:43:15 -05:00
|
|
|
|
|
|
|
Ci::Build.create(
|
2017-02-14 04:38:17 -05:00
|
|
|
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: current_user)
|
2017-02-10 09:43:15 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|