Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
GitLab
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
projects.thm.de
GitLab
Commits
c45a6bf3
Commit
c45a6bf3
authored
Jan 14, 2016
by
Kamil Trzcinski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added cache:key to .gitlab-ci.yml allowing to fine tune the caching
parent
714f95b2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
8 deletions
+86
-8
CHANGELOG
CHANGELOG
+1
-0
doc/ci/yaml/README.md
doc/ci/yaml/README.md
+56
-4
lib/ci/gitlab_ci_yaml_processor.rb
lib/ci/gitlab_ci_yaml_processor.rb
+8
-0
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+21
-4
No files found.
CHANGELOG
View file @
c45a6bf3
...
...
@@ -74,6 +74,7 @@ v 8.4.0 (unreleased)
- Fix: Creator should be added as a master of the project on creation
- Added X-GitLab-... headers to emails from CI and Email On Push services (Anton Baklanov)
- Add IP check against DNSBLs at account sign-up
- Added cache:key to .gitlab-ci.yml allowing to fine tune the caching
v 8.3.4
- Use gitlab-workhorse 0.5.4 (fixes API routing bug)
...
...
doc/ci/yaml/README.md
View file @
c45a6bf3
...
...
@@ -135,10 +135,9 @@ thus allowing to fine tune them.
### cache
`cache`
is used to specify a list of files and directories which should be
cached between builds. Caches are stored according to the branch/ref and the
job name. They are not currently shared between different job names or between
branches/refs, which means that caching will benefit you if you push subsequent
commits to an existing feature branch.
cached between builds.
**By default the caching is enabled per-job and per-branch.**
If
`cache`
is defined outside the scope of the jobs, it means it is set
globally and all jobs will use its definition.
...
...
@@ -152,6 +151,59 @@ cache:
-
binaries/
```
#### cache:key
_**Note:** Introduced in GitLab Runner v1.0.0._
The
`key`
directive allows you to define the affinity of caching
between jobs, allowing to have a single cache for all jobs,
cache per-job, cache per-branch or any other way you deem proper.
This allows you to fine tune caching, allowing you to cache data between different jobs or even different branches.
The
`cache:key`
variable can use any of the
[
predefined variables
](
../variables/README.md
)
:
Example configurations:
To enable per-job caching:
```yaml
cache:
key: "$CI_BUILD_NAME"
untracked: true
```
To enable per-branch caching:
```yaml
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
```
To enable per-job and per-branch caching:
```yaml
cache:
key: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME"
untracked: true
```
To enable per-branch and per-stage caching:
```yaml
cache:
key: "$CI_BUILD_STAGE/$CI_BUILD_REF_NAME"
untracked: true
```
If you use
**Windows Batch**
to run your shell scripts you need to replace the
`$`
with
`%`
:
```yaml
cache:
key: "%CI_BUILD_STAGE%/%CI_BUILD_REF_NAME%"
untracked: true
```
## Jobs
`.gitlab-ci.yml`
allows you to specify an unlimited number of jobs. Each job
...
...
lib/ci/gitlab_ci_yaml_processor.rb
View file @
c45a6bf3
...
...
@@ -115,6 +115,10 @@ def validate!
end
if
@cache
if
@cache
[
:key
]
&&
!
validate_string
(
@cache
[
:key
])
raise
ValidationError
,
"cache:key parameter should be a string"
end
if
@cache
[
:untracked
]
&&
!
validate_boolean
(
@cache
[
:untracked
])
raise
ValidationError
,
"cache:untracked parameter should be an boolean"
end
...
...
@@ -198,6 +202,10 @@ def validate_job_stage!(name, job)
end
def
validate_job_cache!
(
name
,
job
)
if
job
[
:cache
][
:key
]
&&
!
validate_string
(
job
[
:cache
][
:key
])
raise
ValidationError
,
"
#{
name
}
job: cache:key parameter should be a string"
end
if
job
[
:cache
][
:untracked
]
&&
!
validate_boolean
(
job
[
:cache
][
:untracked
])
raise
ValidationError
,
"
#{
name
}
job: cache:untracked parameter should be an boolean"
end
...
...
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
View file @
c45a6bf3
...
...
@@ -336,7 +336,7 @@ module Ci
describe
"Caches"
do
it
"returns cache when defined globally"
do
config
=
YAML
.
dump
({
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
},
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
,
key:
'key'
},
rspec:
{
script:
"rspec"
}
...
...
@@ -348,13 +348,14 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
[
:options
][
:cache
]).
to
eq
(
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
,
key:
'key'
,
)
end
it
"returns cache when defined in a job"
do
config
=
YAML
.
dump
({
rspec:
{
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
},
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
,
key:
'key'
},
script:
"rspec"
}
})
...
...
@@ -365,15 +366,16 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
[
:options
][
:cache
]).
to
eq
(
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
,
key:
'key'
,
)
end
it
"overwrite cache when defined for a job and globally"
do
config
=
YAML
.
dump
({
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
},
cache:
{
paths:
[
"logs/"
,
"binaries/"
],
untracked:
true
,
key:
'global'
},
rspec:
{
script:
"rspec"
,
cache:
{
paths:
[
"test/"
],
untracked:
false
},
cache:
{
paths:
[
"test/"
],
untracked:
false
,
key:
'local'
},
}
})
...
...
@@ -383,6 +385,7 @@ module Ci
expect
(
config_processor
.
builds_for_stage_and_ref
(
"test"
,
"master"
).
first
[
:options
][
:cache
]).
to
eq
(
paths:
[
"test/"
],
untracked:
false
,
key:
'local'
,
)
end
end
...
...
@@ -615,6 +618,20 @@ module Ci
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"cache:paths parameter should be an array of strings"
)
end
it
"returns errors if cache:key is not a string"
do
config
=
YAML
.
dump
({
cache:
{
key:
1
},
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"cache:key parameter should be a string"
)
end
it
"returns errors if job cache:key is not an a string"
do
config
=
YAML
.
dump
({
types:
[
"build"
,
"test"
],
rspec:
{
script:
"test"
,
cache:
{
key:
1
}
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: cache:key parameter should be a string"
)
end
it
"returns errors if job cache:untracked is not an array of strings"
do
config
=
YAML
.
dump
({
types:
[
"build"
,
"test"
],
rspec:
{
script:
"test"
,
cache:
{
untracked:
"string"
}
}
})
expect
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment