If statement 如何在gitlabci上使用if-else条件
如何在gitlab CI中使用if-else条件 我有以下代码:If statement 如何在gitlabci上使用if-else条件,if-statement,gitlab-ci,If Statement,Gitlab Ci,如何在gitlab CI中使用if-else条件 我有以下代码: deploy-dev: image: testimage environment: dev tags: - kubectl script: - kubectl apply -f demo1 --record=true - kubectl apply -f demo2 --record=true 现在我想添加一个类似这样的条件 script: - (if [ "$flag" == "tr
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f demo1 --record=true
- kubectl apply -f demo2 --record=true
现在我想添加一个类似这样的条件
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);
有没有人能提供正确的语法?gitlabci中是否有关于条件(如果有,则为循环)的文档?我认为您只需要添加一个分号,并在末尾结束“fi”。 我找不到指向文档的链接
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true; fi);
下面是该类语句的三种语法选项。来自gitlab ci: 使用shell变量 将shell变量与yaml多行块一起使用 使用gitlab规则 使用gitlab模板和变量
<>你可以考虑检查< /P> 它允许按顺序计算单个规则对象的列表,直到其中一个对象匹配并动态地向作业提供属性为止 可用的规则条款包括:
- if(仅类似于:变量)
- 更改(仅与:更改相同)
- 存在
job:
script: "echo Hello, Rules!"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
when: always
- if: '$VAR =~ /pattern/'
when: manual
- when: on_success
此外,对于多行块,如果希望或需要保留换行符,可以使用管道字符:
script: |
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi
要深入了解,请访问注意,对于(2020年8月),if-else规则语法有一个改进:
CI/CD规则:如果支持带括号的逻辑表达式
If将rules
关键字与If
子句一起使用,它现在功能更加强大,支持由管道处理器计算的括号表达式
您可以使用更复杂、更高效的and(&;
)/或(|
)表达式,使管道规则更具逻辑性、功能更强大、更易于管理
见和
以及(2021年1月) 管道规则的支持变量 以前,
规则
关键字的范围是有限的,仅确定作业是否应包括在管道中或从管道中排除。在本版本中,您现在可以决定是否满足某些条件,并随后覆盖作业中的变量,从而在配置管道时提供更大的灵活性
见和
(2021年5月): CI/CD管道“工作流:规则”中的支持变量 以前,
规则
关键字的范围是有限的,仅确定作业是否应包括在管道中或从管道中排除,我们添加了使用变量
关键字和规则
来设置作业中的变量值的功能,该变量值基于匹配的规则
在此版本中,我们将此功能扩展到了工作流:规则
,因此,如果某些条件匹配,您可以为整个管道设置变量值。这有助于使管道更加灵活 见和
为什么要在
if
行周围加括号?在上一个示例中,如何检查$flag的值?@RogerCollAumatell:即,仅使用变量:[$flag==“true”]
@XavierD:我无法浏览最后一个示例。似乎正在为模块设置一个变量,该模块在基于$flag的.deploy dev中使用,但到底是什么导致.deploy dev运行?(我认为“.”前缀意味着该节被跳过(隐藏)?谢谢@Cogniticlaeves。实际上,作业定义中缺少了扩展
关键字。你是对的,带“.”前缀的作业没有被执行,在这里充当模板或抽象作业。我已经修复了我的示例。希望现在更清楚。还有-|
与->
类似,只是它会保留内容多行,而不是使用=~模式匹配将其连接成一行,中间穿插着;
。如果您决定在变量中使用该模式,请注意此正则表达式模式匹配的限制:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_PIPELINE_SOURCE == "push"'
when: never
- when: always
demo1-deploy-dev:
extends: .deploy-dev
only:
variables: [ $flag == "true" ]
variables:
MODULE: demo1
demo2-deploy-dev:
extends: .deploy-dev
only:
variables: [ $flag == "false" ]
variables:
MODULE: demo2
.deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f ${MODULE} --record=true
job:
script: "echo Hello, Rules!"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
when: always
- if: '$VAR =~ /pattern/'
when: manual
- when: on_success
script: |
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi