Add latest changes from gitlab-org/gitlab@15-7-stable-ee
This commit is contained in:
parent
7ef79412d3
commit
dbe77d4ac7
|
|
@ -19,7 +19,7 @@ module Ci
|
|||
end
|
||||
|
||||
# rubocop: disable CodeReuse/ActiveRecord
|
||||
def clone!(job, variables: [], enqueue_if_actionable: false)
|
||||
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.
|
||||
|
|
@ -32,7 +32,11 @@ module Ci
|
|||
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::CreateForBuildService.new.execute(new_job)
|
||||
|
|
@ -59,15 +63,12 @@ module Ci
|
|||
def check_assignable_runners!(job); end
|
||||
|
||||
def retry_job(job, variables: [])
|
||||
clone!(job, variables: variables, enqueue_if_actionable: true).tap do |new_job|
|
||||
clone!(job, variables: variables, enqueue_if_actionable: true, start_pipeline: true).tap do |new_job|
|
||||
check_assignable_runners!(new_job) if new_job.is_a?(Ci::Build)
|
||||
|
||||
next if new_job.failed?
|
||||
|
||||
ResetSkippedJobsService.new(project, current_user).execute(job)
|
||||
|
||||
Ci::PipelineCreation::StartPipelineService.new(job.pipeline).execute
|
||||
new_job.reset
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -76,6 +77,11 @@ module Ci
|
|||
raise Gitlab::Access::AccessDeniedError, '403 Forbidden'
|
||||
end
|
||||
end
|
||||
|
||||
def start_pipeline(job, new_job)
|
||||
Ci::PipelineCreation::StartPipelineService.new(job.pipeline).execute
|
||||
new_job.reset
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -292,6 +292,21 @@ RSpec.describe Ci::RetryJobService do
|
|||
|
||||
it_behaves_like 'retries the job'
|
||||
|
||||
context 'automatic retryable build' do
|
||||
let!(:auto_retryable_build) do
|
||||
create(:ci_build, pipeline: pipeline, ci_stage: stage, user: user, options: { retry: 1 })
|
||||
end
|
||||
|
||||
def drop_build!
|
||||
auto_retryable_build.drop_with_exit_code!('test failure', 1)
|
||||
end
|
||||
|
||||
it 'creates a new build and enqueues BuildQueueWorker' do
|
||||
expect { drop_build! }.to change { Ci::Build.count }.by(1)
|
||||
.and change { BuildQueueWorker.jobs.count }.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when there are subsequent jobs that are skipped' do
|
||||
let!(:subsequent_build) do
|
||||
create(:ci_build, :skipped, pipeline: pipeline, ci_stage: deploy_stage)
|
||||
|
|
|
|||
Loading…
Reference in New Issue