Read job variables directly from gitlab CI config
This commit is contained in:
parent
b578fbfb85
commit
b7946b50fc
|
@ -381,8 +381,12 @@ module Ci
|
|||
end
|
||||
|
||||
def job_yaml_variables
|
||||
options[:variables].to_h.map do |key, value|
|
||||
{ key: key, value: value, public: true }
|
||||
if commit.config_processor
|
||||
commit.config_processor.job_variables(name).map do |key, value|
|
||||
{ key: key, value: value, public: true }
|
||||
end
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ module Ci
|
|||
:allow_failure, :type, :stage, :when, :artifacts, :cache,
|
||||
:dependencies, :variables]
|
||||
|
||||
attr_reader :before_script, :image, :services, :variables, :path, :cache
|
||||
attr_reader :before_script, :image, :services, :path, :cache
|
||||
|
||||
def initialize(config, path = nil)
|
||||
@config = YAML.safe_load(config, [Symbol], [], true)
|
||||
|
@ -40,6 +40,15 @@ module Ci
|
|||
@stages || DEFAULT_STAGES
|
||||
end
|
||||
|
||||
def variables
|
||||
@variables
|
||||
end
|
||||
|
||||
def job_variables(name)
|
||||
job = @jobs[name.to_sym]
|
||||
job ? job[:variables] : []
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def initial_parsing
|
||||
|
@ -85,7 +94,6 @@ module Ci
|
|||
artifacts: job[:artifacts],
|
||||
cache: job[:cache] || @cache,
|
||||
dependencies: job[:dependencies],
|
||||
variables: job[:variables],
|
||||
}.compact
|
||||
}
|
||||
end
|
||||
|
|
|
@ -374,10 +374,10 @@ module Ci
|
|||
})
|
||||
end
|
||||
|
||||
it 'appends job variable to job attributes' do
|
||||
it 'returns job variables' do
|
||||
config = GitlabCiYamlProcessor.new(yaml_config, path)
|
||||
|
||||
expect(config.builds.first[:options][:variables]).to eq job_variables
|
||||
expect(config.job_variables(:rspec)).to eq job_variables
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -240,31 +240,27 @@ describe Ci::Build, models: true do
|
|||
end
|
||||
|
||||
context 'when job variables are defined' do
|
||||
def result_variables
|
||||
job_variables.map do |key, value|
|
||||
{ key: key, value: value, public: true }
|
||||
end
|
||||
end
|
||||
|
||||
before { build.update_attribute(:options, variables: job_variables) }
|
||||
|
||||
context 'when job variables are unique' do
|
||||
let(:job_variables) { { KEY1: 'value1', KEY2: 'value2' } }
|
||||
before { allow(build).to receive(:name) { 'staging' } }
|
||||
|
||||
it 'includes job variables' do
|
||||
expect(subject).to include(*result_variables)
|
||||
expect(subject).to include(
|
||||
{ key: :KEY1, value: 'value1', public: true },
|
||||
{ key: :KEY2, value: 'value2', public: true }
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when job variable has same key other variable has' do
|
||||
let(:job_variables) { { CI_BUILD_NAME: 'overridden' } }
|
||||
before { allow(build).to receive(:name) { 'production' } }
|
||||
|
||||
it 'contains job yaml variable' do
|
||||
expect(subject).to include(*result_variables)
|
||||
expect(subject).to include(key: :DB_NAME, value: 'mysql',
|
||||
public: true)
|
||||
end
|
||||
|
||||
it 'contains only one variable with this key' do
|
||||
expect(subject.count { |var| var[:key] == :CI_BUILD_NAME } ).to eq 1
|
||||
expect(subject.count { |var| var[:key] == :DB_NAME } ).to eq 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ services:
|
|||
|
||||
before_script:
|
||||
- gem install bundler
|
||||
- bundle install
|
||||
- bundle install
|
||||
- bundle exec rake db:create
|
||||
|
||||
variables:
|
||||
|
@ -17,7 +17,7 @@ types:
|
|||
|
||||
rspec:
|
||||
script: "rake spec"
|
||||
tags:
|
||||
tags:
|
||||
- ruby
|
||||
- postgres
|
||||
only:
|
||||
|
@ -26,27 +26,32 @@ rspec:
|
|||
spinach:
|
||||
script: "rake spinach"
|
||||
allow_failure: true
|
||||
tags:
|
||||
tags:
|
||||
- ruby
|
||||
- mysql
|
||||
except:
|
||||
- tags
|
||||
|
||||
staging:
|
||||
variables:
|
||||
KEY1: value1
|
||||
KEY2: value2
|
||||
script: "cap deploy stating"
|
||||
type: deploy
|
||||
tags:
|
||||
tags:
|
||||
- ruby
|
||||
- mysql
|
||||
except:
|
||||
- stable
|
||||
|
||||
production:
|
||||
variables:
|
||||
DB_NAME: mysql
|
||||
type: deploy
|
||||
script:
|
||||
script:
|
||||
- cap deploy production
|
||||
- cap notify
|
||||
tags:
|
||||
tags:
|
||||
- ruby
|
||||
- mysql
|
||||
only:
|
||||
|
|
Loading…
Reference in New Issue