Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
9912ad26
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
9912ad26
编写于
7月 16, 2016
作者:
K
Kamil Trzcinski
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Store when and yaml variables in builds table
上级
50abec8c
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
89 addition
and
73 deletion
+89
-73
CHANGELOG
CHANGELOG
+1
-0
app/models/ci/build.rb
app/models/ci/build.rb
+9
-25
app/services/ci/create_builds_service.rb
app/services/ci/create_builds_service.rb
+3
-1
db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
...0160716115710_add_when_and_yaml_variables_to_ci_builds.rb
+22
-0
db/schema.rb
db/schema.rb
+3
-1
lib/ci/gitlab_ci_yaml_processor.rb
lib/ci/gitlab_ci_yaml_processor.rb
+38
-15
spec/factories/ci/builds.rb
spec/factories/ci/builds.rb
+5
-0
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+7
-14
spec/models/build_spec.rb
spec/models/build_spec.rb
+1
-17
未找到文件。
CHANGELOG
浏览文件 @
9912ad26
...
...
@@ -15,6 +15,7 @@ v 8.10.0 (unreleased)
- Align flash messages with left side of page content !4959 (winniehell)
- Display tooltip for "Copy to Clipboard" button !5164 (winniehell)
- Use default cursor for table header of project files !5165 (winniehell)
- Store when and yaml variables in builds table
- Display last commit of deleted branch in push events !4699 (winniehell)
- Escape file extension when parsing search results !5141 (winniehell)
- Apply the trusted_proxies config to the rack request object for use with rack_attack
...
...
app/models/ci/build.rb
浏览文件 @
9912ad26
...
...
@@ -5,6 +5,7 @@ module Ci
belongs_to
:erased_by
,
class_name:
'User'
serialize
:options
serialize
:yaml_variables
validates
:coverage
,
numericality:
true
,
allow_blank:
true
validates_presence_of
:ref
...
...
@@ -52,6 +53,8 @@ module Ci
new_build
.
stage
=
build
.
stage
new_build
.
stage_idx
=
build
.
stage_idx
new_build
.
trigger_request
=
build
.
trigger_request
new_build
.
yaml_variables
=
build
.
yaml_variables
new_build
.
when
=
build
.
when
new_build
.
user
=
user
new_build
.
save
MergeRequests
::
AddTodoWhenBuildFailsService
.
new
(
build
.
project
,
nil
).
close
(
new_build
)
...
...
@@ -117,7 +120,12 @@ module Ci
end
def
variables
predefined_variables
+
yaml_variables
+
project_variables
+
trigger_variables
variables
=
[]
variables
+=
predefined_variables
variables
+=
yaml_variables
if
yaml_variables
variables
+=
project_variables
variables
+=
trigger_variables
variables
end
def
merge_request
...
...
@@ -394,30 +402,6 @@ module Ci
self
.
update
(
erased_by:
user
,
erased_at:
Time
.
now
,
artifacts_expire_at:
nil
)
end
def
yaml_variables
global_yaml_variables
+
job_yaml_variables
end
def
global_yaml_variables
if
pipeline
.
config_processor
pipeline
.
config_processor
.
global_variables
.
map
do
|
key
,
value
|
{
key:
key
,
value:
value
,
public:
true
}
end
else
[]
end
end
def
job_yaml_variables
if
pipeline
.
config_processor
pipeline
.
config_processor
.
job_variables
(
name
).
map
do
|
key
,
value
|
{
key:
key
,
value:
value
,
public:
true
}
end
else
[]
end
end
def
project_variables
project
.
variables
.
map
do
|
variable
|
{
key:
variable
.
key
,
value:
variable
.
value
,
public:
false
}
...
...
app/services/ci/create_builds_service.rb
浏览文件 @
9912ad26
...
...
@@ -36,7 +36,9 @@ module Ci
:allow_failure
,
:stage
,
:stage_idx
,
:environment
)
:environment
,
:when
,
:yaml_variables
)
build_attrs
.
merge!
(
pipeline:
@pipeline
,
ref:
@pipeline
.
ref
,
...
...
db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
0 → 100644
浏览文件 @
9912ad26
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class
AddWhenAndYamlVariablesCiBuilds
<
ActiveRecord
::
Migration
include
Gitlab
::
Database
::
MigrationHelpers
# When using the methods "add_concurrent_index" or "add_column_with_default"
# you must disable the use of transactions as these methods can not run in an
# existing transaction. When using "add_concurrent_index" make sure that this
# method is the _only_ method called in the migration, any other changes
# should go in a separate migration. This ensures that upon failure _only_ the
# index creation fails and can be retried or reverted easily.
#
# To disable transactions uncomment the following line and remove these
# comments:
# disable_ddl_transaction!
def
change
add_column
:ci_builds
,
:when
,
:string
add_column
:ci_builds
,
:yaml_variables
,
:text
end
end
db/schema.rb
浏览文件 @
9912ad26
...
...
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
version:
2016071
2171823
)
do
ActiveRecord
::
Schema
.
define
(
version:
2016071
6115710
)
do
# These are extensions that must be enabled in order to support this database
enable_extension
"plpgsql"
...
...
@@ -168,6 +168,8 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t
.
datetime
"artifacts_expire_at"
t
.
string
"environment"
t
.
integer
"artifacts_size"
t
.
string
"when"
t
.
text
"yaml_variables"
end
add_index
"ci_builds"
,
[
"commit_id"
,
"stage_idx"
,
"created_at"
],
name:
"index_ci_builds_on_commit_id_and_stage_idx_and_created_at"
,
using: :btree
...
...
lib/ci/gitlab_ci_yaml_processor.rb
浏览文件 @
9912ad26
...
...
@@ -31,28 +31,34 @@ module Ci
raise
ValidationError
,
e
.
message
end
def
builds_for_stage_and_ref
(
stage
,
ref
,
tag
=
false
,
trigger_request
=
nil
)
builds
.
select
do
|
build
|
build
[
:stage
]
==
stage
&&
process?
(
build
[
:only
],
build
[
:except
],
ref
,
tag
,
trigger_request
)
def
jobs_for_ref
(
ref
,
tag
=
false
,
trigger_request
=
nil
)
@jobs
.
select
do
|
_
,
job
|
process?
(
job
[
:only
],
job
[
:except
],
ref
,
tag
,
trigger_request
)
end
end
def
builds
@jobs
.
map
do
|
name
,
job
|
build_job
(
name
,
job
)
def
jobs_for_stage_and_ref
(
stage
,
ref
,
tag
=
false
,
trigger_request
=
nil
)
jobs_for_ref
(
ref
,
tag
,
trigger_request
).
select
do
|
_
,
job
|
job
[
:stage
]
==
stage
end
end
def
global_variables
@variables
def
builds_for_ref
(
ref
,
tag
=
false
,
trigger_request
=
nil
)
jobs_for_ref
(
ref
,
tag
,
trigger_request
).
map
do
|
name
,
job
|
build_job
(
name
,
job
)
end
end
def
job_variables
(
name
)
job
=
@jobs
[
name
.
to_sym
]
return
[]
unless
job
def
builds_for_stage_and_ref
(
stage
,
ref
,
tag
=
false
,
trigger_request
=
nil
)
jobs_for_stage_and_ref
(
stage
,
ref
,
tag
,
trigger_request
).
map
do
|
name
,
job
|
build_job
(
name
,
job
)
end
end
job
[
:variables
]
||
[]
def
builds
@jobs
.
map
do
|
name
,
job
|
build_job
(
name
,
job
)
end
end
private
...
...
@@ -95,11 +101,10 @@ module Ci
commands:
[
job
[
:before_script
]
||
@before_script
,
job
[
:script
]].
flatten
.
compact
.
join
(
"
\n
"
),
tag_list:
job
[
:tags
]
||
[],
name:
name
,
only:
job
[
:only
],
except:
job
[
:except
],
allow_failure:
job
[
:allow_failure
]
||
false
,
when:
job
[
:when
]
||
'on_success'
,
environment:
job
[
:environment
],
yaml_variables:
yaml_variables
(
name
),
options:
{
image:
job
[
:image
]
||
@image
,
services:
job
[
:services
]
||
@services
,
...
...
@@ -111,6 +116,24 @@ module Ci
}
end
def
yaml_variables
(
name
)
variables
=
global_variables
.
merge
(
job_variables
(
name
))
variables
.
map
do
|
key
,
value
|
{
key:
key
,
value:
value
,
public:
true
}
end
end
def
global_variables
@variables
||
{}
end
def
job_variables
(
name
)
job
=
@jobs
[
name
.
to_sym
]
return
{}
unless
job
job
[
:variables
]
||
{}
end
def
validate!
@jobs
.
each
do
|
name
,
job
|
validate_job!
(
name
,
job
)
...
...
spec/factories/ci/builds.rb
浏览文件 @
9912ad26
...
...
@@ -15,6 +15,11 @@ FactoryGirl.define do
services:
[
"postgres"
]
}
end
yaml_variables
do
[
{
key: :DB_NAME
,
value:
'postgres'
,
public:
true
}
]
end
pipeline
factory: :ci_pipeline
...
...
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
浏览文件 @
9912ad26
...
...
@@ -19,15 +19,14 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
type
,
"master"
).
first
).
to
eq
({
stage:
"test"
,
stage_idx:
1
,
except:
nil
,
name: :rspec
,
only:
nil
,
commands:
"pwd
\n
rspec"
,
tag_list:
[],
options:
{},
allow_failure:
false
,
when:
"on_success"
,
environment:
nil
,
yaml_variables:
{}
})
end
...
...
@@ -432,11 +431,9 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
size
).
to
eq
(
1
)
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
).
to
eq
({
except:
nil
,
stage:
"test"
,
stage_idx:
1
,
name: :rspec
,
only:
nil
,
commands:
"pwd
\n
rspec"
,
tag_list:
[],
options:
{
...
...
@@ -446,6 +443,7 @@ module Ci
allow_failure:
false
,
when:
"on_success"
,
environment:
nil
,
yaml_variables:
{}
})
end
...
...
@@ -461,11 +459,9 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
size
).
to
eq
(
1
)
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
).
to
eq
({
except:
nil
,
stage:
"test"
,
stage_idx:
1
,
name: :rspec
,
only:
nil
,
commands:
"pwd
\n
rspec"
,
tag_list:
[],
options:
{
...
...
@@ -475,6 +471,7 @@ module Ci
allow_failure:
false
,
when:
"on_success"
,
environment:
nil
,
yaml_variables:
[]
})
end
end
...
...
@@ -681,11 +678,9 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
size
).
to
eq
(
1
)
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
).
to
eq
({
except:
nil
,
stage:
"test"
,
stage_idx:
1
,
name: :rspec
,
only:
nil
,
commands:
"pwd
\n
rspec"
,
tag_list:
[],
options:
{
...
...
@@ -701,6 +696,7 @@ module Ci
when:
"on_success"
,
allow_failure:
false
,
environment:
nil
,
yaml_variables:
{}
})
end
...
...
@@ -819,17 +815,16 @@ module Ci
it
"doesn't create jobs that start with dot"
do
expect
(
subject
.
size
).
to
eq
(
1
)
expect
(
subject
.
first
).
to
eq
({
except:
nil
,
stage:
"test"
,
stage_idx:
1
,
name: :normal_job
,
only:
nil
,
commands:
"test"
,
tag_list:
[],
options:
{},
when:
"on_success"
,
allow_failure:
false
,
environment:
nil
,
yaml_variables:
{}
})
end
end
...
...
@@ -865,30 +860,28 @@ module Ci
it
"is correctly supported for jobs"
do
expect
(
subject
.
size
).
to
eq
(
2
)
expect
(
subject
.
first
).
to
eq
({
except:
nil
,
stage:
"build"
,
stage_idx:
0
,
name: :job1
,
only:
nil
,
commands:
"execute-script-for-job"
,
tag_list:
[],
options:
{},
when:
"on_success"
,
allow_failure:
false
,
environment:
nil
,
yaml_variables:
{}
})
expect
(
subject
.
second
).
to
eq
({
except:
nil
,
stage:
"build"
,
stage_idx:
0
,
name: :job2
,
only:
nil
,
commands:
"execute-script-for-job"
,
tag_list:
[],
options:
{},
when:
"on_success"
,
allow_failure:
false
,
environment:
nil
,
yaml_variables:
{}
})
end
end
...
...
spec/models/build_spec.rb
浏览文件 @
9912ad26
...
...
@@ -208,7 +208,7 @@ describe Ci::Build, models: true do
end
before
do
build
.
update_attributes
(
stage:
'stage'
)
build
.
update_attributes
(
stage:
'stage'
,
yaml_variables:
yaml_variables
)
end
it
{
is_expected
.
to
eq
(
predefined_variables
+
yaml_variables
)
}
...
...
@@ -260,22 +260,6 @@ describe Ci::Build, models: true do
it
{
is_expected
.
to
eq
(
predefined_variables
+
predefined_trigger_variable
+
yaml_variables
+
secure_variables
+
trigger_variables
)
}
end
context
'when job variables are defined'
do
##
# Job-level variables are defined in gitlab_ci.yml fixture
#
context
'when job variables are unique'
do
let
(
:build
)
{
create
(
:ci_build
,
name:
'staging'
)
}
it
'includes job variables'
do
expect
(
subject
).
to
include
(
{
key: :KEY1
,
value:
'value1'
,
public:
true
},
{
key: :KEY2
,
value:
'value2'
,
public:
true
}
)
end
end
end
end
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录