2011-04-25 88 views
171

我想为使用github的项目设置Jenkins-ci。我已经用适当的插件设置了jenkins。我希望詹金斯只有在项目中的某个人推动主人时才能运行构建脚本。到目前为止,我已经能够进行设置,以便任何时候任何人都可以触发构建,但这太宽泛了。我用git上的post-receive服务钩子完成了这个工作。我怎样才能让詹金斯配合git触发器推动主人?

我读过jenkins wiki和一些教程,但是这个特殊的细节已经失踪了......是否可以使用轮询?还是应该在git方面完成工作,以便在Master变更时git只触发jenkins?

感谢您的帮助!

+3

Jenkins,Kohsuke Kawaguchi的原作者描述了如何使用Git插件Git插件1.1.14从存储库执行推送通知。请参阅http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/ – GeraldScott 2012-01-27 13:09:04

回答

159

正如已经注意到他的评论gezzed,同时有(由http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/描述)一个很好的解决方案:

  • 的Jekins工作的Build触发设置为投票SCM,但做指定时间表

  • 创建一个GitHub的后收到触发通知URL

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely> 
    
  • 这将触发所有轮询指定的git仓库的构建。

  • 但是,轮询实际上会检查是否有任何内容被推送到使用的分支。

它很完美。

+0

作品像一个魅力,谢谢! – gucki 2012-07-06 08:42:33

+1

这对我很好,你可以使用相同的方法与本地gitorious安装:http://cweiske.de/tagebuch/gitorious-post-receive-hook-2.htm – 2013-11-18 20:04:53

+4

与Bitbucket的POST钩子(非詹金斯)以及。 要指定身份验证凭据,您可以使用http:// user:[email protected]/git/notifyCommit?url = ...作为URL。 – loevborg 2014-05-07 07:26:34

3

您需要指定分支。默认情况下,它监听任何内容。在这里看到这个帖子:

http://evgenyg.wordpress.com/2010/03/27/hudson-git-maven/

+0

我最近在工作中设置了Jenkins以从git一个指定的分支。工作正常。 +1 – 2011-04-26 11:13:48

+0

我也设置了该设置。我注意到的是,詹金斯被通知每一次推送给github,并对其做出反应,但只在分支主人发生变化时才运行构建步骤。所以我们得到了大量虚假的构建报告,声称“无变化”。你是否也在观察这种行为? – Ziggy 2011-04-26 18:18:31

+0

最初的问题是关于如何解决你的答案中配置的广义和不必要的触发器(当任何人按任何分支时触发)。如果您有5个jenkin作业具有相同的配置,除了第一个作业listen master分支,第二个devel分支,第三个featureX分支等等,当您只推送到FeatureX分支时,所有jenkins作业将被触发,导致工作超负荷与建设非常缓慢。 – geoom 2015-01-19 03:29:51

31

随着0.5版本,GitHub的插件詹金斯可以trigger a build when a change is pushed to GitHub

+23

@asveikau - 最初的问题是关于github。 – 2014-03-03 17:09:02

+0

这不是一个好的解决方案,因为无论推送哪个分支,它都会触发构建。 – Shannon 2017-04-05 17:00:39

+0

实际上,如果启用“Poll SCM”(无需调度),它看起来像服从git插件设置中的分支说明符。 – Shannon 2017-04-05 17:37:38

9

而是触发的建立远程,改变你的詹金斯项目配置,以触发通过轮询生成。詹金斯可以根据固定的内部或URL进行轮询。如果该分支没有更改,则后者是您想要跳过构建的内容。具体细节在documentation。本质上,您只需要检查“Poll SCM”选项,将时间表部分留空,并设置远程URL以打JENKINS_URL/job/name/polling。

如果你有一个安全的Jenkins环境是一个疑难杂症,那么/ polling URL需要验证。说明here有详细信息。例如,我有一个Github Post-Receive挂钩转到用户名:apiToken @ JENKIS_URL/job/name/polling。

4

