GitLab-CICD语法详解
⼯作原理
1、将代码托管在git
2、在项⽬根⽬录创建ci⽂件.l 在⽂件中指定构建,测试和部署脚本
3、gitlab将检测到他并使⽤名为git Runner的⼯具运⾏脚本
4、脚本被分组为作业,他们共同组成了⼀个管道
gitlab-ci的脚本执⾏,需要⾃定义按照对应的gitlab-runner来执⾏,代码puhs之后 webhook检测到代码变化就会触发gitlan-cl,分配到各个Runner来运⾏相应的脚本script
gitlab Runner
类型
shared 共享类型,运⾏整个平台项⽬的作业(gitlab)
group 项⽬组类型,运⾏特定group下的所有项⽬的作业(group)
sprcific 项⽬类型,运⾏指定的项⽬作业(project)
状态
locked 锁定状态,⽆法运⾏项⽬作业
paused 暂停状态,暂时不会接收新的作业
流⽔线语法
job(作业)
在每个项⽬中,使⽤名为.l的YML⽂件配置Gitlab CL/CD管道,在⽂件中可以定义⼀个或多个作业(job)每个作业必须具有唯⼀名称(不能使⽤关键字),每个作业是独⽴运⾏的,作业定义了在约束条件下进⾏相关操作,每个作业⾄少要包含⼀个script.
例:
job1:
script: "execute-script-for-job1"
job2:
script: "execute-script-for-job2"
这⾥定义了两个作业,每个作业运⾏不同命令,命令可以是shell或脚本
script
(运⾏shell或者脚本)
例:
job1:
script:
- uname -a
- bundle exec rspec
注意:有时script命令需要⽤单引号或双引号引起来,例如,包含冒号命令(:)需要加引号,以便被包
裹的YAML解析器知道来解释整个事情作为⼀个字符串,⽽不是⼀个"“键:值”"对,使⽤特殊字符是消息::,{,},[,],,,&,*,#,?,|,-,<,>,=,!,%,@,```
before_script
⽤于定义⼀个命令,在该命令在每个作业之前运⾏。必须是⼀个数组。知道的scripy与脚本中知道的任何脚本串联在⼀起,并在单个shell中⼀起执⾏
before_script失败导致整个作业失败,其他作业将不再执⾏。作业失败不会影响after_script
after_script
⽤于定义将每个作业(包括失败的作业)之后运⾏的命令
这必须是⼀个数组
指定的脚本在新的shell中执⾏,与任何before_script或script脚本分开
before_script或script执⾏失败不影响after_script执⾏
stages
⽤于定义作业可以使⽤的阶段,并且是全局定义
同⼀阶段的作业并⾏运⾏,不同阶段按顺序执⾏
stages:
- build
- test
- codescan
- deploy
.pre&.post
.pre始终是整个管道的第⼀运⾏阶段,.post始终是整个管道的最后⼀个运⾏阶段。⽤户定义的阶段都在两者之间运⾏。.pre和.post的顺序⽆法更改。如果管道仅包含.pre或.post阶段的作业,则不会创建管道
codescan:
stage: .pre
tags:
- build
only:
- master
script:
-echo"codescan"
stage
按job定义的,并且依赖与全局定义的stages。它允许将作业分为不同的阶段,并且统⼀stage作业可以并⾏执⾏
varibales
定义变量,pipeline变量、job变量。job变量优先级最⼤
tags
指定runner
⽤于从允许该项⽬的所有Runner列表中选择指定的Runner,在Runner注册期间,你可以指定Runner的标签
windows job:
stage:
- build
tags:
- windows
script:
-echo Hello,%$USERNAME%:
osx job:
stage:
- build
tags:
- osx
script:
-echo"Hello, $USER:"
allow_failure(允许失败)
allpw_failure允许作业失败,默认值为false,启⽤后如果作业失败,改作业将在⽤户界⾯显⽰橙⾊警告,但是,管道的逻辑流程将任务作业成功/通过,并且不会被阻塞。假设所有其他作业均成功,则改作业的阶段及其管道将显⽰相同的橙⾊警告。但是,管理的提交将被标记为"通过",⽽不会发出警告。
windows job:
stage:
- build
tags:
- windows
script:
git使用详解-echo Hello,%$USERNAME%:
allow_failure: true
when(控制作业允许)
on_success 前⾯阶段中的所有作业都成功时才执⾏作业,默认值
on_failure 当前⾯阶段出现失败时执⾏
always 总是执⾏作业
manual ⼿动执⾏作业
delayed 延迟执⾏作业
retry(重试)
配置在失败的情况下重试作业的次数
当作也失败并配置了retry,将再次处理该作业,直到达到retry关键字指定的次数
如果当retry设置为2,斌却作业在第⼆次允许成功(第⼀次重试),则不会再次重试,retry值必须是⼀个正整数,等于或⼤于0,⼩于或等于2(最多两次重试,总共允许三次)
retry-重试-精确匹配错误
默认情况下,在失败情况下重试作业,amx:最⼤重试次数 when:重试失败吃的错误类型
always :在发⽣任何故障时重试(默认).
unknown_failure :当失败原因未知时。
script_failure :脚本失败时重试。
api_failure :API失败重试。
stuck_or_timeout_failure :作业卡住或超时时。
runner_system_failure :运⾏系统发⽣故障。
missing_dependency_failure: 如果依赖丢失。
runner_unsupported :Runner不受⽀持。
stale_schedule :⽆法执⾏延迟的作业。
job_execution_timeout :脚本超出了为作业设置的最⼤执⾏时间。
archived_failure :作业已存档且⽆法运⾏。
unmet_prerequisites :作业未能完成先决条件任务。
scheduler_failure :调度程序未能将作业分配给运⾏scheduler_failure。
data_integrity_failure :检测到结构完整性问题。
例:
unittest:
stage: test
tags:
- build
only:
- master
script:
- ech "run test"
retry:
max: 2
when:
- script_failure
timeout-超时
作业级别的超时可以超过项⽬级别超时,但不能超过Runner特定的超时
build:
script: build.sh
timeout: 3hours 30minutes
test:
script: rspec
timeout: 3h 30m
timeout-超时-runner超时
如果⼩于项⽬定义超时时间将具有优先权,此功能可⽤于通过设置⼤超时(例如⼀个星期)来防⽌Shared Runner被项⽬占⽤。未配置时Runner将不会覆盖项⽬超时
⽰列1:运⾏程序超时⼤于项⽬超时
runner超时设置为24⼩时,项⽬的CI/CD超时设置为2⼩时。
该⼯作将在2⼩时后超时
⽰例2:未配置运⾏程序超时
runner不设置超时时间,项⽬的CI/CD超时设置为2⼩时
该⼯作将在2⼩时后超时
⽰例3:运⾏程序超时⼩于项⽬超时
runner超时设置为30分⽀,项⽬的CI/CD超时设置为2⼩时
⼯作在30分钟后超时
parallel-并⾏作业
配置要并⾏运⾏的作业实例数,此值必须⼤于或等于2并且⼩于或等于50
这将创建n个并⾏运⾏的同⼀作业实例、他们从job_name 1/n到job_name n/n依次命名
only&ecxept限制分⽀标签
only和ecxept⽤分⽀策略来限制jobs构建
only定义那些分⽀和标签的git项⽬将会被job执⾏
ecxept定义那些分⽀和标签的git项⽬将不会被job执⾏
job:
#use regexp
only:
-/^issue-.*$/
#use specli keyword
ecxept:
- branches
rules-构建规则
rules允许按顺序苹果单个规则,直到匹配并为作业动态提供属性
rules不能与only/except组合使⽤
可⽤规则
if(如果条件匹配)
changes (指定⽂件发⽣变化)
exists (指定⽂件存在)
列:rules-if-条件匹配
如果DOMAIN的值匹配,则需要⼿动运⾏
不匹配on_success
条件判断从上到下,匹配即停⽌
多条件匹配可以使⽤&&||
variables:
DOMAIN: example
codescan:
stage: codescan
tags:
- build
script:
-echo"codescan"
- sellp 5;
#parallel:5
rules:
-if:'$DOMAIN == "example"'
when: manual
when: on_success
rules-changes-⽂件变化
接受⽂件路径数组
如果提交jenkinsfile⽂件发送的变化则为true
codescan:
stage: codescan
tags:
- build
script:
-echo"codescan"
-sleep 5;
#parallel:5
rules:
- changes:
- jenkinsfile
when: manual
-if:'$DOMAIN == "example"'
when: on_success
- when: on_success
rules-allow_failure-允许失败
使⽤rules-allow_failure: true
rules:在不停⽌管道本⾝的情况虚啊允许作业失败或⼿动作业等待操作
job:
script "echo Hello,Rules"
rules:
-if:'$CI_meRGE_REQUEST_TARGET_BRABCH_NAME == "master"'
when: manual
allow_failure
workflow-rules-管道创建
定价workflow关键字适⽤于整个管道,并将确定是否创建管道
when:可以三个字为always或never,如果未提供,则默认值未always
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论