我正在使用 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 工作原理的信息,但尽管我进行了研究,我还是无法弄清楚是什么。
任何帮助将不胜感激。非常感谢。
https://docs.gitlab.com/ee/ci/jobs/ 指出:
Each job must have a unique name, ...
您有两个同名的工作
docker_build
。只需给它们起一个不同的名字即可。