README.md 19,2 КБ
Newer Older
Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
1
2
3
4
---
table_display_block: true
---

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
5
# GitLab CI/CD Variables
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
6

Evan Read's avatar
Evan Read включено в состав коммита
7
8
9
10
11
When receiving a job from GitLab CI, the [Runner](https://docs.gitlab.com/runner/) prepares the build environment.
It starts by setting a list of:

- [Predefined environment variables](#predefined-environment-variables).
- Other variables.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
12

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
13
## Priority of variables
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
14

Evan Read's avatar
Evan Read включено в состав коммита
15
16
17
18
Variables of different types can take precedence over other variables, depending on where they are defined.

The order of precedence for variables is (from highest to lowest):

Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
19
1. [Trigger variables](../triggers/README.md#making-use-of-trigger-variables) or [scheduled pipeline variables](../../user/project/pipelines/schedules.md#making-use-of-scheduled-pipeline-variables).
Evan Read's avatar
Evan Read включено в состав коммита
20
21
22
23
24
25
1. Project-level [variables](#variables) or [protected variables](#protected-variables).
1. Group-level [variables](#variables) or [protected variables](#protected-variables).
1. YAML-defined [job-level variables](../yaml/README.md#variables).
1. YAML-defined [global variables](../yaml/README.md#variables).
1. [Deployment variables](#deployment-variables).
1. [Predefined environment variables](#predefined-environment-variables).
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
26

Evan Read's avatar
Evan Read включено в состав коммита
27
For example, you define:
Douwe Maan's avatar
Douwe Maan включено в состав коммита
28

Evan Read's avatar
Evan Read включено в состав коммита
29
30
31
32
33
- `API_TOKEN=secure` as a project variable.
- `API_TOKEN=yaml` in your `.gitlab-ci.yml`.

`API_TOKEN` will take the value `secure` as the project variables take precedence over those defined
in `.gitlab-ci.yml`.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
34

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
35
36
37
38
39
40
## Unsupported variables

There are cases where some variables cannot be used in the context of a
`.gitlab-ci.yml` definition (for example under `script`). Read more
about which variables are [not supported](where_variables_can_be_used.md).

Evan Read's avatar
Evan Read включено в состав коммита
41
## Predefined environment variables
Douwe Maan's avatar
Douwe Maan включено в состав коммита
42

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
43
See [full reference of predefined environment variables](predefined_variables.md).
Douwe Maan's avatar
Douwe Maan включено в состав коммита
44

Mathijs de Kruyf's avatar
Mathijs de Kruyf включено в состав коммита
45
## `.gitlab-ci.yml` defined variables
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
46

Evan Read's avatar
Evan Read включено в состав коммита
47
NOTE **Note:**
Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
48
This feature requires GitLab Runner 0.5.0 or higher and GitLab 7.14 or higher.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
49

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
50
51
GitLab CI allows you to add to `.gitlab-ci.yml` variables that are set in the
build environment. The variables are hence saved in the repository, and they
Evan Read's avatar
Evan Read включено в состав коммита
52
are meant to store non-sensitive project configuration. For example, `RAILS_ENV` or
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
53
54
55
56
`DATABASE_URL`.

For example, if you set the variable below globally (not inside a job), it will
be used in all executed commands and scripts:
Douwe Maan's avatar
Douwe Maan включено в состав коммита
57
58
59
60
61
62

```yaml
variables:
  DATABASE_URL: "postgres://postgres@postgres/my_database"
```

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
63
64
65
66
67
The YAML-defined variables are also set to all created
[service containers](../docker/using_docker_images.md), thus allowing to fine
tune them.

Variables can be defined at a global level, but also at a job level. To turn off
Tor Bechmann Yamamoto-Sørensen's avatar
Tor Bechmann Yamamoto-Sørensen включено в состав коммита
68
global defined variables in your job, define an empty hash:
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
69
70
71

```yaml
job_name:
Sébastien's avatar
Sébastien включено в состав коммита
72
  variables: {}
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
73
74
```

TeNNoX's avatar
TeNNoX включено в состав коммита
75
76
77
78
79
80
81
82
83
84
You are able to use other variables inside your variable definition (or escape them with `$$`):

```yaml
variables:
  LS_CMD: 'ls $FLAGS $$TMP_DIR'
  FLAGS: '-al'
script:
  - 'eval $LS_CMD'  # will execute 'ls -al $TMP_DIR'
```

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
85
## Variables
Douwe Maan's avatar
Douwe Maan включено в состав коммита
86

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
87
> Group-level variables were introduced in GitLab 9.4.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
88
89

CAUTION: **Important:**
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
90
Be aware that variables are not masked, and their values can be shown
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
91
92
93
in the job logs if explicitly asked to do so. If your project is public or
internal, you can set the pipelines private from your [project's Pipelines
settings](../../user/project/pipelines/settings.md#visibility-of-pipelines).
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
94
Follow the discussion in issue [#13784][ce-13784] for masking the variables.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
95

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
96
97
GitLab CI allows you to define per-project or per-group variables
that are set in the pipeline environment. The variables are stored out of
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
98
99
the repository (not in `.gitlab-ci.yml`) and are securely passed to GitLab Runner
making them available during a pipeline run. It's the recommended method to
Evan Read's avatar
Evan Read включено в состав коммита
100
101
102
use for storing things like passwords, SSH keys, and credentials.

Project-level variables can be added by:
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
103

Evan Read's avatar
Evan Read включено в состав коммита
104
105
1. Navigating to your project's **Settings > CI/CD** page.
1. Inputing variable keys and values in the **Environment variables** section.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
106

Evan Read's avatar
Evan Read включено в состав коммита
107
Group-level variables can be added by:
Douwe Maan's avatar
Douwe Maan включено в состав коммита
108

Evan Read's avatar
Evan Read включено в состав коммита
109
110
111
1. Navigating to your group's **Settings > CI/CD** page.
1. Inputing variable keys and values in the **Environment variables** section. Any variables of
   [subgroups](../../user/group/subgroups/index.md) will be inherited recursively.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
112

Shinya Maeda's avatar
Shinya Maeda включено в состав коммита
113
Once you set them, they will be available for all subsequent pipelines. You can also
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
114
[protect your variables](#protected-variables).
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
115

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
116
### Protected variables
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
117

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
118
> Introduced in GitLab 9.3.
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
119

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
120
Variables could be protected. Whenever a variable is
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
121
protected, it would only be securely passed to pipelines running on the
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
122
[protected branches] or [protected tags]. The other pipelines would not get any
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
123
124
125
protected variables.

Protected variables can be added by going to your project's
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
126
**Settings > CI/CD**, then finding the section called
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
127
**Variables**, and check "Protected".
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
128
129

Once you set them, they will be available for all subsequent pipelines.
Nick Thomas's avatar
Nick Thomas включено в состав коммита
130

Evan Read's avatar
Evan Read включено в состав коммита
131
132
133
134
135
136
### Manually-specified variables

> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/44059) in GitLab 10.8.

Variables can be specified for a single pipeline run when a [manual pipeline](../pipelines.md#manually-executing-pipelines) is created.

Adam Niedzielski's avatar
Adam Niedzielski включено в состав коммита
137
138
## Deployment variables

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
139
> Introduced in GitLab 8.15.
Adam Niedzielski's avatar
Adam Niedzielski включено в состав коммита
140

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
141
[Project services](../../user/project/integrations/project_services.md) that are
Adam Niedzielski's avatar
Adam Niedzielski включено в состав коммита
142
143
responsible for deployment configuration may define their own variables that
are set in the build environment. These variables are only defined for
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
144
[deployment jobs](../environments.md). Please consult the documentation of
Adam Niedzielski's avatar
Adam Niedzielski включено в состав коммита
145
146
the project services that you are using to learn which variables they define.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
147
148
An example project service that defines deployment variables is the
[Kubernetes integration](../../user/project/clusters/index.md#deployment-variables).
Adam Niedzielski's avatar
Adam Niedzielski включено в состав коммита
149

Thong Kuah's avatar
Thong Kuah включено в состав коммита
150
151
152
153
154
155
156
157
158
159
160
161
162
## Auto DevOps application variables

> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/49056) in GitLab 11.7.

You can configure [Auto DevOps](../../topics/autodevops/index.md) to
pass CI variables to the running application by prefixing the key of the
variable with `K8S_SECRET_`.

These [prefixed
variables](../../topics/autodevops/index.md#application-secret-variables) will
then be available as environment variables on the running application
container.

Thong Kuah's avatar
Thong Kuah включено в состав коммита
163
CAUTION: **Caution:**
Thong Kuah's avatar
Thong Kuah включено в состав коммита
164
Variables with multiline values are not currently supported due to
Thong Kuah's avatar
Thong Kuah включено в состав коммита
165
166
limitations with the current Auto DevOps scripting environment.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
167
168
169
## Debug tracing

> Introduced in GitLab Runner 1.7.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
170
171
172

CAUTION: **Warning:**
Enabling debug tracing can have severe security implications. The
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
173
output **will** contain the content of all your variables and any other
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
174
175
secrets! The output **will** be uploaded to the GitLab server and made visible
in job traces!
Nick Thomas's avatar
Nick Thomas включено в состав коммита
176
177

By default, GitLab Runner hides most of the details of what it is doing when
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
178
processing a job. This behavior keeps job traces short, and prevents secrets
Nick Thomas's avatar
Nick Thomas включено в состав коммита
179
180
181
182
183
from being leaked into the trace unless your script writes them to the screen.

If a job isn't working as expected, this can make the problem difficult to
investigate; in these cases, you can enable debug tracing in `.gitlab-ci.yml`.
Available on GitLab Runner v1.7+, this feature enables the shell's execution
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
184
trace, resulting in a verbose job trace listing all commands that were run,
Nick Thomas's avatar
Nick Thomas включено в состав коммита
185
186
variables that were set, etc.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
187
Before enabling this, you should ensure jobs are visible to
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
188
[team members only](../../user/permissions.md#project-features). You should
Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
189
also [erase](../pipelines.md#accessing-individual-jobs) all generated job traces
Nick Thomas's avatar
Nick Thomas включено в состав коммита
190
191
192
193
194
before making them visible again.

To enable debug traces, set the `CI_DEBUG_TRACE` variable to `true`:

```yaml
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
195
job_name:
Nick Thomas's avatar
Nick Thomas включено в состав коммита
196
197
198
199
  variables:
    CI_DEBUG_TRACE: "true"
```

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
Example truncated output with debug trace set to true:

```bash
...

export CI_SERVER_TLS_CA_FILE="/builds/gitlab-examples/ci-debug-trace.tmp/CI_SERVER_TLS_CA_FILE"
if [[ -d "/builds/gitlab-examples/ci-debug-trace/.git" ]]; then
  echo $'\''\x1b[32;1mFetching changes...\x1b[0;m'\''
  $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace"
  $'\''git'\'' "config" "fetch.recurseSubmodules" "false"
  $'\''rm'\'' "-f" ".git/index.lock"
  $'\''git'\'' "clean" "-ffdx"
  $'\''git'\'' "reset" "--hard"
  $'\''git'\'' "remote" "set-url" "origin" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git"
  $'\''git'\'' "fetch" "origin" "--prune" "+refs/heads/*:refs/remotes/origin/*" "+refs/tags/*:refs/tags/*"
else
  $'\''mkdir'\'' "-p" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template"
  $'\''rm'\'' "-r" "-f" "/builds/gitlab-examples/ci-debug-trace"
  $'\''git'\'' "config" "-f" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template/config" "fetch.recurseSubmodules" "false"
  echo $'\''\x1b[32;1mCloning repository...\x1b[0;m'\''
  $'\''git'\'' "clone" "--no-checkout" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git" "/builds/gitlab-examples/ci-debug-trace" "--template" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template"
  $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace"
fi
echo $'\''\x1b[32;1mChecking out dd648b2e as master...\x1b[0;m'\''
$'\''git'\'' "checkout" "-f" "-q" "dd648b2e48ce6518303b0bb580b2ee32fadaf045"
'
+++ hostname
++ echo 'Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb...'
Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb...
++ export CI=true
++ CI=true
++ export CI_DEBUG_TRACE=false
++ CI_DEBUG_TRACE=false
Zeger-Jan van de Weg's avatar
Zeger-Jan van de Weg включено в состав коммита
233
234
++ export CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
Jason Lenny's avatar
Jason Lenny включено в состав коммита
235
236
++ export CI_COMMIT_SHORT_SHA=dd648b2e
++ CI_COMMIT_SHORT_SHA=dd648b2e
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
237
238
239
240
241
242
243
244
245
246
++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_REF_NAME=master
++ CI_COMMIT_REF_NAME=master
++ export CI_JOB_ID=7046507
++ CI_JOB_ID=7046507
++ export CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++ CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
247
248
249
250
251
252
253
254
255
256
++ export CI_PROJECT_ID=1796893
++ CI_PROJECT_ID=1796893
++ export CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace
++ CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace
++ export CI_SERVER=yes
++ CI_SERVER=yes
++ export 'CI_SERVER_NAME=GitLab CI'
++ CI_SERVER_NAME='GitLab CI'
++ export CI_SERVER_VERSION=
++ CI_SERVER_VERSION=
Gilbert Roulot's avatar
Gilbert Roulot включено в состав коммита
257
258
259
260
261
262
++ export CI_SERVER_VERSION_MAJOR=
++ CI_SERVER_VERSION_MAJOR=
++ export CI_SERVER_VERSION_MINOR=
++ CI_SERVER_VERSION_MINOR=
++ export CI_SERVER_VERSION_PATCH=
++ CI_SERVER_VERSION_PATCH=
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
263
264
265
266
267
268
269
270
++ export CI_SERVER_REVISION=
++ CI_SERVER_REVISION=
++ export GITLAB_CI=true
++ GITLAB_CI=true
++ export CI=true
++ CI=true
++ export GITLAB_CI=true
++ GITLAB_CI=true
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
271
272
273
274
275
276
277
278
279
280
281
282
283
284
++ export CI_JOB_ID=7046507
++ CI_JOB_ID=7046507
++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ export CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_REF_NAME=master
++ CI_COMMIT_REF_NAME=master
++ export CI_COMMIT_NAME=debug_trace
++ CI_JOB_NAME=debug_trace
++ export CI_JOB_STAGE=test
++ CI_JOB_STAGE=test
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
285
286
287
288
289
290
++ export CI_SERVER_NAME=GitLab
++ CI_SERVER_NAME=GitLab
++ export CI_SERVER_VERSION=8.14.3-ee
++ CI_SERVER_VERSION=8.14.3-ee
++ export CI_SERVER_REVISION=82823
++ CI_SERVER_REVISION=82823
Adrian Moisey's avatar
Adrian Moisey включено в состав коммита
291
292
293
294
++ export CI_PAGES_DOMAIN=gitlab.io
++ CI_PAGES_DOMAIN=gitlab.io
++ export CI_PAGES_URL=https://gitlab-examples.gitlab.io/ci-debug-trace
++ CI_PAGES_URL=https://gitlab-examples.gitlab.io/ci-debug-trace
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
295
296
297
298
299
300
301
302
303
304
305
306
++ export CI_PROJECT_ID=17893
++ CI_PROJECT_ID=17893
++ export CI_PROJECT_NAME=ci-debug-trace
++ CI_PROJECT_NAME=ci-debug-trace
++ export CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ export CI_PROJECT_NAMESPACE=gitlab-examples
++ CI_PROJECT_NAMESPACE=gitlab-examples
++ export CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace
++ CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace
++ export CI_PIPELINE_ID=52666
++ CI_PIPELINE_ID=52666
Shinya Maeda's avatar
Shinya Maeda включено в состав коммита
307
308
++ export CI_PIPELINE_IID=123
++ CI_PIPELINE_IID=123
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
309
310
311
312
++ export CI_RUNNER_ID=1337
++ CI_RUNNER_ID=1337
++ export CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com
++ CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com
Pawel Chojnacki's avatar
Pawel Chojnacki включено в состав коммита
313
314
++ export 'CI_RUNNER_TAGS=shared, docker, linux, ruby, mysql, postgres, mongo'
++ CI_RUNNER_TAGS='shared, docker, linux, ruby, mysql, postgres, mongo'
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
315
316
317
318
319
320
321
++ export CI_REGISTRY=registry.example.com
++ CI_REGISTRY=registry.example.com
++ export CI_DEBUG_TRACE=true
++ CI_DEBUG_TRACE=true
++ export GITLAB_USER_ID=42
++ GITLAB_USER_ID=42
++ export GITLAB_USER_EMAIL=user@example.com
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
322
++ GITLAB_USER_EMAIL=user@example.com
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
323
324
325
326
327
328
329
330
++ export VERY_SECURE_VARIABLE=imaverysecurevariable
++ VERY_SECURE_VARIABLE=imaverysecurevariable
++ mkdir -p /builds/gitlab-examples/ci-debug-trace.tmp
++ echo -n '-----BEGIN CERTIFICATE-----
MIIFQzCCBCugAwIBAgIRAL/ElDjuf15xwja1ZnCocWAwDQYJKoZIhvcNAQELBQAw'

...
```
Nick Thomas's avatar
Nick Thomas включено в состав коммита
331

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
332
## Using the CI variables in your job scripts
Douwe Maan's avatar
Douwe Maan включено в состав коммита
333

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
334
335
All variables are set as environment variables in the build environment, and
they are accessible with normal methods that are used to access such variables.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
336
In most cases `bash` or `sh` is used to execute the job script.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
337

John Spaetzel's avatar
John Spaetzel включено в состав коммита
338
To access environment variables, use the syntax for your Runner's [shell][shellexecutors].
Kamil Trzcinski's avatar
Kamil Trzcinski включено в состав коммита
339

John Spaetzel's avatar
John Spaetzel включено в состав коммита
340
341
342
343
344
345
346
347
348
| Shell                | Usage           |
|----------------------|-----------------|
| bash/sh              | `$variable`     |
| windows batch        | `%variable%`    |
| PowerShell           | `$env:variable` |

To access environment variables in bash, prefix the variable name with (`$`):

```yaml
Douwe Maan's avatar
Douwe Maan включено в состав коммита
349
350
job_name:
  script:
Elan Ruusamäe's avatar
Elan Ruusamäe включено в состав коммита
351
    - echo $CI_JOB_ID
Douwe Maan's avatar
Douwe Maan включено в состав коммита
352
353
```

John Spaetzel's avatar
John Spaetzel включено в состав коммита
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
To access environment variables in **Windows Batch**, surround the variable
with (`%`):

```yaml
job_name:
  script:
    - echo %CI_JOB_ID%
```

To access environment variables in a **Windows PowerShell** environment, prefix
the variable name with (`$env:`):

```yaml
job_name:
  script:
    - echo $env:CI_JOB_ID
```

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
372
You can also list all environment variables with the `export` command,
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
373
but be aware that this will also expose the values of all the variables
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
374
you set, in the job log:
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
375

John Spaetzel's avatar
John Spaetzel включено в состав коммита
376
```yaml
Douwe Maan's avatar
Douwe Maan включено в состав коммита
377
378
379
380
job_name:
  script:
    - export
```
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
381

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
382
383
384
385
386
Example values:

```bash
export CI_JOB_ID="50"
export CI_COMMIT_SHA="1ecfd275763eff1d6b4844ea3168962458c9f27a"
Jason Lenny's avatar
Jason Lenny включено в состав коммита
387
export CI_COMMIT_SHORT_SHA="1ecfd275"
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
388
export CI_COMMIT_REF_NAME="master"
Mustafa YILDIRIM's avatar
Mustafa YILDIRIM включено в состав коммита
389
export CI_REPOSITORY_URL="https://gitlab-ci-token:abcde-1234ABCD5678ef@example.com/gitlab-org/gitlab-ce.git"
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
390
391
392
393
394
395
396
export CI_COMMIT_TAG="1.0.0"
export CI_JOB_NAME="spec:other"
export CI_JOB_STAGE="test"
export CI_JOB_MANUAL="true"
export CI_JOB_TRIGGERED="true"
export CI_JOB_TOKEN="abcde-1234ABCD5678ef"
export CI_PIPELINE_ID="1000"
Shinya Maeda's avatar
Shinya Maeda включено в состав коммита
397
export CI_PIPELINE_IID="10"
Adrian Moisey's avatar
Adrian Moisey включено в состав коммита
398
399
export CI_PAGES_DOMAIN="gitlab.io"
export CI_PAGES_URL="https://gitlab-org.gitlab.io/gitlab-ce"
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
export CI_PROJECT_ID="34"
export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-ce"
export CI_PROJECT_NAME="gitlab-ce"
export CI_PROJECT_NAMESPACE="gitlab-org"
export CI_PROJECT_PATH="gitlab-org/gitlab-ce"
export CI_PROJECT_URL="https://example.com/gitlab-org/gitlab-ce"
export CI_REGISTRY="registry.example.com"
export CI_REGISTRY_IMAGE="registry.example.com/gitlab-org/gitlab-ce"
export CI_RUNNER_ID="10"
export CI_RUNNER_DESCRIPTION="my runner"
export CI_RUNNER_TAGS="docker, linux"
export CI_SERVER="yes"
export CI_SERVER_NAME="GitLab"
export CI_SERVER_REVISION="70606bf"
export CI_SERVER_VERSION="8.9.0"
Gilbert Roulot's avatar
Gilbert Roulot включено в состав коммита
415
416
417
export CI_SERVER_VERSION_MAJOR="8"
export CI_SERVER_VERSION_MINOR="9"
export CI_SERVER_VERSION_PATCH="0"
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
418
419
420
421
422
423
export GITLAB_USER_ID="42"
export GITLAB_USER_EMAIL="user@example.com"
export CI_REGISTRY_USER="gitlab-ci-token"
export CI_REGISTRY_PASSWORD="longalfanumstring"
```

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
424
425
## Variables expressions

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
426
> Introduced in GitLab 10.7.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
427
428

It is possible to use variables expressions with only / except policies in
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
429
430
`.gitlab-ci.yml`. By using this approach you can limit what jobs are going to
be created within a pipeline after pushing a code to GitLab.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
431

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
432
This is particularly useful in combination with variables and triggered
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
433
434
435
436
437
438
439
440
441
442
443
444
pipeline variables.

```yaml
deploy:
  script: cap staging deploy
  environment: staging
  only:
    variables:
      - $RELEASE == "staging"
      - $STAGING
```

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
445
Each expression provided is going to be evaluated before creating a pipeline.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
446
447

If any of the conditions in `variables` evaluates to truth when using `only`,
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
448
449
a new job is going to be created. If any of the expressions evaluates to truth
when `except` is being used, a job is not going to be created.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
450

Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
451
This follows usual rules for [`only` / `except` policies](../yaml/README.md#onlyexcept-advanced).
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
452
453
454

### Supported syntax

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
455
Below you can find supported syntax reference:
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
456

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
457
1. Equality matching using a string
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
458

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
459
    > Example: `$VARIABLE == "some value"`
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
460
461
462
463
464
465

    You can use equality operator `==` to compare a variable content to a
    string. We support both, double quotes and single quotes to define a string
    value, so both `$VARIABLE == "some value"` and `$VARIABLE == 'some value'`
    are supported. `"some value" == $VARIABLE` is correct too.

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
466
1. Checking for an undefined value
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
467

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
468
469
470
471
    > Example: `$VARIABLE == null`

    It sometimes happens that you want to check whether a variable is defined
    or not. To do that, you can compare a variable to `null` keyword, like
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
472
    `$VARIABLE == null`. This expression is going to evaluate to truth if
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
473
    variable is not defined.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
474

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
475
476
1. Checking for an empty variable

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
477
478
    > Example: `$VARIABLE == ""`

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
479
480
481
482
    If you want to check whether a variable is defined, but is empty, you can
    simply compare it against an empty string, like `$VAR == ''`.

1. Comparing two variables
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
483

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
484
485
486
487
    > Example: `$VARIABLE_1 == $VARIABLE_2`

    It is possible to compare two variables. This is going to compare values
    of these variables.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
488

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
489
1. Variable presence check
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
490

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
491
492
    > Example: `$STAGING`

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
493
494
495
496
    If you only want to create a job when there is some variable present,
    which means that it is defined and non-empty, you can simply use
    variable name as an expression, like `$STAGING`. If `$STAGING` variable
    is defined, and is non empty, expression will evaluate to truth.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
497
498
499
    `$STAGING` value needs to a string, with length higher than zero.
    Variable that contains only whitespace characters is not an empty variable.

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
500
501
502
503
504
505
506
1. Pattern matching  _(added in 11.0)_

    > Example: `$VARIABLE =~ /^content.*/`

    It is possible perform pattern matching against a variable and regular
    expression. Expression like this evaluates to truth if matches are found.

Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
507
508
    Pattern matching is case-sensitive by default. Use `i` flag modifier, like
    `/pattern/i` to make a pattern case-insensitive.
Grzegorz Bizon's avatar
Grzegorz Bizon включено в состав коммита
509

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
510
[ce-13784]: https://gitlab.com/gitlab-org/gitlab-ce/issues/13784 "Simple protection of CI variables"
Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
511
[eep]: https://about.gitlab.com/pricing/ "Available only in GitLab Premium"
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
512
[envs]: ../environments.md
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
513
514
[protected branches]: ../../user/project/protected_branches.md
[protected tags]: ../../user/project/protected_tags.md
John Spaetzel's avatar
John Spaetzel включено в состав коммита
515
[shellexecutors]: https://docs.gitlab.com/runner/executors/
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
516
[triggered]: ../triggers/README.md
Mayra Cabrera's avatar
Mayra Cabrera включено в состав коммита
517
[gitlab-deploy-token]: ../../user/project/deploy_tokens/index.md#gitlab-deploy-token
Steve Azzopardi's avatar
Steve Azzopardi включено в состав коммита
518
[registry]: ../../user/project/container_registry.md
Evan Read's avatar
Evan Read включено в состав коммита
519
[dependent-repositories]: ../../user/project/new_ci_build_permissions_model.md#dependent-repositories