Use variables collection as build predefined variables
This commit is contained in:
parent
5ed8286e74
commit
b94db067b7
5 changed files with 42 additions and 28 deletions
|
@ -252,23 +252,25 @@ module Ci
|
||||||
# All variables, including those dependent on environment, which could
|
# All variables, including those dependent on environment, which could
|
||||||
# contain unexpanded variables.
|
# contain unexpanded variables.
|
||||||
def variables(environment: persisted_environment)
|
def variables(environment: persisted_environment)
|
||||||
variables = predefined_variables
|
collection = Gitlab::Ci::Variables::Collection.new.tap do |variables|
|
||||||
variables += project.predefined_variables
|
variables.concat(predefined_variables)
|
||||||
variables += pipeline.predefined_variables
|
variables.concat(project.predefined_variables)
|
||||||
variables += runner.predefined_variables if runner
|
variables.concat(pipeline.predefined_variables)
|
||||||
variables += project.container_registry_variables
|
variables.concat(runner.predefined_variables) if runner
|
||||||
variables += project.deployment_variables if has_environment?
|
variables.concat(project.container_registry_variables)
|
||||||
variables += project.auto_devops_variables
|
variables.concat(project.deployment_variables) if has_environment?
|
||||||
variables += yaml_variables
|
variables.concat(project.auto_devops_variables)
|
||||||
variables += user_variables
|
variables.concat(yaml_variables)
|
||||||
variables += project.group.secret_variables_for(ref, project).map(&:to_runner_variable) if project.group
|
variables.concat(user_variables)
|
||||||
variables += secret_variables(environment: environment)
|
variables.concat(project.group.secret_variables_for(ref, project).map(&:to_runner_variable)) if project.group
|
||||||
variables += trigger_request.user_variables if trigger_request
|
variables.concat(secret_variables(environment: environment))
|
||||||
variables += pipeline.variables.map(&:to_runner_variable)
|
variables.concat(trigger_request.user_variables) if trigger_request
|
||||||
variables += pipeline.pipeline_schedule.job_variables if pipeline.pipeline_schedule
|
variables.concat(pipeline.variables)
|
||||||
variables += persisted_environment_variables if environment
|
variables.concat(pipeline.pipeline_schedule.job_variables) if pipeline.pipeline_schedule
|
||||||
|
variables.concat(persisted_environment_variables) if environment
|
||||||
|
end
|
||||||
|
|
||||||
variables
|
collection.to_runner_variables
|
||||||
end
|
end
|
||||||
|
|
||||||
def features
|
def features
|
||||||
|
|
|
@ -20,8 +20,12 @@ module HasVariable
|
||||||
super(new_key.to_s.strip)
|
super(new_key.to_s.strip)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_runner_variable
|
def to_hash
|
||||||
{ key: key, value: value, public: false }
|
{ key: key, value: value, public: false }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_runner_variable
|
||||||
|
to_hash
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1571,15 +1571,17 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def predefined_variables
|
def predefined_variables
|
||||||
[
|
visibility = Gitlab::VisibilityLevel.string_level(visibility_level)
|
||||||
{ key: 'CI_PROJECT_ID', value: id.to_s, public: true },
|
|
||||||
{ key: 'CI_PROJECT_NAME', value: path, public: true },
|
Gitlab::Ci::Variables::Collection.new.tap do |variables|
|
||||||
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
|
variables.append(key: 'CI_PROJECT_ID', value: id.to_s, public: true)
|
||||||
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true },
|
variables.append(key: 'CI_PROJECT_NAME', value: path, public: true)
|
||||||
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
|
variables.append(key: 'CI_PROJECT_PATH', value: full_path, public: true)
|
||||||
{ key: 'CI_PROJECT_URL', value: web_url, public: true },
|
variables.append(key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true)
|
||||||
{ key: 'CI_PROJECT_VISIBILITY', value: Gitlab::VisibilityLevel.string_level(visibility_level), public: true }
|
variables.append(key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true)
|
||||||
]
|
variables.append(key: 'CI_PROJECT_URL', value: web_url, public: true)
|
||||||
|
variables.append(key: 'CI_PROJECT_VISIBILITY', value: visibility, public: true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def container_registry_variables
|
def container_registry_variables
|
||||||
|
|
|
@ -7,13 +7,17 @@ module Gitlab
|
||||||
def initialize(variables = [])
|
def initialize(variables = [])
|
||||||
@variables = []
|
@variables = []
|
||||||
|
|
||||||
variables.each { |variable| append(variable) }
|
variables.each { |variable| self.append(variable) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def append(resource)
|
def append(resource)
|
||||||
@variables.append(Collection::Item.fabricate(resource))
|
@variables.append(Collection::Item.fabricate(resource))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def concat(resources)
|
||||||
|
resources.each { |variable| self.append(variable) }
|
||||||
|
end
|
||||||
|
|
||||||
def each
|
def each
|
||||||
@variables.each { |variable| yield variable }
|
@variables.each { |variable| yield variable }
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,10 +33,12 @@ module Gitlab
|
||||||
self.new(resource)
|
self.new(resource)
|
||||||
when ::Ci::Variable
|
when ::Ci::Variable
|
||||||
self.new(resource.to_hash)
|
self.new(resource.to_hash)
|
||||||
|
when ::Ci::PipelineVariable
|
||||||
|
self.new(resource.to_hash)
|
||||||
when self
|
when self
|
||||||
resource.dup
|
resource.dup
|
||||||
else
|
else
|
||||||
raise ArgumentError, 'Unknown CI/CD variable resource!'
|
raise ArgumentError, "Unknown `#{resource.class}` variable resource!"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue