如何在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" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);
有人可以提供相同的正确语法吗? gitlabci中是否有关于条件(if-else,for循环)的文档?
答案 0 :(得分:6)
请注意以下三种语法选项。
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- if [ "$flag" == "true" ]; then MODULE="demo1"; else MODULE="demo2"; fi
- kubectl apply -f ${MODULE} --record=true
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- >
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi
demo1-deploy-dev:
variables:
MODULE: demo1
demo2-deploy-dev:
variables:
MODULE: demo2
.deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f ${MODULE} --record=true
答案 1 :(得分:3)
请注意,GitLab 13.3(2020年8月)对if-else规则语法进行了改进:
CI / CD规则:如果支持带括号的逻辑表达式
如果在
rules
子句中使用if
关键字,则它现在更加强大,并支持由管道处理器评估的带括号的表达式。您可以使用更复杂,更高效的AND(
&&
/ OR(||
)表达式,使管道规则更加逻辑,强大且易于管理。请参见Documentation和Issue。
答案 2 :(得分:2)
您可以考虑检查rules
它允许按顺序评估单个规则对象的列表,直到一个匹配并为作业动态提供属性。
可用的规则条款包括:
示例:
a = int(input("Enter first number"))
答案 3 :(得分:0)
我认为您只需要添加一个分号并在最后加上“ fi”即可。 我找不到文档的链接。
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true; fi);
答案 4 :(得分:0)
此外,在多行块的情况下,如果您想要或需要保留换行符,则可以使用竖线字符:
script: |
if [ "$flag" == "true" ]; then
kubectl apply -f demo1 --record=true
else
kubectl apply -f demo2 --record=true
fi
要深入了解,请访问https://yaml-multiline.info/