如“ 轮询必定会死:从git钩子触发Jenkins构建 ”中所述,您可以将新的提交通知Jenkins:
使用最新的Git插件1.1.14(我现在才发布),您现在可以通过简单地执行以下命令来更轻松地执行此操作:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
这将扫描配置为检出指定URL的所有作业,如果还配置了轮询,则会立即触发轮询(如果发现值得进行构建的更改,则会依次触发构建。 )
这样,在詹金斯工作来来去去时,脚本就可以保持不变。
或者,如果在单个存储库宿主应用程序(例如Gitosis)下有多个存储库,则可以与所有存储库共享一个接收后挂钩脚本。最后,即使对于安全的Jenkins,此URL也不需要身份验证,因为服务器不会直接使用客户端发送的任何内容。在实际开始构建之前,它将运行轮询以确认是否有更改。
如此处所述,请确保为您的Jenkins服务器使用正确的地址:
由于我们在端口8080上将Jenkins作为独立的Web服务器运行,因此该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参数应该完全匹配你所拥有的资源库网址您的詹金斯工作。
在复制示例时,在我们的案例中ssh://
,我忽略了该协议,但该协议无效。
您还可以使用一个简单的接收后挂钩,例如“ 使用Jenkins和GIT的基于推送的构建 ”
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
将您的Jenkins作业配置为能够“远程触发构建”并使用身份验证令牌(1qaz2wsx
在此示例中)。
但是,这是一个特定于项目的脚本,作者提到了一种将其概括的方法。
第一种解决方案更容易,因为它不依赖于身份验证或特定项目。
我想检查变更集中是否至少有一个Java文件存在,构建应该开始。
假设开发人员仅更改了XML文件或属性文件,则不应开始构建。
基本上,您的构建脚本可以:
git notes
在第一个通话中放置“构建”注释(请参阅参考资料)
- 在随后的调用中,获取
HEAD
要构建的分支候选对象与git notes
“ build”(git show refs/notes/build
)引用的提交之间的提交列表git diff --name-only SHA_build HEAD
。
- 您的脚本可以解析该列表,并确定是否需要继续构建。
- 在任何情况下,请将您的
git notes
“ build
” 创建/移动到HEAD
。
2016年5月:cwhsu指出在评论如下可能的网址:
curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
如果您在项目中设置了触发配置,就可以使用
2016年6月,polaretto指出的评论:
我想补充一点,仅需少量的shell脚本,就可以避免手动配置url,尤其是在公共目录下有许多存储库的情况下。
例如,我使用这些参数扩展来获取存储库名称
repository=${PWD%/hooks};
repository=${repository##*/}
然后像这样使用它:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository