nan*_*984 3 continuous-integration pipeline gitlab gitlab-ci
我已经为我的项目配置了 gitlab ci/cd 管道。所以我使用了基本模板,它有两个阶段,构建和打包:
构建阶段构建项目并创建一个 jar 文件。打包阶段创建一个镜像并将其存储在容器注册表中。.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
Run Code Online (Sandbox Code Playgroud)
我不想触发所有每个分支的构建。我只想在开发和主分支中触发。
无论如何,我们是否可以在项目级别做到这一点,而不是only在每个阶段添加?
限制创建作业的唯一方法是only/except在 .gitlab-ci.yml 文件中使用。
为了不必编写太多文本,您可以使用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
Run Code Online (Sandbox Code Playgroud)
(我没有测试过这个文件,如果有问题请告诉我。)
小智 6
您应该使用 $CI_COMMIT_BRANCH == "<your_branch_name>" 指定目标分支。
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..
Run Code Online (Sandbox Code Playgroud)
我希望上面的例子可以帮助任何人!
这里还有这些类型问题的文档。
| 归档时间: |
|
| 查看次数: |
15825 次 |
| 最近记录: |