GitLab CI运行作业仅引用和更改

时间:2020-03-23 13:25:30

标签: continuous-integration gitlab yaml

我只想为merge_requests引用运行作业,并且对指定文件进行更改时,according to official doc我要在.gitlab-ci.yml中创建此作业:

merge-request-test:
  <<: *some_anchor
  only:
    refs:
      - merge_requests
    changes:
      - "*.py"
      - "**/*.py"
      - postman/some-file.json

但是即使我更改任何其他文件,该作业也将开始。

我了解到,GitLab CI对ORrefs部分应用了changes规则:

在以下示例中,如果任何 以下是正确的:

管道运行为主节点。 README.md有所更改 仓库根目录中的文件。

test:   
    script: npm run test
    except:
      refs:
        - master
      changes:
        - "README.md"  

我只想在更改指定文件时针对MR 启动此作业。 我如何实现这种行为?

如果删除refs部分,则仅在文件更改时有效,但是官方文档不建议这样做,因为我想在管道中使用它:

如果仅使用:更改仅允许合并请求,如果 管道成功,如果不这样做,可能会导致不良行为 也只能使用:merge_requests。

1 个答案:

答案 0 :(得分:0)

现在我有这个可行的解决方案:

merge-request-deploy:
  <<: *deploy-app
  rules:
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"'
      changes:
      - "*.py"
      - "**/*.py"
      - postman/some-file.json
      when: always
  • if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"'-给我布朗克先生
  • changes-给我更改的文件

Rule的部分适用于AND规则。