summaryrefslogtreecommitdiff
path: root/app/services/create_deployment_service.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-09-13 14:14:55 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-09-19 10:05:35 +0200
commita4638dddf22797f46d72ea7b73c8453ba68645ab (patch)
tree3b270989070a48e9e1ea3f983070168f863c4bd1 /app/services/create_deployment_service.rb
parent1d51bc7dfd04886fa5af69a60bb509691d697813 (diff)
downloadgitlab-ce-a4638dddf22797f46d72ea7b73c8453ba68645ab.tar.gz
Add support for dynamic environments
Environments that can have a URL with predefined CI variables.
Diffstat (limited to 'app/services/create_deployment_service.rb')
-rw-r--r--app/services/create_deployment_service.rb34
1 files changed, 33 insertions, 1 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
index efeb9df9527..efa0798f47d 100644
--- a/app/services/create_deployment_service.rb
+++ b/app/services/create_deployment_service.rb
@@ -3,9 +3,13 @@ require_relative 'base_service'
class CreateDeploymentService < BaseService
def execute(deployable = nil)
environment = project.environments.find_or_create_by(
- name: params[:environment]
+ name: expanded_name
)
+ if expanded_url
+ environment.external_url = expanded_url
+ end
+
project.deployments.create(
environment: environment,
ref: params[:ref],
@@ -15,4 +19,32 @@ class CreateDeploymentService < BaseService
deployable: deployable
)
end
+
+ private
+
+ def expanded_name
+ name.expand_variables(variables)
+ end
+
+ def expanded_url
+ return unless url
+
+ @expanded_url ||= url.expand_variables(variables)
+ end
+
+ def name
+ params[:environment]
+ end
+
+ def url
+ options[:url]
+ end
+
+ def options
+ params[:environment] || {}
+ end
+
+ def variables
+ params[:variables] || []
+ end
end