首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gitlab CI/CD只在标签推送时运行管道,并且只有当特定文件更改时才运行管道

Gitlab CI/CD只在标签推送时运行管道,并且只有当特定文件更改时才运行管道
EN

Stack Overflow用户
提问于 2022-04-15 17:07:02
回答 1查看 1.3K关注 0票数 2

我有一个单一存储库,它包含许多需要单独部署的东西。

现在,我想知道是否有可能运行一个任务,只有当一个标签被推送和是否在一个特定的目录有变化。

我试过以下几种方法:

代码语言:javascript
复制
.components:
  only:
    changes:
      - source/packages/components/**/*
  except:
    - branches
代码语言:javascript
复制
.components:
  only:
    refs:
      - tags
    changes:
      - source/packages/components/**/*
代码语言:javascript
复制
.components:
  rules:
    - if: $CI_COMMIT_TAG
    changes:
      - source/packages/components/**/*
代码语言:javascript
复制
.components:
  rules:
    - if: $CI_COMMIT_TAG
      changes:
        - source/packages/components/**/*
      when: always
    - when: never

这是我使用的..gitlab ci.yml文件之一。然后,每一个看起来都一样,除了一些东西。

代码语言:javascript
复制
.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..."

当前的行为:每个管道都运行.不管这种配置如何,但只有在我推送标记时才会这样做。

所有这些文件都导入到项目根目录下的主文件中。

代码语言:javascript
复制
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看起来是这样的。

代码语言:javascript
复制
---
".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

EN

回答 1

Stack Overflow用户

发布于 2022-04-15 18:25:47

在本例中,使用rules:changes:子句与if:规则组合起来,以检查是否存在标记。

代码语言:javascript
复制
myjob:
  rules:
    - if: "$CI_COMMIT_TAG"
      changes:
        - source/services/user-service/**/*
   # ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71886880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档