如“轮询必须死:从 git hook 触发 Jenkins 构建”中所述,您可以通知 Jenkins 新的提交:
使用最新的Git 插件 1.1.14(我现在刚刚发布),您现在可以更轻松地执行此操作,只需执行以下命令:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
这将扫描所有配置为检查指定 URL 的作业,如果它们也配置了轮询,它将立即触发轮询(如果发现值得构建的更改,则会依次触发构建。 )
这允许脚本在 Jenkins 中来来去去时保持不变。
或者,如果您在单个存储库主机应用程序(例如 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参数应该与您在Jenkins 作业的Repository URL中的内容完全匹配。
在复制示例时,我省略了协议,在我们的例子ssh://
中,它没有工作。
您还可以使用简单的 post-receive 挂钩,如“使用 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
“构建”(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,尤其是当您在一个公共目录下有许多存储库时。
例如,我使用这些参数扩展来获取 repo 名称
repository=${PWD%/hooks};
repository=${repository##*/}
然后像这样使用它:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository