jenkins一次构建两次触发job问题
具体内容详见: https://issues.jenkins-ci.org/browse/JENKINS-21464?focusedCommentId=250183&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-250183
jenkins中构建里面的内容:Multiple candidate revisions
I also observed similar behavior. When 'Branch Specifier' was not unique, then checkout actually triggered another build of the same job.
This was strange, because the job didn't have Poll SCM Build Trigger checked. Actually this job had none of the Build Trigger mechanisms checked and was intended to be scheduled only manually.
The first build was executed manually with Branch Specifier = branch123 and log contained:
> git rev-parse branch123^{commit} # timeout=10
> git rev-parse refs/remotes/origin/branch123^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with My_Build_Job_Name
At that point a new unwanted build of this job was scheduled and waited in the Build Queue. When it started, the log contained:
Started by an SCM change
Building on master
The initial problem was non-unique Branch Specifier. I will fix it by using the longer remote ref refs/remotes/origin/branch123.
Mark Waite Could you consider changing the plugin to fail instead of triggering a new build in case non-unique revision is required to be checked out? At least in case when job does not allow Poll SCM Build Trigger.
What was the job for and how this issue happened?
The job uses Jenkins job SCM Git to checkout a branch (say branch123) with Clean before checkout. Then in Execute shell build step it modifies some files in the checkout (pom.xmls), commits, tags (as tag123-rc1) and pushes. The local branch123 HEAD points to the same commit as tag123-rc1. So far so good.
Then developers push more changes into branch123 and we want to release as tag123-rc2. So we run our job again. Git-plugin does cleanup on the repository in the job workspace, but this leaves the local branch123 intact, so it still points to the same revision as tag123-rc1. (so other viable solution would be to wipe workspace between builds)
Plugin then fetches refs from remote and refs/remotes/origin/branch123 now points to the new commits made by developers. Git-plugin compares revision of both references that contain substring branch123. Since the remote branch moved, both refs now point to different revisions. Git-plugin reacts to this with 'Multiple candidate revisions' message and triggers a new build.
In case both refs point to the same revision (no changes were made on the branch between two builds), then Git-plugin checks out the single revision and no build is triggered.
> git config remote.origin.url ssh://XXX.git # timeout=10
Cleaning workspace
> git rev-parse --verify HEAD # timeout=10
Resetting working tree
> git reset --hard # timeout=10
> git clean -fdx # timeout=10
> git submodule foreach --recursive git reset --hard # timeout=10
> git submodule foreach --recursive git clean -fdx # timeout=10
Fetching upstream changes from ssh://XXX.git
> git --version # timeout=10
using GIT_SSH to set credentials XXX
> git fetch --tags --progress ssh://XXX.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse branch123^{commit} # timeout=10
> git rev-parse refs/remotes/origin/branch123^{commit} # timeout=10
Multiple candidate revisions
Scheduling another build to catch up with My_Build_Job_Name
jenkins一次构建两次触发job问题的更多相关文章
- Jenkins: 使用groovy + job-dsl 创建并触发job
Jenkins: 使用groovy + job-dsl 创建并触发job 背景: 我们的 Automation 测试脚本需要在10个不同语言的机器上跑,本地化测试产品. 我们用Jenkins启动测试执 ...
- jenkins+maven+junit构建自动化测试,整合junit xml生成直观的测试报告[留存]
在自动化测试过程中,测试报告最能直观的体现测试的价值,之前一直使用maven+junit来构建我的自动化测试,但这样有几个缺点,一是,不能定时构建自动化任务(也许是我没有找到maven有没有提供这样的 ...
- Jenkins配置自动化构建
转自: http://blog.sina.com.cn/s/articlelist_3053349671_14_1.html Jenkins 简介和安装(一) (2014-12-02 21:18:13 ...
- 使用jenkins SonarQube gitlab 构建自动化发布系统
目前持续集成的生态越来越完善,工具也有很多,开源的或商业的.如: 最最流行的,也是使用最多的 Jenkins 有着持续集成DNA的ThoughtWorks GO.理念:"Deployment ...
- 使用Jenkins+gitlab自动化构建时排除分支
我们的目的是gitlab上的代码有变动时会自动向Jenkins发送web钩子请求,触发指定的动作: 但默认情况下,所有分支(如测试环境和预生产)的代码有变动时都会触发,此时可以在Jenkins的项目设 ...
- Ubuntu系统下Jenkins的git构建基本方法
上一博文讲到了本地脚本的构建方法. 本篇博文主要讲“Ubuntu系统下Jenkins的git构建基本方法”. 点击保存后即可完成简单的构建. 构建触发器 这个触发器是决定什么时候触发构建,可以设置为定 ...
- Jenkins的参数化构建
一.参数化构建日志 1.查看效果 有时候开发需要查看服务器日志,传统的是需要运维登录服务器拉取开发所需要的服务日志,这么做的弊端是:1.如果日志比较大,拉取耗费时间.占用服务器资源.2.占用运维不必要 ...
- OpenShift应用镜像构建(3) - Jenkins的流水线构建
Jenkins方式构建的定位是使用专门的CICD平台. 既支持把JenKins作为一个Pod部署到openshift内部,也支持部署在Openshift集群外部,操作上的区别是 openshift自己 ...
- Jenkins:参数化构建:分支|模块|回滚|打印日志
@ 目录 多分支 安装Git Parameter Plug-In 配置参数 选择构建分支 分模块 前提 分模块build 参数配置 分模块shell脚本 mvn 的基本用法 分模块运行 Jenkins ...
随机推荐
- 一个动态链接的问题,dlsym后符号调用主函数的符号报告无法找到
先看看状况(小心头疼) client.c 编译得到 client:在 client 的 main 中用 dlopen( "./liba.so", RTLD_LAZY|RTLD_GL ...
- Java中文件和I/O
以下内容引用自http://wiki.jikexueyuan.com/project/java/files-and-io.html: 在Java中java.io包含的每一个类几乎都要进行输入和输出操作 ...
- [Angular] Communicate Between Components Using Angular Dependency Injection
Allow more than one child component of the same type. Allow child components to be placed within the ...
- Android进程绝杀技--forceStop(转)
一.概述 1.1 引言 话说Android开源系统拥有着App不计其数,百家争鸣,都想在这“大争之世”寻得系统存活的一席之地.然则系统资源有限,如若都割据为王,再强劲的CPU也会忙不过来,再庞大的内存 ...
- MVC在View中页面跳转
在做人事系统的时候须要用到页面跳转,那么页面跳转究竟用什么方法好呢?依照曾经的思路,我就会这么写. <span style="font-size:18px;">wind ...
- android <application> 开发文档翻译
由于本人英文能力实在有限,不足之初敬请谅解 本博客仅仅要没有注明"转",那么均为原创.转贴请注明本博客链接链接 <application>语法: <appl ...
- C++对象模型——解构语意学(第五章)
5.4 对象的效率 (Object Efficiency) 在下面的效率測试中,对象构造和拷贝所须要的成本是以Point3d class声明为基准,从简单形式逐渐到复杂形式,包含Plain Ol ...
- 欧莱雅浅谈OC中方法调用的顺序中的Category
OC特有的分类Category,依赖于类.它可以在不改变原来的类内容的基础上,为类增加一些方法.分类的使用注意: (1)分类只能增加方法,不能增加成员变量: (2)在分类方法的实现中可以访问原来类中的 ...
- USING REFLECTION
In this section, you take a closer look at the System.Type class, which enables you to access inform ...
- Buildroot构建指南--快速上手与实用技巧【转】
本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52335634 Buildroot官方全英文使用手册的链接是https://buildro ...