如何在gitlabci上使用if-else条件

时间:2019-02-19 08:11:06

标签: 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" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);

有人可以提供相同的正确语法吗? gitlabci中是否有关于条件(if-else,for循环)的文档?

5 个答案:

答案 0 :(得分:6)

请注意以下三种语法选项。

使用shell变量

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

使用Yaml多行块

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

使用gitlab模板和变量

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(||)表达式,使管道规则更加逻辑,强大且易于管理。

请参见DocumentationIssue

答案 2 :(得分:2)

您可以考虑检查rules

它允许按顺序评估单个规则对象的列表,直到一个匹配并为作业动态提供属性。

可用的规则条款包括:

  • if(仅类似于:变量)
  • 更改(仅与更改相同)
  • 存在

示例:

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/