我正在使用GitLab CI / CD(编辑:v10.2.2)。
我的项目中有2个分支:devel
和testing
两者都受到保护。
devel
是默认分支。
工作流程是:我推送devel
,然后通过合并请求将devel
合并到testing
。
这是我的.gitlab-ci.yml
v1:
docker_build:
stage: build
only:
- devel
script:
- docker build -t gitlab.mydomain.com:4567/myproject/app:debug1 .
- docker login -u="$DOCKER_LOGIN" -p="$DOCKER_PWD" gitlab.mydomain.com:4567
- docker push gitlab.mydomain.com:4567/myproject/app:debug1
当我在devel
上推送修改时,会运行脚本并进行构建。完美。
现在与分支testing
相同,这是我的.gitlab-ci.yml
v2:
docker_build:
stage: build
only:
- testing
script:
- docker build -t gitlab.mydomain.com:4567/myproject/app:debug2 .
- docker login -u="$DOCKER_LOGIN" -p="$DOCKER_PWD" gitlab.mydomain.com:4567
- docker push gitlab.mydomain.com:4567/myproject/app:debug2
当我直接在testing
上推送修改时,使用testing
分支也会发生同样的事情。 但是,当我按下testing
,然后合并testing
时,也会触发devel
上的导管(仅testing
上的导管,因此只触发一次)很完美。
现在.gitlab-ci.yml
v3,这只是前两个版本的串联:
docker_build:
stage: build
only:
- devel
script:
- docker build -t gitlab.mydomain.com:4567/myproject/app:debug1 .
- docker login -u="$DOCKER_LOGIN" -p="$DOCKER_PWD" gitlab.mydomain.com:4567
- docker push gitlab.mydomain.com:4567/myproject/app:debug1
docker_build:
stage: build
only:
- testing
script:
- docker build -t gitlab.mydomain.com:4567/myproject/app:debug2 .
- docker login -u="$DOCKER_LOGIN" -p="$DOCKER_PWD" gitlab.mydomain.com:4567
- docker push gitlab.mydomain.com:4567/myproject/app:debug2
我的期望是:当我推送devel
时,创建/接受从devel
到testing
的合并请求,devel
管道应该在我推送后立即运行,然后testing
管道应该在我的合并请求接受后立即运行。
而不是这里发生了什么:推送后只触发devel
管道。我的合并请求后永远不会触发testing
管道。
我认为我错过了关于GitLab如何运作的一些内容但我无法弄清楚尽管我的研究是什么。
任何帮助将不胜感激。非常感谢你。
答案 0 :(得分:1)
https://docs.gitlab.com/ee/ci/yaml/#jobs州:
Each job must have a unique name, ...
您有两个名称相同的作业docker_build
。给他们一个不同的名字。