0

我有一个 monorepo 设置,我想在特定文件夹更改时触发“子”管道。为了让事情井井有条,我想让这些子文件夹负责他们自己的 CI 管道并将他们的 CI 文件存储在其中,然后将include它们存储在根 .gitlab-ci.yml 文件中。

root/
.gitlab-ci.yml
   foo/foo-ci.yml
   bar/bar-ci.yml

是否可以将include关键字与结合起来only:changes:- foo/**/*only:我是在子 CI 文件中还是在根 CI 文件中设置标志?

我已经孤立地找到了这些功能的示例,我只是不确定如何在不在根目录中创建大量 CI 文件的情况下将它们组合起来。

4

1 回答 1

0

对于特定工作,您只能拥有关键字。所以它将在子 CI 文件中写入实际过程,而不是在调用程序文件中

所以下面将是我的子管道脚本,只有在 src 文件夹上发生更新时它才会运行

test_pylint:
  stage: test
  image: python:3.7
  allow_failure: true
  before_script:
    - pip install pylint pylint-junit
    - pip install -e .
    - python -V
  script:
    - pylint --output-format=pylint_junit.JUnitReporter src/ | tee rspec.xml
  artifacts:
    paths:
      - rspec.xml
    reports:
      junit: rspec.xml
    when: always
    expire_in: 1 week
  rules:
  - if: '($CI_PIPELINE_SOURCE == "merge_request_event") && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop")'
    when: always
    changes:
      - src/*

下面是根 .gitlab-ci.yml 文件

stages:
  - test
include:
  - project: test
    file: /job/py-lint.gitlab-ci.yml

所以所有唯一的条件都是子 CI 文件的一部分

于 2021-03-12T14:02:22.070 回答