与Git无关,但下面我将与Mercurial详细介绍Jenkins作业配置。可以帮助有类似问题的人。

  1. 安装URL触发插件
  2. 自己的工作配置页面,选择Poll SCM选项。将值设置为* * * * *
  3. 检查选项:[URLTrigger] - Poll with a URL
    现在你可以选择像修改日期的变化,URL内容等
  4. 在选项中,选择URL的内容变化的一些选项中,选择第一个选项 - Monitor change of content
  5. 保存更改。

现在,通过一些测试检查插件

看得出来,詹金斯工作现在通过检测SCM改变运行引发一些变化反复无常库。 由于mercurial更改而运行构建时,您将看到文本Started by an SCM change。否则,手动启动它的用户。

3

希望这有助于:http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html

这只是一个使用curl使用的git提供的混帐挂钩触发詹金斯工作的问题。
命令curl http://localhost:8080/job/someJob/build?delay=0sec可以运行Jenkins作业,其中someJob是Jenkins作业的名称。

搜索隐藏的.git文件夹中的“钩子”文件夹。将“post-commit.sample”文件重命名为“post-commit”。用记事本打开它,删除“:Nothing”行并将上面的命令粘贴到它。

就是这样。每当你做一个提交时,Git都会触发文件中定义的提交后命令。

+0

我在这里首先对你的评论感到困惑,因为我认为我必须将上面的url中的“工作”更改为工作名称。我也很困惑,因为当我在Jenkins中按下“New Item”时,我建立了一个“Project”不是工作,所以当你引用上面的“someJob”时,我不知道那是我的项目名称。 我终于想出了我需要的url:http:// localhost:8078/job/codecept%20tests/build其中“codecept%20tests”是我的项目名称。感谢您的解决方案 – 2017-04-07 20:57:32

+1

谢谢保罗。我已经更新了该博客文章,并提供了一个附加说明,提及您的解决方案。 “%20”对其他人特别有用。 – Nav 2017-04-07 22:41:52

+0

欢迎您!并再次感谢 – 2017-04-11 00:45:55

6

对于Gitlab,使用以下步骤:

  1. 转到项目的设置>网络挂钩
  2. 从詹金斯项目作为推送事件网址输入 “立即生成” URL

    http://server.com/jenkins/job/project_name/build?delay=0sec例如

  3. 点击Add Web Hook然后test hook

然后,无论何时您提交回购,都会触发Web钩子并创建构建。确保将Jenkins工作区设置为delete workspace before each build,以便获得新代码的新副本。

+1

你是如何解决关于在主分支上推动时构建的问题的问题? – Custodio 2015-09-17 14:02:48

0

继续与Jenkins集成在代码从Git命令/ GUI从本地系统提交到存储库之后。

1)在詹金斯创建一个工作,只有工作名称和选择项目自由式的类型点击确定。下一页不要添加任何东西,只需点击保存。

2)进入到你的源代码,并导航到git的在本地的Git仓库/文件夹钩

3)挂钩文件夹中包含了几个文件检查“后承诺,”如果不存在创建文件“后提交”与出扩展

C:\工作\测试\ git的\吊钩\后提交

4)编辑“后提交”下面的命令确保它是出现在你的本地源代码钩子文件夹中

curl -u <的userName >:<apiToken> -X POST http://localhost:8080/jenkins/job/<jobName>/build?token=<apiToken >

实施例: 卷曲-u管理员:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384

5)
<的userName >:詹金斯用户名
<JOBNAME>:作业构建的名称
<apiToken>:转到右上角单击用户名它wi将打开左侧的用户页面,您可以找到“配置”菜单。 单击配置菜单,在这里您可以看到在API上的显示API令牌令牌标题 点击

“username”的和“API令牌”将出现,如果值不存在输入一些随机值和在网址中使用。

6)更改源代码并将代码提交到存储库。 7)你可以工作“http://localhost:8080/jenkins/job/Gitcommittest/”破折号工作正在建设。

它为我工作。