GitLab CI / CD构建/管道只触发一次而不是两次

时间:2017-12-11 18:59:56

标签: yaml gitlab pipeline gitlab-ci continuous-deployment

我正在使用GitLab CI / CD(编辑:v10.2.2)。

我的项目中有2个分支:develtesting

两者都受到保护。

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时,创建/接受从develtesting的合并请求,devel管道应该在我推送后立即运行,然后testing管道应该在我的合并请求接受后立即运行。

而不是这里发生了什么:推送后只触发devel管道。我的合并请求后永远不会触发testing管道。

我认为我错过了关于GitLab如何运作的一些内容但我无法弄清楚尽管我的研究是什么。

任何帮助将不胜感激。非常感谢你。

1 个答案:

答案 0 :(得分:1)

https://docs.gitlab.com/ee/ci/yaml/#jobs州:

Each job must have a unique name, ...

您有两个名称相同的作业docker_build。给他们一个不同的名字。