Commit a936a6ce authored by Achilleas Pipinellis's avatar Achilleas Pipinellis

Merge branch 'docs/gb/improve-docs-about-ci-config-extends' into 'master'

Improve docs about CI/CD config `extends`

See merge request gitlab-org/gitlab-ce!21669
parents 165e9a99 9677e53e
...@@ -78,16 +78,18 @@ A job is defined by a list of parameters that define the job behavior. ...@@ -78,16 +78,18 @@ A job is defined by a list of parameters that define the job behavior.
### `extends` ### `extends`
> Introduced in GitLab 11.3 > Introduced in GitLab 11.3.
`extends` defines an entry name that a job, that uses `extends` is going to `extends` defines an entry name that a job that uses `extends` is going to
inherit from. inherit from.
`extends` in an alternative to using [YAML anchors](#anchors) that is a little It is an alternative to using [YAML anchors](#anchors) and is a little
more flexible and readable. more flexible and readable:
```yaml ```yaml
.tests: .tests:
script: rake test
stage: test
only: only:
refs: refs:
- branches - branches
...@@ -95,16 +97,15 @@ more flexible and readable. ...@@ -95,16 +97,15 @@ more flexible and readable.
rspec: rspec:
extends: .tests extends: .tests
script: rake rspec script: rake rspec
stage: test
only: only:
variables: variables:
- $RSPEC - $RSPEC
``` ```
In the example above the `rspec` job is going to inherit from `.tests` In the example above, the `rspec` job is going to inherit from the `.tests`
template. GitLab will perform a reverse deep merge, what means that it will template job. GitLab will perform a reverse deep merge, which means that it will
merge `rspec` contents into `.tests` recursively, and it is going to result in merge the `rspec` contents into `.tests` recursively, and this is going to result in
following configuration of the `rspec` job: the following `rspec` job:
```yaml ```yaml
rspec: rspec:
...@@ -117,13 +118,12 @@ rspec: ...@@ -117,13 +118,12 @@ rspec:
- $RSPEC - $RSPEC
``` ```
`.tests` in this example is a [hidden key](#hidden-keys-jobs), but it is `.tests` in this example is a [hidden key](#hidden-keys-jobs), but it's
possible to inherit from regular jobs as well. possible to inherit from regular jobs as well.
`extends` supports multi-level inheritance, however it is not recommended to `extends` supports multi-level inheritance, however it is not recommended to
use more than three levels of inheritance. Maximum nesting level supported is use more than three levels. The maximum nesting level that is supported is 10.
10 levels. The following example has two levels of inheritance:
```yaml ```yaml
.tests: .tests:
...@@ -149,6 +149,8 @@ spinach: ...@@ -149,6 +149,8 @@ spinach:
script: rake spinach script: rake spinach
``` ```
`extends` works across configuration files combined with [`include`](#include).
### `pages` ### `pages`
`pages` is a special job that is used to upload static content to GitLab that `pages` is a special job that is used to upload static content to GitLab that
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment