如何configurationGit后提交挂钩

我是jenkins的新手。 如何从Jenkins远程触发构build?
任何人都可以告诉如何configurationGit后提交挂钩?

我的要求是,无论何时在Git仓库中对特定项目进行更改,它都会自动启动Jenkins为该项目构build的版本。

在Jenkins触发器构build部分,我select了远程触发器构build。
.git目录中,钩子目录在那里,我们必须configuration提交后的文件。
我很困惑如何从那里触发构build(我知道我们应该使用curl命令的一部分)。


 curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con 

我把这个命令放在我的git服务器钩子目录(post commit hook)中。
只要在版本库中发生更改,就会运行自动构build。

我想检查changeset至less有一个java文件是否有构build应该开始。
假设开发人员只更改了xml文件或者属性文件,那么构build不应该启动。
xml ,假设.java文件在那里生成应该开始。

如“ 轮询必须死亡:触发Jenkins从git钩子构build ”中所述,您可以通知Jenkins一个新的提交:

使用最新的Git插件1.1.14 (现在我刚刚发布),现在可以通过执行以下命令轻松完成:

 curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository> 

这将扫描所有configuration为检出指定URL的作业,如果它们也configuration了轮询,则会立即触发轮询(如果发现值得构build的更改,将依次触发构build。 )

当jenkins工作来来去去的时候,这个脚本就可以保持不变。
或者,如果您在单个存储库主机应用程序(例如Gitosis)下有多个存储库,则可以与所有存储库共享一个后接收挂接脚本。 最后,即使对于安全的Jenkins,这个URL也不需要authentication,因为服务器不直接使用客户端发送的任何东西。 它会在实际开始构build之前运行轮询来validation是否有更改。

如上所述,请确保您的Jenkins服务器使用正确的地址:

因为我们在端口8080上运行Jenkins作为独立的/jenkins服务器,所以URL应该没有/jenkins ,如下所示:

 http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git 

为了强化最后一点, ptha 在评论中补充道:

这可能是显而易见的,但我遇到了以下问题:

 curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>. 

url参数应该与您Jenkins作业的Repository URL中的内容完全匹配。
在复制示例时,我遗漏了协议,在我们的例子中是ssh:// ,并且它不起作用。


你也可以使用一个简单的post-receive钩子,比如“ 使用Jenkins和GIT推送构build ”

 #!/bin/bash /usr/bin/curl --user USERNAME:PASS -s \ http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx 

configuration您的Jenkins作业能够“触发器远程构build”并使用身份validation令牌(本例中为1qaz2wsx )。

但是,这是一个特定于项目的脚本,作者提到了一个概括它的方法。
第一种解决scheme比较简单,因为它不依赖于authentication或特定的项目。


我想检查更改设置是否至less有一个Java文件是否应该开始构build。
假设开发人员只更改了XML文件或属性文件,那么构build不应该启动。

基本上,你build立脚本可以:

  • 在第一个电话上放一个“build”笔记(参见git notes
  • 在随后的调用中,获取你的分支候选者的HEADgit diff --name-only SHA_build HEAD '引用的提交列表( git show refs/notes/build ): git diff --name-only SHA_build HEAD
  • 您的脚本可以parsing该列表并决定是否需要继续构build。
  • 在任何情况下,创build/移动你的git notes ' build '头。

2016年5月: cwhsu 在评论中指出了以下可能的url:

你可以使用curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN如果你在你的项目中设置了触发器configuration

http://i.imgur.com/IolrOOj.png


polaretto 在 2016年6月的评论中指出 :

我只想用一点shell脚本来补充,你可以避免手动的urlconfiguration,特别是如果你在一个公共目录下有很多的仓库。
例如,我使用这些参数展开来获取回购名称

 repository=${PWD%/hooks}; repository=${repository##*/} 

然后像这样使用它:

 curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository 

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

这只是使用curl触发一个使用git提供的git钩子的Jenkins作业的问题。
命令

 curl http://localhost:8080/job/someJob/build?delay=0sec 

可以运行jenkins的工作,其中someJob工作是jenkins工作的名称。

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

而已。 无论何时你提交,Git都会触发文件中定义的提交后命令。

正如前面的答案显示了一个完整的钩子可能看起来像这里的例子是我工作post-receive钩子的代码:

 #!/usr/bin/python import sys from subprocess import call if __name__ == '__main__': for line in sys.stdin.xreadlines(): old, new, ref = line.strip().split(' ') if ref == 'refs/heads/master': print "==============================================" print "Pushing to master. Triggering jenkins. " print "==============================================" sys.stdout.flush() call(["curl", "-sS", "http://jenkinsserver/git/notifyCommit?url=ssh://user@gitserver/var/git/repo.git"]) 

在这种情况下,我只有在推动主人而不是其他分支时触发jenkins的工作。

我想添加上面的答案,如果启用Jenkins授权,它变得更加困难。

启用后,我收到了匿名用户需要读取权限的错误消息。

我看到两个可能的解决scheme

1:改变我的钩子:

 curl --user name:passwd -s http://domain?token=whatevertokenuhave 

2:设置基于项目的授权。

前面的解决scheme有缺点,我不得不公开我的passwd钩子文件。 在我的情况是不可接受的。

第二个为我工作。 在全局身份validation设置中,我必须为“匿名”用户启用“总体”>“读取”。 在我想触发的项目中,我必须启用作业>生成和作业>匿名阅读。

这仍然不是一个完美的解决scheme,因为现在您可以在Jenkins中看到项目而无需login。 使用httplogin的前一种方法可能会有更好的解决scheme,但我还没有弄明白。