Gitlab CI 如何使用规则语法忽略目录?

Shi*_*r G 8 continuous-integration gitlab gitlab-ci

我能够使用以下语法忽略目录、文件更改。

build:
  script: npm run build
  except:
    changes:
      - "*.md"
      - "src/**/*.ts"
Run Code Online (Sandbox Code Playgroud)

使用此配置build作业将运行,除了 git 更改仅包含*.md扩展文件或*.ts目录中的src文件。他们被忽视了。

但后来他们弃用了 this only:changes,except:changes语法并警告改用rules语法。不幸的是,我似乎无法找到如何使用这种新语法忽略目录、文件更改。

Ami*_*hah 23

根据的文档rules: changes,似乎when: never必须与语法一起使用rules: changes。就像下面这样:

build:
  script: npm run build
  rules:
    - changes:
      - "*.md"
      - "src/**/*.ts"
      when: never

    - when: always
Run Code Online (Sandbox Code Playgroud)

如果存储库中更改的路径与上述正则表达式匹配,则该作业将不会添加到任何管道中。在其他情况下,作业始终由管道运行。

  • 您有解决问题的办法吗?当我的合并请求仅包含“.md”更改时,我不想运行构建,但是当它包含“.md”更改+它应该构建的一些其他更改时。 (9认同)
  • 对不起!我编辑了我的答案。我忘记了“何时:总是”这句话。 (3认同)
  • 非常感谢您的编辑。看起来它正在按预期工作。从来不知道可能有多个“when”条件。我应该注意到,还有另一个作业应该只运行这个“src”目录更改。当提交更改仅包含该目录时,该作业将按预期工作。但是,当提交更改包括对根目录和 src 目录的更改时,此“构建”作业不会运行。不幸的是,我认为当我使用旧语法时也是一样的。如果您认为这个问题可以解决,请告诉我。 (2认同)

小智 13

令人惊讶的是,目前看来这是不可能的——无论是与except/only还是与rules。这似乎是此请求功能的“最佳”开放问题:https://gitlab.com/gitlab-org/gitlab/-/issues/198688

我想您只能在检测到相关更改时反转逻辑并启用构建(示例改编自https://docs.gitlab.com/ee/ci/yaml/#ruleschanges):

job:
  rules:
    - changes:
        - relevant/path/file
      when: on_success
    - changes:
        - path/to/config/file
      when: never
    - when: on_success
Run Code Online (Sandbox Code Playgroud)