summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-13 13:23:23 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-10-13 13:23:23 +0200
commit03a8ed971154cb218b82e8be53943612de94999f (patch)
tree64c0a05386b14be692935366a9e9443b7df1e690
parent204fdcb1abb9c76b2d4bd6260c6e5ce91529aeb8 (diff)
downloadgitlab-ce-03a8ed971154cb218b82e8be53943612de94999f.tar.gz
Use trasaction to process build deployment
-rw-r--r--app/services/create_deployment_service.rb28
1 files changed, 16 insertions, 12 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
index 799ad3e1bd0..c6dc2148c11 100644
--- a/app/services/create_deployment_service.rb
+++ b/app/services/create_deployment_service.rb
@@ -2,25 +2,29 @@ require_relative 'base_service'
class CreateDeploymentService < BaseService
def execute(deployable = nil)
- environment = find_or_create_environment
+ ActiveRecord::Base.transaction do
+ @deployable = deployable
+ @environment = prepare_environment
- deployment = project.deployments.create(
- environment: environment,
+ deploy.tap do |deployment|
+ deployment.update_merge_request_metrics!
+ end
+ end
+ end
+
+ private
+
+ def deploy
+ project.deployments.create(
+ environment: @environment,
ref: params[:ref],
tag: params[:tag],
sha: params[:sha],
user: current_user,
- deployable: deployable
- )
-
- deployment.update_merge_request_metrics!
-
- deployment
+ deployable: @deployable)
end
- private
-
- def find_or_create_environment
+ def prepare_environment
project.environments.find_or_create_by(name: expanded_name) do |environment|
environment.external_url = expanded_url
end