我已经为我的项目配置了gitlab ci / cd管道。因此,我使用了具有两个阶段的基础模板:构建和打包。 Build阶段构建项目并创建jar文件,package阶段创建映像并将其存储在容器注册表中。并已创建.gitlab-ci.yml文件。下面是文件
image: docker:latest
services:
- docker:dind
stages:
- build
- package
build:
image: gradle:5.6.1-jdk11
stage: build
script:
- gradle clean build -x test
artifacts:
paths:
- build/libs/*.jar
package:
stage: package
script:
- docker build -t registry.gitlab.com/my-project/sample .
- docker login -u $CI_DOCKER_USERNAME -p $CI_DOCKER_PASSWORD registry.gitlab.com
- docker push rregistry.gitlab.com/my-project/sample
当我们要添加新功能时,我们显然会创建新分支,并且由于该文件也存在于新分支中,因此会触发生成。但是我不想触发所有分支的构建。我只想触发开发和掌握。无论如何,我们可以在项目级别做到这一点,而不是在每个阶段都添加only
答案 0 :(得分:1)
限制创建作业的唯一方法是使用.gitlab-ci.yml文件中的only/except
。
不必写太多文本,可以使用extends
,有时也可以使用yaml锚。这里有更多信息:
https://docs.gitlab.com/ee/ci/yaml/#extends
在这里:
https://docs.gitlab.com/ee/ci/yaml/#anchors
如何使用extends
的示例:
image: docker:latest
services:
- docker:dind
.only-master-and-develop:
only:
- master
- development
stages:
- build
- package
build:
extends: .only-master-and-develop
image: gradle:5.6.1-jdk11
stage: build
script:
- gradle clean build -x test
artifacts:
paths:
- build/libs/*.jar
package:
extends: .only-master-and-develop
stage: package
script:
- docker build -t registry.gitlab.com/my-project/sample .
- docker login -u $CI_DOCKER_USERNAME -p $CI_DOCKER_PASSWORD registry.gitlab.com
- docker push rregistry.gitlab.com/my-project/sample
(我尚未测试过该文件,请告诉我它是否有问题。)
答案 1 :(得分:1)
您应该使用 via $CI_COMMIT_BRANCH == "
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
something regarding the project..
- if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "development"'
something regarding the project..
我希望上面的例子可以帮助任何人!
还有 here 是这些类型问题的文档。