8

我们有 10-15 个 git 分支,但我们只想在其中 2 个(“master”和“beta1”)上触发 Jenkins 作业。我正在使用 Jenkins 的Git 插件,并在“要构建的分支”部分中指定“master”和“beta1”。我还在“repo 的本地子目录(可选)”字段中指定了 ${GIT_BRANCH}。

我只想在主分支上出现签入时才在主分支上触发 Jenkins 作业。

我只想在 beta1 分支上出现签入时才在 beta1 分支上触发 Jenkins 作业。

我希望这两个分支都由同一个 Jenkins 作业控制,以便内部版本号在两个分支之间是唯一的(如果它们在两个不同的作业中,内部版本号可能是相同的)。

目前,它似乎正在触发 beta1 分支上的工作,以便从 master 分支签入。从日志中(注意:下面日志第一行中报告的更改来自主分支):

Started by remote host (IP) with note: Triggered by push of revision e4391d0049ff: "blah" to (URL) by (USER)
Building in workspace /var/lib/jenkins/jobs/Orca/workspace
Checkout:workspace / /var/lib/jenkins/jobs/Orca/workspace - hudson.remoting.LocalChannel@3ae1a582
Using strategy: Default
Last Built Revision: Revision 7e2aae6c752a16516d9f6ac48944492a4e3596d4 (origin/master)
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository (SSH)
git --version
git version 1.7.4.1
Fetching upstream changes from origin
Cleaning workspace
Resetting working tree
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/beta1
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/(BLAH)
Seen branch in repository origin/master
Seen branch in repository origin/(BLAH)
Seen 22 remote branches
Multiple candidate revisions
Scheduling another build to catch up with Orca
Commencing build of Revision eaad42c836a87672c546d61f310cc31bf03ecb97 (origin/beta1)
Checking out Revision eaad42c836a87672c546d61f310cc31bf03ecb97 (origin/beta1)
4

3 回答 3

3

如果你这样做:

在“要构建的分支”部分中同时指定“master”和“beta1”

并且您正在基于轮询 Git 触发构建,那么 Jenkins 将在发现这些分支中的任何一个发生更改时触发该作业。这是预期的功能,据我所知,您正在寻找的配置不受支持。

我可以提出两种可能的解决方案:

  1. 使用两个单独的 Jenkins 作业。我们就是这样做的,如果我们需要保持内部版本号离散,那么我们只需将内部版本号分开一个很大的数字。例如,您可以在其中一个作业上将下一个内部版本号设置为 300,000。

  2. 创建两个作业,一个跟踪每个分支但实际上不构建任何东西。使用参数化触发器插件通过 Git 分支参数触发相同的下游作业。

于 2013-10-28T20:01:25.047 回答
0

另一种方法是使用git的提交后挂钩。这也可能使您比轮询更快地开始构建。


对 Jenkins 进行以下更改:

  1. 确保您已安装参数化构建插件
  2. 将相关作业配置为参数化。考虑将此参数命名为“BRANCH_TO_BULD”。考虑默认值“master”
  3. 将源代码管理设置为“无”
  4. 禁用轮询
  5. 在第一个构建步骤中,执行以下 shell 命令:

cd /path/to/your/workspace/SpecialJob 
git reset --hard 
git clean -f -d 
git fetch origin 
git checkout $BRANCH_TO_BUILD  



对 Git 进行以下更改:

  1. 首先导航到原始git 存储库根目录中的 hooks 目录
  2. 将 post-receive.sample 重命名为 post-receive
  3. 编辑文件的内容以包含以下内容(更改 MyJenkinsBox 和 MySpecialJob):

echo  
# if you want to send some fancy text to the committer's console output.
echo Post Receive Hook  
echo  
while read oldrev newrev refname  
do  
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)  
    # only build for master  
    if [ "master" == "$branch" || "beta1" == "$branch" ]; then  
        # more valuable feedback to the committer's console output  
        echo Building MySpecialJob job on Jenkins. Branch = $branch  
        echo  
        curl -s -X POST http://MyJenkinsBox:8080/job/MySpecialJob/buildWithParameters?BRANCH_TO_BUILD=$branch  
        echo  
    fi
done
于 2014-05-09T10:26:43.983 回答
0

相当老的帖子,但如果仍然有人在寻找这个问题,这里是如何解决它。

https://issues.jenkins-ci.org/browse/JENKINS-22794

最近 Jenkins 网站上关于如何在 EC2 上解决它的评论很少,但我自己没有在 AWS 上测试过这些评论,因此有一些领域需要探索它是否适用于您各自的场景。

于 2019-08-19T04:39:52.633 回答