目录
本篇文章用于记录学习CICD时的yaml配置文件语法规则
job/script/before_script/after_script/stages/stage/variables
在每个项目中,我们使用名为.gitlab-ci.yml的YAML文件配置GitLab CI / CD 管道。
这里在pipeline中定义了两个作业,每个作业运行不同的命令。命令可以是shell或脚本。
- job1:
- script: "execute-script-for-job1"
-
- job2:
- script: "execute-script-for-job2"
- job:
- script:
- - uname -a
- - bundle exec rspec
**注意:**有时, script
命令将需要用单引号或双引号引起来. 例如,包含冒号命令( :
)需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个"键:值"对. 使用特殊字符时要小心:
:
, {
, }
, [
, ]
, ,
, &
, *
, #
, ?
, |
, -
, <
, >
, =
!
, %
, @
.
- job:
- script:
- - uname -a
- - bundle exec rspec
用于定义一个命令,该命令在每个作业之前运行。必须是一个数组。指定的script
与主脚本中指定的任何脚本串联在一起,并在单个shell中一起执行
用于定义将在每个作业(包括失败的作业)之后运行的命令。这必须是一个数组。指定的脚本在新的shell中执行,与任何before_script
或script
脚本分开
可以在全局定义,也可以在job中定义。在job中定义会覆盖全局
- build:
- before_script:
- - echo "before-script in job"
- stage: build
- script:
- - echo "mvn clean "
- - echo "mvn install"
- after_script:
- - echo "after script in job"
after_script失败不会影响作业失败
before_script失败导致整个作业失败,其他作业将不再执行。作业失败不会影响after_script运行
用于定义作业可以使用的阶段,并且是全局定义的。同一stage的作业并行运行,不同stage按顺序执行
- stages:
- - build
- - test
- - deploy
全局定义的stages是来自于每个job。如果job没有定义stage则默认是test阶段。如果全局未定义stages,则按顺序运行 build,test,deploy
此时如果没有定义stages,而job中的stage又定义了除build,test,deploy这三个默认的stage,那么CICD会报错
为了避免上述情况的发生,一个标准的yaml文件必须定义stages
- stages:
- - build
- - test
- - codescan
- - deploy
此时当某个job的stage为codescan时,CICD可以明确知道该job的运行顺序,从而能够正常运行
.pre始终是整个管道的第一个运行阶段,.post始终是整个管道的最后一个运行阶段。 用户定义的阶段都在两者之间运行。.pre
和.post
的顺序无法更改。如果管道仅包含.pre
或.post
阶段的作业,则不会创建管道
在job里定义,并且依赖于全局定义的stages 。 它允许将job分为不同的阶段,并且同一stage
作业可以并行执行(取决于特定条件 )
- unittest:
- stage: test
- script:
- - echo "run test"
-
- interfacetest:
- stage: test
- script:
- - echo "run test"
unittest和interfacetest同属一个stage,按理来说他们应该会并行运行,但是在gitlab-runner中默认一个runner每次运行的job数量为1,因此我们需要修改默认值
vim /etc/gitlab-runner/config.toml 更改为10后自动加载无需重启。
concurrent = 10
定义变量,pipeline变量、job变量、Runner变量。job变量优先级最大。
综合实例:
- before_script:
- - echo "before-script!!"
-
- variables:
- DOMAIN: example.com
-
- stages:
- - build
- - test
- - codescan
- - deploy
-
- build:
- before_script:
- - echo "before-script in job"
- stage: build
- script:
- - echo "mvn clean "
- - echo "mvn install"
- - echo "$DOMAIN"
- after_script:
- - echo "after script in buildjob"
-
- unittest:
- stage: test
- script:
- - echo "run test"
-
- deploy:
- stage: deploy
- script:
- - echo "hello deploy"
- - sleep 2;
-
- codescan:
- stage: codescan
- script:
- - echo "codescan"
- - sleep 5;
-
- after_script:
- - echo "after-script"
- - ech
参考文章链接: