如何在gitlab ci中指定更改补码?

时间:2019-12-01 15:21:26

标签: gitlab gitlab-ci

gitlab引入了rules和所做的更改,这些更改允许在更改发生时指定要运行的作业。
我想知道如何配置要跳过的作业或忽略路径?

例如,我希望对ci进行任何更改,除非它是docs路径中的更改。
如果srcdocs中都发生了更改,则应执行作业,
但是如果更改仅在docs文件夹中,则不应执行该作业。

1 个答案:

答案 0 :(得分:1)

更新2 GitLab将全局变量用于其rules: changes。没有直接的方法可以在标准的Glob中排除文件夹,但是我们可以解决它,并将除文件夹docs中的文件之外的所有内容都包括在内:

myjob:
  script: build myproject
  rules:
   - changes:
     - "*"
     - "?/**/*"
     - "??/**/*"
     - "???/**/*"
     - "[^d]???/**/*"
     - "?[^o]??/**/*"
     - "??[^c]?/**/*"
     - "???[^s]/**/*"
     - "?????*/**/*"
     when: on_success

第一个*与所有文件匹配。第二至第四行行匹配具有1-3个字符的文件夹中的所有内容。第五行匹配文件夹中所有四个字符的内容,除非它以d开头。此行之后的行与所有四个字符的文件夹匹配,除非第二个字符为o。接下来的两行对cs进行相同的操作,这四行共同匹配具有四个字符的所有文件夹,但docs除外。

最后一行与五个或更多字符长的文件夹中的所有内容匹配。

更新 当我正确理解问题后:

myjob:
  script: build myproject
  rules:
   - changes:
     - docs/**/*
     when: never
   - when: on_success

如果对docs进行了更改,则会跳过此作业,否则它将作为正常作业运行,并且如果前一阶段的所有作业都成功了,则将运行该作业。

旧答案 这样的事情应该起作用:

myjob:
  script: build myproject
  rules:
   - changes:
     - src/**/*
     when: on_success
   - changes:
     - docs/**/*
     when: never

从上到下评估规则。如果src目录中的任何文件都有更改,则作业将获得属性when: on_success。这是GitLab作业的默认设置,这意味着如果上一步的所有作业均已执行,则将执行此作业。

如果第一个规则不匹配,将评估第二个作业。如果docs文件夹有任何更改,则作业将获得属性when: never,并且该作业将永远不会执行。

第二条规则可以更改为:

- when: never

但是我想您的实际任务要比您的问题复杂一点,并且您可能需要整个规则。