Continuous integration 仅适用于特定分支的gitlab触发器管道

Continuous integration 仅适用于特定分支的gitlab触发器管道,continuous-integration,gitlab,gitlab-ci,pipeline,Continuous Integration,Gitlab,Gitlab Ci,Pipeline,我已经为我的项目配置了gitlab ci/cd管道。所以我使用了基本模板,它有两个阶段,构建和打包。BuildStage构建项目并创建jar文件,PackageStage创建映像并将其存储在容器注册表中。和.gitlab-ci.yml文件已创建。下面是文件 image: docker:latest services: - docker:dind stages: - build - package build: image: gradle:5.6.1-jdk11 stage

我已经为我的项目配置了gitlab ci/cd管道。所以我使用了基本模板,它有两个阶段,构建和打包。BuildStage构建项目并创建jar文件,PackageStage创建映像并将其存储在容器注册表中。和.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

当我们想要添加新的功能时,我们显然会创建新的分支,因为这个文件也存在于新的分支中,所以会触发构建。但是我不想触发所有分支的构建。我只想触发开发和掌握。无论如何,我们可以在项目级别这样做,而不是在每个阶段添加

限制创建作业时间的唯一方法是在.gitlab-ci.yml文件中使用
仅/除

为了不必写那么多文本,您可以使用
extends
,有时还可以使用yaml锚。更多信息请点击此处:

在这里:

如何使用
扩展
的示例:

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

(我还没有测试这个文件,请告诉我它是否有问题。)

限制创建作业时间的唯一方法是在.gitlab-ci.yml文件中使用
only/except

为了不必写那么多文本,您可以使用
extends
,有时还可以使用yaml锚。更多信息请点击此处:

在这里:

如何使用
扩展
的示例:

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

(我尚未测试此文件,请告诉我是否有问题。)

您应该使用via$CI\u COMMIT\u branch==”指定目标分支

规则:
-如果:“$CI_管道_源==”推送“&&$CI_提交_分支==”主“'
关于这个项目的一些事情。。
-如果:“$CI_PIPELINE_SOURCE==”web“&&&$CI_COMMIT_BRANCH==”开发“'
关于这个项目的一些事情。。
我希望上面的例子可以帮助任何人


还有这些类型问题的文档。

您应该使用via$CI\u COMMIT\u branch==”指定目标分支

规则:
-如果:“$CI_管道_源==”推送“&&$CI_提交_分支==”主“'
关于这个项目的一些事情。。
-如果:“$CI_PIPELINE_SOURCE==”web“&&&$CI_COMMIT_BRANCH==”开发“'
关于这个项目的一些事情。。
我希望上面的例子可以帮助任何人


还有这些类型问题的文档。

此脚本实际上不起作用。。。所以我只能在这两个阶段加上。它在我当地的gitlan runner中起了作用,这就是我的答案。但当构建从提交中被触发时,它失败了,因为yaml无效,我甚至在gitlab.com上与lint进行了检查,它也说了同样的话。谢谢你让我知道!我现在自己试过了,但是因为缺少一个冒号,我得到了一个yaml错误。我在给出的代码示例中修复了它。添加冒号后是否有效?此脚本实际上不起作用。。。所以我只能在这两个阶段加上。它在我当地的gitlan runner中起了作用,这就是我的答案。但当构建从提交中被触发时,它失败了,因为yaml无效,我甚至在gitlab.com上与lint进行了检查,它也说了同样的话。谢谢你让我知道!我现在自己试过了,但是因为缺少一个冒号,我得到了一个yaml错误。我在给出的代码示例中修复了它。添加冒号后是否有效?