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

Yaml GitLab CI/CD构建/管道仅触发一次,而不是两次,yaml,gitlab,pipeline,gitlab-ci,continuous-deployment,Yaml,Gitlab,Pipeline,Gitlab Ci,Continuous Deployment,我正在使用GitLab CI/CD编辑:v10.2.2 我的项目中有两个分支:开发和测试 两者都受到保护 devel是默认的分支 工作流程是:我推动devel,然后通过合并请求将devel合并到测试中 这是我的.gitlab-ci.yml v1: 当我在devel上推送修改时,脚本将运行并生成。太好了 现在,分支测试也是如此,下面是我的.gitlab-ci.yml v2: 当我直接在测试上推动修改时,使用测试分支也会发生同样的事情。但是这里的管道是关于测试和只关于测试的,所以当我推动devel时

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

我的项目中有两个分支:开发和测试

两者都受到保护

devel是默认的分支

工作流程是:我推动devel,然后通过合并请求将devel合并到测试中

这是我的.gitlab-ci.yml v1:

当我在devel上推送修改时,脚本将运行并生成。太好了

现在,分支测试也是如此,下面是我的.gitlab-ci.yml v2:

当我直接在测试上推动修改时,使用测试分支也会发生同样的事情。但是这里的管道是关于测试和只关于测试的,所以当我推动devel时,只会触发一次,然后在测试时合并,这是完美的

现在是.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管道应该在推送之后立即运行,然后测试管道应该在接受合并请求之后立即运行

而是发生了这样的事情:推送之后只会触发devel管道。在我的合并请求之后,将永远不会触发测试管道

我想我遗漏了一些关于GitLab如何工作的信息,但尽管我做了研究,我还是搞不清楚到底是什么

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

声明:


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

您是否检查过gitlab ci文件没有被MR更改?最佳实践是对管道有一个定义,并根据分支在其定义上进行区分,就像使用“only”关键字一样。此外,如果您与MR合作,“测试”管道将触发两次。一次是在创建MR时,第二次是在实际合并代码时。就是这样,非常感谢!不过我读了好几遍这一页。我想我读了太多的文档,有时记不住每一个细节。
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
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
Each job must have a unique name, ...