全局关键字
stages
stages
用于定义流水线全局可使用的阶段,阶段元素的顺序既是作业执行的顺序。
官方默认预定义的5个阶段(按顺序):.pre
、build
、test
、deploy
、.post
。
相同阶段作业
并行执行
。默认情况下Gitlab Runner
运行器只会同时执行一个作业,只有满足以下条件之一
时才会真正的并行执行:- 作业运行在
不同的
运行器上 - 修改
Gitlab Runner
运行器config.toml
concurrent
设置,默认是1
- 作业运行在
默认情况下,上一个阶段作业全部运行成功后,才会运行下一阶段作业
如果作业没定义阶段,则默认使用
test
阶段默认情况下,任何一个前置作业失败,
commit
提交会被标记为fail
状态,并且下一阶段作业都不会运行。.pre
保证永远是管道中的第一阶段.post
保证永远是管道中的最后一个阶段用户自定义的阶段,在
.pre
之后,.post
之前执行,.pre
和.post
顺序是不可变的,比如以下配置是等同的:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 1
stages:
- .pre
- a
- b
- .post
# 2
stages:
- a
- .pre
- b
- .post
# 3
stages:
- a
- b
workflow
略
include
略
关键字描述
stage
stage
定义每个作业所处的阶段。作业没有第一stage
的话,默认是test
阶段。
before_script
before_script
用于定义在所有作业之前需要执行的命令。比如安装软件、安装依赖、更新代码等。
script
script
是定义作业中唯一必须参数,用于配置运行器需要执行的脚本。所有作业都必须有一个script
配置,如:
1 | job1: |
表示job1
作业需要执行命令输出“hello world”。
after_script
after_script
用于定义在所有作业(即使作业执行失败)之后需要执行的命名。比如:清理缓存、清空工作区间等。
如果作业timeout
或cancelled
,after_script
命令不会执行。
image
image
是指定作业使用的Docker
镜像。
extends
略
services
services
是指定使用Docker
镜像服务。
rules
在管道中使用rules
来定义包含或排除作业。
rules
按顺序计算,直到第一次匹配成功为止。当匹配成功时,在管道中,作业要么被包含或被排除,具体取决于配置。
rules
替换only/except
,并且它们不能在同一个作业中一起使用。
rules
接受一个用下列方法定义的规则数组,可以多个组合在一起使用:
if
changes
exists
allow_failuree
variables
when
(未定义时默认为:on_success
)
rules:if
使用rules:if
子句指定何时将作业添加到管道:
- 如果
if
语句为true
,则将作业添加到管道中。 - 如果
if
语句为true
,但是与when:never
结合使用,则不会将作业添加到管道中。 - 如果
if
语句都不为true
,则不会将作业添加到管道中。
1 | job: |
其他细节:
- 如果
rule
匹配且未定义when
,则该规则将为作业定义when
,默认为on_success
。 - 可以为每个
rule
定义一次when
,或者为将适用于所有规则的job
级别定义一次when
。job
级别和rule
中的when
不能混为一谈。 - 与
script
中的变量不同,rule
中的变量格式为$VARIABLE
。
rules:changes
使用rules:changes
通过检查对特定文件的更改来指定何时将作业添加到管道中。
仅在
branched
管道或merge_requests
管道中使用rules:changes
。
1 | docker build: |
其他细节:
rules:changes
工作方式与only:changes
和except:changes
相同。- 你可以使用
when:never
来实现类似于except:changes
的规则。
rules:exists
使用exists
用于在存储库中存在某些文件时运行作业。
例子:
1 | job: |
其他细节:
- Glob patterns are interpreted with Ruby
File.fnmatch
with the flagsFile::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB
. - 出于性能考虑,
GitLab
最多匹配10,000
个已存在的模式或文件路径。超过10,000
个文件时,exists
规则总是假定项目中有的匹配。
rules:allow_failure
rules:allow_failure
允许作业失败而不停止管道。
allow_failure:true
和when:manual
结合使用,管道会继续运行,无需等待手动作业的结果。而allow_failure:false
与when:manual
结合会导致管道等待手动作业运行后再继续。
例子:
1 | job: |
rules:variables
在rules
中使用variables
为特定的条件定义变量。
例子:
1 | job: |
only 和 except
only
和except
用于做限制策略,控制何时向管道添加作业。
only
用来定义什么时候运行作业。except
用来定义什么时候不运行作业。
策略规则:
only
和except
可以同时使用。only
和except
可以使用正则表达式。only
和except
可以使用特殊关键字。比如:api
、branches
、chat
、external
、external_pull_requests
、merge_requests
、pipelines
、pushes
、schedules
、tags
、triggers
、web
等。only
和except
允许指定过滤forks
作业的存储库路径。
可以使用四个关键词:
refs
variables
changes
kubernetes
only:refs/except:refs
使用only:refs
和except:refs
关键字来控制什么时候根据分支名称(branches)或管道类型(pipeline types)向管道中添加作业。
分支名称,比如:
main
ormy-feature-branch
。匹配分支的正则表达式,比如
/^feature-.*/
。以下关键字
关键字 | 描述 |
---|---|
api | 用于由管道API 触发的管道。理解:当一个pipline被另一个piplines api所触发时(不是触发器API)。 |
branches | 当一个分支被push上来。 |
chat | 用于使用GitLab ChatOps 命令创建的管道。 |
external | 当您使用除GitLab 之外的CI 服务时,比如:Jenkins 。 |
external_pull_requests | 当GitHub 上的外部拉取请求被创建或更新时。 |
merge_requests | 用于创建或更新合并请求时创建的管道。 |
pipilines | 对于使用带有CI_JOB_TOKEN 的API 或trigger 关键字创建的多项目管道。 |
pushes | 用于由git push 事件触发的管道,包括用于branches 和tags 。 |
schedules | 针对预定好的pipline 计划而言。 |
tags | 当一个打了tag标记的Release被提交时。 |
triggers | 用于使用trigger token 创建的管道。 |
web | 在GitLab WEB 页面上Pipelines 标签页下,按下run pipline 的情况。 |
例子:
1 | job1: |
其他细节:
预定的管道运行在特定的分支上,所以配置了
only: braches
的作业也会运行在预定的管道上。添加except: schedules
以防止只有配置了only: branches
的作业在预定的管道上运行。only
或except
没有使用任何关键字,则等同于only: refs
或except: refs
。以下job1
和job2
是等同的:1
2
3
4
5
6
7
8
9
10job1:
script: echo 'job1'
only:
- branches
job2:
script: echo 'job2'
only:
refs:
- branches如果作业没有使用
only
、except
或者rules
,则默认only
是branches
和tags
。以下job1
和job2
是等同的:1
2
3
4
5
6
7
8job1:
script: echo 'job1'
job2:
script: echo 'job2'
only:
- branches
- tags
only:variables/except:variables
根据CI/CD variables的状态,使用only:variables
或except:variables
关键字来控制何时向管道中添加作业。
例子
1 | job: |
你可以使用except:variables
来根据提交消息排除作业
1 | end-to-end: |
可以使用&&
和||
来构建更复杂的变量表达式
1 | job1: |
only:changes/except:changes
当Git push
事件修改文件时,使用changes
关键字和 only
来运行作业,或except
来跳过作业。
- 文件路径。
- 单个目录的通配符路径,例如
path/to/directory/*
,或一个目录及其所有子目录,例如path/to/directory/**/*
。 - 所有具有相同或多个扩展名的文件的通配符(glob)路径,例如
*.md
或path/to/directory/*.{rb、py sh}
。 - 用双引号括起来的根目录或所有目录中的文件的通配符路径。例如
"*.json"
或"**/*.json"
。
change
可以用于以下refs
:
branches
external_pull_requests
merge_requests
1
2
3
4
5
6
7
8docker build service one:
script: docker build -t my-service-one-image:$CI_COMMIT_REF_SLUG .
only:
refs:
- merge_requests
changes:
- Dockerfile
- service-one/**/*
例子:
1 | docker build: |
其他细节
- 如果使用除
branches
、external_pull_requests
或merge_requests
之外的引用,则changes
无法确定给定文件是新文件还是旧文件,因此总是返回true
。 - 如果使用
only:changes
与其他refs
配置,则作业会忽略changes
且始终运行。 - 如果使用
except:changes
与其他refs
配置,则作业会忽略changes
且永远不会运行。
only:kubernetes/except:kubernetes
略
needs
使用needs:
乱序执行作业。使用needs
的作业之间的关系可以可视化为有向无环图。
tags
使用tags
从项目可用的所有Gitlab Runner
列表中选择特定的运行器。
1 | job: |
allow_failure
让作业失败而不影响CI套件的其他部分时,使用allow_failure
,默认:false
,除了使用when:manual
语法的手动作业。
在使用rules:
的作业中,所有作业默认为allow_failure:false
,包括when:manual
作业。
当allow_failure
设置为true
且作业失败时,作业在UI中显示橙色警告。但是,管道的逻辑流认为作业成功/通过,它是非阻塞。
在下面的例子中,job1
和job2
并行运行。如果job1
失败,它不会停止下一个阶段的运行,因为它被标记为allow_failure: true
:
1 | job1: |
allow_failure:exit_codes
使用allow_failure:exit_codes
动态控制是否应该允许作业失败。您可以列出不认为失败的退出码。如果有任何其他退出代码,作业将失败:
1 | job1: |
when
使用when
来实现在失败时或失败后运行的作业。
when
的有效值为:
on_success
(默认)-只有当前置阶段的所有作业都成功时才执行作业,或者因为它们具有allow_failure: true
而被认为成功时才执行作业。on_failure
- 只有在前置阶段至少有一个作业失败时才执行作业。always
- 执行作业而不考虑前置阶段作业的状态。manual
- 手动执行工作。delayed
- 将作业的执行延迟一段指定的时间。GitLab
11.14中新增特性。never
- 根据作业规则,不执行作业。
- 根据workflow:rules,不运行流水线。
when:manual
手动作业是一种不会自动执行的作业,必须由用户显式启动。一般在部署到生产环境时使用手动作业。当管道启动时,手动作业显示为跳过,而不会自动运行。
when:delayed
使用when:delayed
执行脚本,或者避免作业立即进入挂起状态。
可以使用start_in
关键字设置句点。默认start_in
的值是以秒为单位的运行时间,除非提供了一个单位。start_in
必须小于等于一周。有效值的示例包括:
'5'
5 seconds
30 minutes
1 day
1 week
当一个阶段包含一个被延迟的作业时,延迟的作业完成后,管道才会继续运行。
与其他类型的作业类似,延迟作业的计时器只有在前一个阶段通过后才会启动。
下面的示例创建了一个名为job1
的作业,在前一个阶段完成30分钟后执行:
1 | job1: |
environment
略
cache
使用缓存指定要在作业之间缓存的文件和目录列表。只能使用本地工作副本中的路径。
cache:paths
使用cache:paths关键字选择要缓存的文件或目录。
1 | rspec: |
cache:key
使用cache:key
给每个缓存一个唯一的标识键。使用相同cache key
的所有作业使用相同的缓存,包括在不同的管道中。
如果不设置,则默认密钥为default
。所有带有cache:
但没有cache:key
的作业都共享default
的缓存。
1 | cache-job: |
其他细节:
- 如果是
windows
系统下,需要把$
替换成%
,比如:%CI_COMMIT_REF_SLUG%
。 cache:key
不能包含/
符号,等价于URI
编码%2F
。- 仅
.
符号(任何数字),等价于URI
编码的%2E
。
- 缓存是在作业之间共享的,为不同的作业使用不同的路径,或设置不同的
cache:key
,否则缓存内容会被覆盖。
cache:key:files
当一个
或两个
特定文件发生变化时,使用cache:key:files
生成一个新的密钥。cache:key:files
允许重用一些缓存,并减少重建的次数,可以加快后续管道运行的速度。
1 | cache-job: |
其他细节:
cache key
是一个SHA
签名,它根据每个列出的更改的文件的最新提交计算得出。如果在提交中没有任何文件变动,则默认为default
。
cache:key:prefix
使用cache:key:prefix
与cache:key:files
结合计算SHA
签名组合。
- 字符串
- 预设的
variables
- 二者结合
cache:untracked
使用cache:untracked:true
来缓存Git
库中所有未被跟踪的文件。
1 | rspec: |
cache:when
使用cache:when
根据作业的状态,来定义何时需要缓存。
on_success
- 默认on_failure
always
cache:policy
如果要更改cache
的上传和下载行为,使用cache:policy
。默认情况下,作业在启动时下载缓存,在作业结束时上传更改到缓存。
缓存策略可选项:
pull
push
pull-push
- 默认
artifacts
使用artifacts
把指定的文件和目录的列表都附加到作业,无论作业返回success
、fails
还是always
状态。
作业完成后,artifacts
被发送到GitLab
。如果大小不大于最大artifacts
大小限制(有大小限制,可以手动修改配置支持更大的大小),可以在GitLab UI
下载它们。
dependencies
略
artifacts:exclude
exclude
用来防止将文件添加到artifacts
存档中。
1 | artifacts: |
artifacts:expire_in
使用expire_in
指定作业artifacts
在过期和删除之前存储的时间。如果未定义过期时间,则默认为:30天。
expire_in
设置不生效:
- Artifacts from the latest job, unless this keeping the latest job artifacts is:
- Pipeline artifacts. It’s not possible to specify an expiration date for these:
- Pipeline artifacts from the latest pipeline are kept forever.
- Other pipeline artifacts are erased after one week.
expire_in
默认以秒
为单位。有效值包括:
'42'
42 seconds
3 mins 4 sec
2 hrs 20 min
2h20min
6 mos 1 day
47 yrs 6 mos and 4d
3 weeks and 2 days
never
1 | job: |
要覆盖过期日期并保护工件不被自动删除,可以执行以下操作:
- 使用
Gitlab
页面上的Keep
按钮。 - 配置
expire_in
为never
。
artifacts:expose_as
略
artifacts:name
使用name
指令来定义创建的artifacts
存档的名称。
artifacts:paths
paths
是相对于项目目录($CI_PROJECT_DIR
)的,不接链接到它的外部。
1 | release-job: |
artifacts:public
略
artifacts:reports
略
artifacts:untracked
略
artifacts:when
略
coverage
略
retry
使用retry
来配置任务在失败时重试的次数。
当作业失败时,将再次处理该作业,直到达到retry
指定的限制为止。取值范围0
~2
(最多重试两次,总共三次)。
1 | test: |
1 | test: |
when
的取值可以是:
always
: Retry on any failure (default).unknown_failure
: Retry when the failure reason is unknown.script_failure
: Retry when the script failed.api_failure
: Retry on API failure.stuck_or_timeout_failure
: Retry when the job got stuck or timed out.runner_system_failure
: Retry if there is a runner system failure (for example, job setup failed).missing_dependency_failure
: Retry if a dependency is missing.runner_unsupported
: Retry if the runner is unsupported.stale_schedule
: Retry if a delayed job could not be executed.job_execution_timeout
: Retry if the script exceeded the maximum execution time set for the job.archived_failure
: Retry if the job is archived and can’t be run.unmet_prerequisites
: Retry if the job failed to complete prerequisite tasks.scheduler_failure
: Retry if the scheduler failed to assign the job to a runner.data_integrity_failure
: Retry if there is a structural integrity problem detected.
timeout
使用timeout
为特定作业配置超时时间。
1 | build: |
parallel
略
trigger
使用trigger
来定义下游管道触发器。当GitLab
启动trigger
作业时,将创建下游管道。
带有trigger
的作业只能使用有限的关键字集合。例如,不能使用script
、before_script
或after_script
运行命令。
可以使用trigger
创建2中不同类型的下游管道:
多项目管道:基本语法
可以使用trigger
来配置一个完成路径的下游项目触发器:
1 | staging: |
多项目管道:复杂语法
1 | # 1、通过分支名称创建下游管道 |
父子管道:触发语法
1 | # 1、通过子管道配置的YAML文件的路径 |
trigger:strategy
默认情况下,一旦创建了下游管道,触发器作业就会以成功状态完成。
使用strategy:depend
强制trigger
作业等待下游(多项目或父子)管道完成。此设置使trigger
作业以running
状态等待,知道触发管道完成。此时,trigger
作业完成并与下游作业展示相同的状态。
此设置可以帮助您保持管道执行的线性。
通过调用API触发管道
要强制重新构建特定的branch
、tag
或comnit
,可以使用trigger
token
的调用API。更多信息请查看。
interruptible
自动取消旧的流水线
interruptible:true
表示如果一个正在运行的作业因新的管道运行而变得冗余时,则中断正在运行的作业,去运行新的管道。默认:false
(不可中断)。
1 | step-1: |
resource_group
安全部署,一个分支只有一个管道在执行。只有前面的管道执行完成了,才会执行新的管道作业。
release
略
variables
变量分为两种:
在
.gitlab-ci.yml
、Gitlab UI -> Settings -> CI/CD -> Variables
或者api中定义的变量,更多详情请查看Custom variables。Gitlab
预设的变量,更多详情请查看Predefined_variables查看、获取所有预设变量
1
2
3
4
5
6
7variables:
CI_HARBOR_REGISTER_URL: 'https://example.com'
get_all_var:
script:
# 打印所有变量到日志中,包括自定义变量、预设变量
- export打印日志如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113Executing "step_script" stage of the job script
Using docker image sha256:b0757c55a1fdbb59c378fd34dde3e12bd25f68094dd69546cf5ca00ddbaa7a33 for docker:stable with digest docker@sha256:fd4d028713fd05a1fb896412805daed82c4a0cc84331d8dad00cb596d7ce3e3a ...
export
export CI='true'
export CI_API_V4_URL='http://192.168.1.123:8888/api/v4'
export CI_BUILDS_DIR='/builds'
export CI_BUILD_BEFORE_SHA='551a3e95d5e4f15e8f79e97ec03aa2fd82699b9e'
export CI_BUILD_ID='61'
export CI_BUILD_NAME='get_all_var'
export CI_BUILD_REF='ca1dcc591e8c38f715a5cf49a7480d36c692bcdf'
export CI_BUILD_REF_NAME='master'
export CI_BUILD_REF_SLUG='master'
export CI_BUILD_STAGE='test'
export CI_BUILD_TOKEN='[MASKED]'
export CI_COMMIT_AUTHOR='YangLi <yl@yl-online.top>'
export CI_COMMIT_BEFORE_SHA='551a3e95d5e4f15e8f79e97ec03aa2fd82699b9e'
export CI_COMMIT_BRANCH='master'
export CI_COMMIT_DESCRIPTION=''
export CI_COMMIT_MESSAGE='Update .gitlab-ci.yml file'
export CI_COMMIT_REF_NAME='master'
export CI_COMMIT_REF_PROTECTED='true'
export CI_COMMIT_REF_SLUG='master'
export CI_COMMIT_SHA='ca1dcc591e8c38f715a5cf49a7480d36c692bcdf'
export CI_COMMIT_SHORT_SHA='ca1dcc59'
export CI_COMMIT_TIMESTAMP='2021-07-14T01:55:04+00:00'
export CI_COMMIT_TITLE='Update .gitlab-ci.yml file'
export CI_CONCURRENT_ID='0'
export CI_CONCURRENT_PROJECT_ID='0'
export CI_CONFIG_PATH='.gitlab-ci.yml'
export CI_DEFAULT_BRANCH='master'
export CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX='192.168.1.123:8888/app_tech/dependency_proxy/containers'
export CI_DEPENDENCY_PROXY_PASSWORD='[MASKED]'
export CI_DEPENDENCY_PROXY_SERVER='192.168.1.123:8888'
export CI_DEPENDENCY_PROXY_USER='gitlab-ci-token'
export CI_DISPOSABLE_ENVIRONMENT='true'
export CI_JOB_ID='61'
export CI_JOB_JWT='[MASKED]'
export CI_JOB_NAME='get_all_var'
export CI_JOB_STAGE='test'
export CI_JOB_STARTED_AT='2021-07-14T01:55:07Z'
export CI_JOB_STATUS='running'
export CI_JOB_TOKEN='[MASKED]'
export CI_JOB_URL='http://192.168.1.123:8888/app_tech/Cloud-Web/-/jobs/61'
export CI_HARBOR_REGISTER_URL='https://example.com'
export CI_NODE_TOTAL='1'
export CI_PAGES_DOMAIN='example.com'
export CI_PAGES_URL='http://app_tech.example.com/Cloud-Web'
export CI_PIPELINE_CREATED_AT='2021-07-14T01:55:05Z'
export CI_PIPELINE_ID='31'
export CI_PIPELINE_IID='17'
export CI_PIPELINE_SOURCE='push'
export CI_PIPELINE_URL='http://192.168.1.123:8888/app_tech/Cloud-Web/-/pipelines/31'
export CI_PROJECT_CONFIG_PATH='.gitlab-ci.yml'
export CI_PROJECT_DIR='/builds/app_tech/Cloud-Web'
export CI_PROJECT_ID='4'
export CI_PROJECT_NAME='Cloud-Web'
export CI_PROJECT_NAMESPACE='app_tech'
export CI_PROJECT_PATH='app_tech/Cloud-Web'
export CI_PROJECT_PATH_SLUG='application-technology-Cloud-Web'
export CI_PROJECT_REPOSITORY_LANGUAGES='vue,javascript,scss,css,html'
export CI_PROJECT_ROOT_NAMESPACE='app_tech'
export CI_PROJECT_TITLE='Cloud-Web'
export CI_PROJECT_URL='http://192.168.1.123:8888/app_tech/Cloud-Web'
export CI_PROJECT_VISIBILITY='private'
export CI_REGISTRY_PASSWORD='[MASKED]'
export CI_REGISTRY_USER='gitlab-ci-token'
export CI_REPOSITORY_URL='http://gitlab-ci-token:[MASKED]@192.168.1.123:8888/app_tech/Cloud-Web.git'
export CI_RUNNER_DESCRIPTION='docker'
export CI_RUNNER_EXECUTABLE_ARCH='linux/amd64'
export CI_RUNNER_ID='10'
export CI_RUNNER_REVISION='c1edb478'
export CI_RUNNER_SHORT_TOKEN='9sgAhwLC'
export CI_RUNNER_TAGS='docker'
export CI_RUNNER_VERSION='14.0.1'
export CI_SERVER='yes'
export CI_SERVER_HOST='192.168.1.123'
export CI_SERVER_NAME='GitLab'
export CI_SERVER_PORT='8888'
export CI_SERVER_PROTOCOL='http'
export CI_SERVER_REVISION='02b97bd2a77'
export CI_SERVER_URL='http://192.168.1.123:8888'
export CI_SERVER_VERSION='13.12.4'
export CI_SERVER_VERSION_MAJOR='13'
export CI_SERVER_VERSION_MINOR='12'
export CI_SERVER_VERSION_PATCH='4'
export DOCKER_HOST='unix:///var/run/docker.sock'
export DOCKER_TLS_CERTDIR='/certs'
export DOCKER_VERSION='19.03.14'
export FF_CMD_DISABLE_DELAYED_ERROR_LEVEL_EXPANSION='false'
export FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR='false'
export FF_ENABLE_BASH_EXIT_CODE_CHECK='false'
export FF_GITLAB_REGISTRY_HELPER_IMAGE='true'
export FF_NETWORK_PER_BUILD='false'
export FF_SKIP_DOCKER_MACHINE_PROVISION_ON_CREATION_FAILURE='false'
export FF_SKIP_NOOP_BUILD_STAGES='true'
export FF_USE_DIRECT_DOWNLOAD='true'
export FF_USE_FASTZIP='false'
export FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY='false'
export FF_USE_NEW_BASH_EVAL_STRATEGY='false'
export FF_USE_POWERSHELL_PATH_RESOLVER='false'
export FF_USE_WINDOWS_LEGACY_PROCESS_STRATEGY='true'
export GITLAB_CI='true'
export GITLAB_FEATURES=''
export GITLAB_USER_EMAIL='yl@yl-online.top'
export GITLAB_USER_ID='6'
export GITLAB_USER_LOGIN='yl'
export GITLAB_USER_NAME='YangLi'
export HOME='/root'
export HOSTNAME='runner-9sgahwlc-project-4-concurrent-0'
export OLDPWD='/'
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
export PWD='/builds/app_tech/Cloud-Web'
export SHLVL='3'
预填充变量:手动管道
使用value
和description
,来定义管道级(全局)变量,这些变量在手动运行管道
时被预先填充:
1 | variables: |
在手动运行管道时,不能将
作业级
变量设置为预填充。
CI/CD变量
用于配置运行器如何处理Git请求,包括:
GIT_STRATEGY
GIT_SUBMODULE_STRATEGY
GIT_CHECKOUT
GIT_CLEAN_FLAGS
GIT_FETCH_EXTRA_FLAGS
GIT_DEPTH
(浅克隆)GIT_CLONE_PATH
(自定义构建目录)TRANSFER_METER_FREQUENCY
(artifact/cache 更新频率)ARTIFACT_COMPRESSION_LEVEL
(artifact archiver 压缩级别)CACHE_COMPRESSION_LEVEL
(cache archiver 压缩级别)
YAML 特性
锚点
用于在文档中复制或继承内容。
&
用来设置锚点名<<
表示将给定的散列合并到当前散列中*
表示引用的锚点名
1 | .job_template: |
等同于
1 | .job_template: |
隐藏作业
不会被执行
1 | # 第一种、注释掉 |