GitlabCI语法简介
第一部分:
script :定义流水线上要运行的一些shell命令
image: 使用docker镜像
services: 构建容器的基础上link一些服务,比如说数据库
before_script: 在作业运行前运行脚本
after_script:在作业运行后运行脚本【这个使用的shell和作业使用的shell不是一个,所有不会影响作业】
stages: 汇总定义的阶段,执行的顺序就是按照这个定义的顺序
stage:指定运行的阶段【不定义作业无法运行】
only:限制作业的运 行条件,限定作业运行的分支【后期gitlab会取消这个】
except:和only功能一样 【后期gitlab只会保留这一个】
rules:也是可以使用only的功能,但是无法和【only,except一起使用】
tags:在注册runner的时候使用的标签
第二部分:
allow_failure:容许作业失败,失败的job不会影响提交状态【值是true和false】
when:什么执行job【可以设置手动执行,延迟执行,当作业前面成功后才会执行】
environment :k8s的时候使用,当执行流水线的时候指定环境名称,url,然后git喇叭里就可以显示出来了
cache: 帮助我们缓存依赖【一般使用在java项目,为了帮助快速构建包】是局部缓存,把项目缓存到根目录
aftifacts:缓存制品,制品就是打包后的东西,jar包之类的【配置了aftifacts就可以在gitlab里进行收集制品,在gitlab里进行下载或者上传到制品库】【可以设置保存的时间,但是会占用很大空间,建议还是上传到制品库里进行保存】
dependencies:获取制品,结合aftifacts使用的,在做测试的可能需要制品
关于流水线出现问题怎么去解决:
retry:比如说第一次执行流水线出现了问题,retry可以设置重置多少次
timout:定义作业的构建超时时间【比如很多npm项目,构建很长很长时间也不会报错,但是一直运行,会占用很多的资源,这个时候就可以设置作业超时时间】
parallel:作业的并行【使用的场景很少,对于在做自动化测试的时候使用】
trigger:触发子流水线作业 ,触发不同项目
incloud:可以引用哪个项目里的哪里分支里的哪个*.yml文件,扩充到yml文件里
pages:在gitlab项目设置里要手动打开,进行自动化测试执行完后会有个html报告,想在gitlab里展示出来就要开启这个功能
variables:变量,可以设置全局的,局部的,全局的是针对所有作业都生效,优先级作业里定义的最高
job/script/before_script/after_script/stages/stage/variables
在每个项目中,我们使用名为.gitlab-ci.yml
的YAML文件配置GitLab CI / CD 管道。
可以定义一个或多个作业(job)。
每个作业必须具有唯一的名称(不能使用关键字)。
每个作业是独立执行的。
job1: script: "execute-script-for-job1" job2: script: "execute-script-for-job2"
注释: 这里在pipeline中定义了两个作业,每个作业运行不同的命令。命令可以是shell或脚本。
基础模板
before_script:
- echo "before-script"
variables:
DOMAIN: www.hebbao.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 build job"
unittest: 单元测试
stage: test
script:
- echo "run test"
deploy:
stage: deploy
script:
- echo "hello deploy"
- sleep 5;
codescan: 代码扫描
stage: codescan
script:
- echo "codescan"
- sleep 5;
after_script:
- echo "after-script"
- ech
job:
script:
- uname -a
- bundle exec rspec
有时, script
命令将需要用单引号或双引号引起来. 例如,包含冒号命令( :
)需要加引号,以便被包裹的YAML解析器知道来解释整个事情作为一个字符串,而不是一个"键:值"对. 使用特殊字符时要小心: :
, {
, }
, [
, ]
, ,
, &
, *
, #
, ?
, |
, -
, <
, >
, =
!
, %
, @
before_script
或script
脚本分开。
before_script:
- echo "before-script!!"
variables:
DOMAIN: example.com
stages:
- build
- deploy
build:
before_script:
- echo "before-script in job"
stage: build
script:
- echo "mvn clean "
- echo "mvn install"
after_script:
- echo "after script in job"
deploy:
stage: deploy
script:
- echo "hello deploy"
after_script:
- echo "after-script"
after_script失败不会影响作业失败。
before_script失败导致整个作业失败,其他作业将不再执行。作业失败不会影响after_script运行。
用于定义作业可以使用的阶段,并且是全局定义的。同一阶段的作业并行运行,不同阶段按顺序执行。
stages:
- build
- test
- deploy
这里定义了三个阶段,首先build阶段并行运行,然后test阶段并行运行,最后deploy阶段并行运行。deploy阶段运行成功后将提交状态标记为passed状态。如果任何一个阶段运行失败,最后提交状态为failed。
stages: - build - test - codescan - deploy
未定义stages
全局定义的stages是来自于每个job。如果job没有定义stage则默认是test阶段。如果全局未定义stages,则按顺序运行 build,test,deploy。
.pre
和.post
的顺序无法更改。如果管道仅包含.pre
或.post
stages
。 它允许将作业分为不同的阶段,并且同一stage
作业可以并行执行(取决于特定条件
unittest:
stage: test
script:
- echo "run test"
interfacetest:
stage: test
script:
- echo "run test"
vim /etc/gitlab-runner/config.toml 更改后自动加载无需重启。
concurrent = 10
variables
定义变量,pipeline变量、job变量、Runner变量。job变量优先级最大。
有可能出现的问题:
把runner配置好以后,流水线是暂停状态,因为使用的是共享runner,如果有这个问题需要进行设置

评论