【问题标题】:GitLab CI run Job only refs AND changesGitLab CI 运行作业仅参考和更改
【发布时间】:2020-03-23 13:25:30
【问题描述】:

我只想为merge_requests refs 运行作业,并且当指定文件发生更改时,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 将 OR 规则应用于 refschanges 部分:

在下面的示例中,当任何 以下是正确的:

管道为主服务器运行。 README.md 有一些变化 存储库根目录中的文件。

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

我只想在更改指定文件时为 MR 启动此作业。 我怎样才能实现这种行为?

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

If only:changes with only allow merge requests to be merge if 管道成功,如果您不这样做,可能会导致不良行为 也只能使用:merge_requests。

【问题讨论】:

  • 你检查ruleskeyword了吗?
  • @NicolasPepinster CI Lint 说,我不能将 rules 关键字与 only 关键字和 when 关键字一起使用。
  • 是的,你是对的。我看到一个 issue 打开,其中的行为似乎与您的问题相似。
  • 文档明确指出:With only, individual keys are logically joined by an AND 不是 OR。您能否举一个您更改的文件与定义的 glob 不匹配的示例?看来你的配置没问题。
  • @makozaki 我更改了 README.md 并开始了作业

标签: continuous-integration gitlab yaml


【解决方案1】:

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

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/ &amp;&amp; $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"' - 给我布兰克先生
  • changes - 给我更改的文件

规则的部分适用于 AND 规则。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 2018-05-19
    • 1970-01-01
    • 2022-08-20
    • 2021-03-08
    • 1970-01-01
    • 2020-05-17
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多