我有一个单一存储库,它包含许多需要单独部署的东西。
现在,我想知道是否有可能运行一个任务,只有当一个标签被推送和是否在一个特定的目录有变化。
我试过以下几种方法:
.components:
only:
changes:
- source/packages/components/**/*
except:
- branches.components:
only:
refs:
- tags
changes:
- source/packages/components/**/*.components:
rules:
- if: $CI_COMMIT_TAG
changes:
- source/packages/components/**/*.components:
rules:
- if: $CI_COMMIT_TAG
changes:
- source/packages/components/**/*
when: always
- when: never这是我使用的..gitlab ci.yml文件之一。然后,每一个看起来都一样,除了一些东西。
.components:
rules:
- if: '$CI_COMMIT_TAG'
changes:
- source/packages/components/**/*
build_componets:
stage: build
extends: .components
needs: []
script:
- echo "Compiling the components code..."
test_componets:
stage: test
extends: .components
needs: ["build_componets"]
script:
- echo "Compiling the components code..."
deploy_componets:
stage: deploy
extends: .components
needs: ["test_componets"]
script:
- echo "Compiling the components code..."当前的行为:每个管道都运行.不管这种配置如何,但只有在我推送标记时才会这样做。
所有这些文件都导入到项目根目录下的主文件中。
stages:
- build
- test
- deploy
include:
- source/packages/business-logic/.gitlab-ci.yml
- source/packages/components/.gitlab-ci.yml
- source/applications/native/.gitlab-ci.yml
- source/services/user-service/.gitlab-ci.yml合并的YAML看起来是这样的。
---
".business-logic":
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/business-logic/**/*
when: always
- when: never
build_business_logic:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/business-logic/**/*
when: always
- when: never
stage: build
extends: ".business-logic"
needs: []
script:
- yarn install
- yarn workspace @zeou/business-logic build
test_business_logic:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/business-logic/**/*
when: always
- when: never
stage: test
extends: ".business-logic"
needs:
- build_business_logic
script:
- echo "Compiling the business-logics code..."
deploy_business_logic:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/business-logic/**/*
when: always
- when: never
stage: deploy
extends: ".business-logic"
needs:
- test_business_logic
script:
- echo "Compiling the business-logics code..."
".components":
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/components/**/*
when: always
- when: never
build_components:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/components/**/*
when: always
- when: never
stage: build
extends: ".components"
needs: []
script:
- echo "Compiling the components code..."
test_components:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/components/**/*
when: always
- when: never
stage: test
extends: ".components"
needs:
- build_components
script:
- echo "Compiling the components code..."
deploy_components:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/packages/components/**/*
when: always
- when: never
stage: deploy
extends: ".components"
script:
- echo "Compiling the components code..."
stages:
- ".pre"
- build
- test
- deploy
- ".post"
before_script: 有人能告诉我我做错了什么吗?
谢谢100次:D
发布于 2022-04-15 18:25:47
在本例中,使用rules:将changes:子句与if:规则组合起来,以检查是否存在标记。
myjob:
rules:
- if: "$CI_COMMIT_TAG"
changes:
- source/services/user-service/**/*
# ...https://stackoverflow.com/questions/71886880
复制相似问题