pipeline_schedule_variables model/db
This commit is contained in:
parent
5af1fcd6f3
commit
d278da48f8
10 changed files with 102 additions and 1 deletions
|
@ -195,7 +195,11 @@ module Ci
|
|||
variables += yaml_variables
|
||||
variables += user_variables
|
||||
variables += project.secret_variables_for(ref).map(&:to_runner_variable)
|
||||
variables += trigger_request.user_variables if trigger_request
|
||||
if trigger_request
|
||||
variables += trigger_request.user_variables
|
||||
elsif pipeline.pipeline_schedule
|
||||
variables += pipeline.pipeline_schedule.variables.map(&:to_runner_variable)
|
||||
end
|
||||
variables
|
||||
end
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ module Ci
|
|||
belongs_to :owner, class_name: 'User'
|
||||
has_one :last_pipeline, -> { order(id: :desc) }, class_name: 'Ci::Pipeline'
|
||||
has_many :pipelines
|
||||
has_many :variables, class_name: 'Ci::PipelineScheduleVariable'
|
||||
|
||||
validates :cron, unless: :importing?, cron: true, presence: { unless: :importing? }
|
||||
validates :cron_timezone, cron_timezone: true, presence: { unless: :importing? }
|
||||
|
|
9
app/models/ci/pipeline_schedule_variable.rb
Normal file
9
app/models/ci/pipeline_schedule_variable.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
module Ci
|
||||
class PipelineScheduleVariable < ActiveRecord::Base
|
||||
extend Ci::Model
|
||||
include HasVariable
|
||||
|
||||
belongs_to :pipeline_schedule
|
||||
validates :key, uniqueness: { scope: :pipeline_schedule_id }
|
||||
end
|
||||
end
|
|
@ -0,0 +1,25 @@
|
|||
class CreateCiPipelineScheduleVariables < ActiveRecord::Migration
|
||||
DOWNTIME = false
|
||||
|
||||
def up
|
||||
create_table :ci_pipeline_schedule_variables do |t|
|
||||
t.string :key, null: false
|
||||
t.text :value
|
||||
t.text :encrypted_value
|
||||
t.string :encrypted_value_salt
|
||||
t.string :encrypted_value_iv
|
||||
t.integer :pipeline_schedule_id, null: false
|
||||
|
||||
t.timestamps null: false
|
||||
end
|
||||
|
||||
add_index :ci_pipeline_schedule_variables,
|
||||
[:pipeline_schedule_id, :key],
|
||||
name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key",
|
||||
unique: true
|
||||
end
|
||||
|
||||
def down
|
||||
drop_table :ci_pipeline_schedule_variables
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
class AddForeignKeyToCiPipelineScheduleVariables < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key(:ci_pipeline_schedule_variables, :ci_pipeline_schedules, column: :pipeline_schedule_id)
|
||||
end
|
||||
|
||||
def down
|
||||
remove_foreign_key(:ci_pipeline_schedule_variables, column: :pipeline_schedule_id)
|
||||
end
|
||||
end
|
14
db/schema.rb
14
db/schema.rb
|
@ -253,6 +253,19 @@ ActiveRecord::Schema.define(version: 20170623080805) do
|
|||
add_index "ci_builds", ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree
|
||||
add_index "ci_builds", ["user_id"], name: "index_ci_builds_on_user_id", using: :btree
|
||||
|
||||
create_table "ci_pipeline_schedule_variables", force: :cascade do |t|
|
||||
t.string "key", null: false
|
||||
t.text "value"
|
||||
t.text "encrypted_value"
|
||||
t.string "encrypted_value_salt"
|
||||
t.string "encrypted_value_iv"
|
||||
t.integer "pipeline_schedule_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
add_index "ci_pipeline_schedule_variables", ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree
|
||||
|
||||
create_table "ci_pipeline_schedules", force: :cascade do |t|
|
||||
t.string "description"
|
||||
t.string "ref"
|
||||
|
@ -1531,6 +1544,7 @@ ActiveRecord::Schema.define(version: 20170623080805) do
|
|||
add_foreign_key "chat_teams", "namespaces", on_delete: :cascade
|
||||
add_foreign_key "ci_builds", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_a2141b1522", on_delete: :nullify
|
||||
add_foreign_key "ci_builds", "ci_stages", column: "stage_id", name: "fk_3a9eaa254d", on_delete: :cascade
|
||||
add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade
|
||||
add_foreign_key "ci_pipeline_schedules", "projects", name: "fk_8ead60fcc4", on_delete: :cascade
|
||||
add_foreign_key "ci_pipeline_schedules", "users", column: "owner_id", name: "fk_9ea99f58d2", on_delete: :nullify
|
||||
add_foreign_key "ci_pipelines", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_3d34ab2e06", on_delete: :nullify
|
||||
|
|
8
spec/factories/ci/pipeline_schedule_variables.rb
Normal file
8
spec/factories/ci/pipeline_schedule_variables.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
FactoryGirl.define do
|
||||
factory :ci_pipeline_schedule_variable, class: Ci::PipelineScheduleVariable do
|
||||
sequence(:key) { |n| "VARIABLE_#{n}" }
|
||||
value 'VARIABLE_VALUE'
|
||||
|
||||
pipeline_schedule factory: :ci_pipeline_schedule
|
||||
end
|
||||
end
|
|
@ -1373,6 +1373,22 @@ describe Ci::Build, :models do
|
|||
it { is_expected.to include(predefined_trigger_variable) }
|
||||
end
|
||||
|
||||
context 'when build was triggered by scheduled pipeline' do
|
||||
let(:secret_variable) do
|
||||
{ key: 'SECRET_KEY', value: 'secret_value', public: false }
|
||||
end
|
||||
|
||||
let(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) }
|
||||
|
||||
before do
|
||||
pipeline_schedule.pipelines << pipeline
|
||||
create(:ci_pipeline_schedule_variable,
|
||||
secret_variable.slice(:key, :value).merge(pipeline_schedule: pipeline_schedule))
|
||||
end
|
||||
|
||||
it { is_expected.to include(secret_variable) }
|
||||
end
|
||||
|
||||
context 'when yaml_variables are undefined' do
|
||||
before do
|
||||
build.yaml_variables = nil
|
||||
|
|
|
@ -5,6 +5,7 @@ describe Ci::PipelineSchedule, models: true do
|
|||
it { is_expected.to belong_to(:owner) }
|
||||
|
||||
it { is_expected.to have_many(:pipelines) }
|
||||
it { is_expected.to have_many(:variables) }
|
||||
|
||||
it { is_expected.to respond_to(:ref) }
|
||||
it { is_expected.to respond_to(:cron) }
|
||||
|
|
8
spec/models/ci/pipeline_schedule_variable_spec.rb
Normal file
8
spec/models/ci/pipeline_schedule_variable_spec.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Ci::PipelineScheduleVariable, models: true do
|
||||
subject { build(:ci_pipeline_schedule_variable) }
|
||||
|
||||
it { is_expected.to be_kind_of(HasVariable) }
|
||||
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:pipeline_schedule_id) }
|
||||
end
|
Loading…
Reference in a new issue