gpt4 book ai didi

gitlab - 规则 :changes always evaluates as true in MR pipeline

转载 作者:行者123 更新时间:2023-12-05 05:50:36 25 4
gpt4 key购买 nike

我有一个 monorepo,其中每个包都应该构建为 docker 镜像。

我为每个触发子管道的包创建了一个触发作业。

在 MR 中,我的更改规则被忽略,所有子管道都被触发。

.gitlab-ci.yml

---
workflow:
rules:
- if: $CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH

trigger-package-a:
stage: build
trigger:
include: .gitlab/ci/packages/package-gitlab-ci.yml
strategy: depend
rules:
- changes:
- "packages/package-a/**/*"
variables:
PACKAGE: package-a

trigger-package-b:
stage: build
trigger:
include: .gitlab/ci/packages/package-gitlab-ci.yml
strategy: depend
rules:
- changes:
- "packages/package-b/**/*"
variables:
PACKAGE: package-b

done_job:
stage: deploy
script:
- "echo DONE"
- "cat config.json"
stages:
- build
- deploy

package-gitlab-ci.yml

workflow:
rules:
- if: $CI_MERGE_REQUEST_ID
- changes:
- "packages/${PACKAGE}/**/*"

stages:
- bootstrap
- validate

cache:
key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
paths:
- packages/${PACKAGE}/node_modules/
policy: pull

install-package:
stage: bootstrap
script:
- echo ${PACKAGE}}
- echo '{"package":${PACKAGE}}' > config.json
- "cd packages/${PACKAGE}/"
- yarn install --frozen-lockfile
artifacts:
paths:
- config.json
cache:
key: "${PACKAGE}_${CI_COMMIT_REF_SLUG}"
paths:
- packages/${PACKAGE}/node_modules/
policy: pull-push

lint-package:
script:
- yarn lint
stage: validate
needs: [install-package]
before_script:
- "cd packages/${PACKAGE}/"

test-package:
stage: validate
needs: [lint-package]
before_script:
- "echo working on ${PACKAGE}"
- "cd packages/${PACKAGE}/"
rules:
- if: $CI_MERGE_REQUEST_ID
script:
- yarn test

最佳答案

看起来您的下游管道正在定义一个具有 2 个独立规则的工作流:ifchanges。如果满足 if 中的第一个条件,即如果它是 MR 管道,这可能会导致包含作业。尝试删除 changes 前面的破折号,如示例中的 here , 将其视为单个规则:

workflow:
rules:
- if: $CI_MERGE_REQUEST_ID
changes:
- "packages/${PACKAGE}/**/*"

编辑:最近的 issue声明 rules:changes 无法按预期使用 trigger。因此,您实际上可能需要从上游管道中删除更改,并在下游管道中解决这个问题。

旁注,与您的问题没有直接关系:GitLab Docs提供一个工作流模板来运行分支或 MR 管道而不创建重复项。如果有帮助,您可以在上游管道中使用它:

workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'

关于gitlab - 规则 :changes always evaluates as true in MR pipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70498372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com