summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-14 10:19:16 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-14 10:19:16 +0200
commit3726dc4bb73647123ebef5c97f401f5537d3ae16 (patch)
treee26c4735f2f42132d7cbd125ae968280be185b9b
parent4e9342599b472a28928a95fd43efc4df851f8e33 (diff)
downloadgitlab-ce-3726dc4bb73647123ebef5c97f401f5537d3ae16.tar.gz
Check if project exists before creating deployment
-rw-r--r--app/services/create_deployment_service.rb6
-rw-r--r--app/workers/build_success_worker.rb2
-rw-r--r--spec/services/create_deployment_service_spec.rb17
3 files changed, 20 insertions, 5 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
index c6dc2148c11..ff9a8310a8c 100644
--- a/app/services/create_deployment_service.rb
+++ b/app/services/create_deployment_service.rb
@@ -2,6 +2,8 @@ require_relative 'base_service'
class CreateDeploymentService < BaseService
def execute(deployable = nil)
+ return unless executable?
+
ActiveRecord::Base.transaction do
@deployable = deployable
@environment = prepare_environment
@@ -14,6 +16,10 @@ class CreateDeploymentService < BaseService
private
+ def executable?
+ project && name.present?
+ end
+
def deploy
project.deployments.create(
environment: @environment,
diff --git a/app/workers/build_success_worker.rb b/app/workers/build_success_worker.rb
index a9dc34166a1..500d357ce31 100644
--- a/app/workers/build_success_worker.rb
+++ b/app/workers/build_success_worker.rb
@@ -4,8 +4,6 @@ class BuildSuccessWorker
def perform(build_id)
Ci::Build.find_by(id: build_id).try do |build|
- return unless build.project
-
create_deployment(build)
end
end
diff --git a/spec/services/create_deployment_service_spec.rb b/spec/services/create_deployment_service_spec.rb
index 343b4385bf2..5fe56e7725f 100644
--- a/spec/services/create_deployment_service_spec.rb
+++ b/spec/services/create_deployment_service_spec.rb
@@ -84,11 +84,22 @@ describe CreateDeploymentService, services: true do
expect(subject).to be_persisted
end
end
+
+ context 'when project was removed' do
+ let(:project) { nil }
+
+ it 'does not create deployment or environment' do
+ expect { subject }.not_to raise_error
+
+ expect(Environment.count).to be_zero
+ expect(Deployment.count).to be_zero
+ end
+ end
end
describe 'processing of builds' do
let(:environment) { nil }
-
+
shared_examples 'does not create environment and deployment' do
it 'does not create a new environment' do
expect { subject }.not_to change { Environment.count }
@@ -133,12 +144,12 @@ describe CreateDeploymentService, services: true do
context 'without environment specified' do
let(:build) { create(:ci_build, project: project) }
-
+
it_behaves_like 'does not create environment and deployment' do
subject { build.success }
end
end
-
+
context 'when environment is specified' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline, environment: 'production', options: options) }