Class: Ci::RetryJobService
- Inherits:
-
BaseService
- Object
- BaseService
- Ci::RetryJobService
- Includes:
- Gitlab::Utils::StrongMemoize
- Defined in:
- app/services/ci/retry_job_service.rb
Instance Attribute Summary
Attributes inherited from BaseService
#current_user, #params, #project
Instance Method Summary collapse
-
#clone!(job, variables: [], enqueue_if_actionable: false, start_pipeline: false) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
- #execute(job, variables: []) ⇒ Object
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
#clone!(job, variables: [], enqueue_if_actionable: false, start_pipeline: false) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/services/ci/retry_job_service.rb', line 22 def clone!(job, variables: [], enqueue_if_actionable: false, start_pipeline: false) # Cloning a job requires a strict type check to ensure # the attributes being used for the clone are taken straight # from the model and not overridden by other abstractions. raise TypeError unless job.instance_of?(Ci::Build) || job.instance_of?(Ci::Bridge) check_access!(job) new_job = job.clone(current_user: current_user, new_job_variables_attributes: variables) if enqueue_if_actionable && new_job.action? new_job.set_enqueue_immediately! end start_pipeline_proc = -> { start_pipeline(job, new_job) } if start_pipeline new_job.run_after_commit do start_pipeline_proc&.call ::Ci::CopyCrossDatabaseAssociationsService.new.execute(job, new_job) ::Deployments::CreateForJobService.new.execute(new_job) ::MergeRequests::AddTodoWhenBuildFailsService .new(project: project) .close(new_job) end ::Ci::Pipelines::AddJobService.new(job.pipeline).execute!(new_job) do |processable| BulkInsertableAssociations.with_bulk_insert do processable.save! end end job.reset # refresh the data to get new values of `retried` and `processed`. new_job end |
#execute(job, variables: []) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'app/services/ci/retry_job_service.rb', line 7 def execute(job, variables: []) if job.retryable? job.ensure_scheduling_type! new_job = retry_job(job, variables: variables) ServiceResponse.success(payload: { job: new_job }) else ServiceResponse.error( message: 'Job cannot be retried', payload: { job: job, reason: :not_retryable } ) end end |