Class: Ci::RetryPipelineService
- Inherits:
-
BaseService
- Object
- BaseService
- Ci::RetryPipelineService
- Includes:
- Gitlab::OptimisticLocking
- Defined in:
- app/services/ci/retry_pipeline_service.rb
Constant Summary
Constants included from Gitlab::OptimisticLocking
Gitlab::OptimisticLocking::MAX_RETRIES
Instance Attribute Summary
Attributes inherited from BaseService
#current_user, #params, #project
Instance Method Summary collapse
Methods included from Gitlab::OptimisticLocking
log_optimistic_lock_retries, retry_lock, retry_lock_histogram, retry_lock_logger
Methods inherited from BaseService
Methods included from BaseServiceUtility
#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level
Methods included from Gitlab::Allowable
Constructor Details
This class inherits a constructor from BaseService
Instance Method Details
#check_access(pipeline) ⇒ Object
36 37 38 39 40 41 42 |
# File 'app/services/ci/retry_pipeline_service.rb', line 36 def check_access(pipeline) if can?(current_user, :update_pipeline, pipeline) ServiceResponse.success else ServiceResponse.error(message: '403 Forbidden', http_status: :forbidden) end end |
#execute(pipeline) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/services/ci/retry_pipeline_service.rb', line 7 def execute(pipeline) access_response = check_access(pipeline) return access_response if access_response.error? pipeline.ensure_scheduling_type! builds_relation(pipeline).find_each do |build| next unless can_be_retried?(build) Ci::RetryJobService.new(project, current_user).clone!(build) end pipeline.processables.latest.skipped.find_each do |skipped| retry_optimistic_lock(skipped, name: 'ci_retry_pipeline') { |build| build.process(current_user) } end pipeline.reset_source_bridge!(current_user) ::MergeRequests::AddTodoWhenBuildFailsService .new(project: project, current_user: current_user) .close_all(pipeline) start_pipeline(pipeline) ServiceResponse.success rescue Gitlab::Access::AccessDeniedError => e ServiceResponse.error(message: e., http_status: :forbidden) end |