Jenkins在Mercurial提交后进行构建

6
我已经在这个项目上工作了一周,但是我已经搜索了两天,没有任何清晰的在线解释。对于一个学校作业来说,我们需要使用以下程序设置构建服务器:
- Maven,作为我们的构建工具。 - Mercurial作为我们的版本控制系统。 - Java(JRE),javac和javadoc。 - JUnit用于单元测试。 - Jenkins(带有JDepend插件)。
我们需要创建3个作业,其中之一是:
每次Mercurial的(本地)存储库被编辑时,都需要启动构建。(也就是说,每个Mercurial提交都需要被Jenkins检测到。这个“检测”需要每1分钟触发一次)
我们需要使用的工具是:Javac、Maven作为我们的构建工具,当然还有Mercurial。
这全部发生在Ubuntu环境中。由于我对Linux完全不熟悉,所以我不知道该怎么做。
我不是要求一个现成的解决方案,而是要求一些“提示”,以了解诸如Mercurial“Hooks”之类的东西,以及我需要(做)什么才能让这个作业在Jenkins中工作等。我在网上找到的所有内容都相当模糊,并且使用Python示例。
因此,具体来说:一点指导可能会很受欢迎 :) 每个帮助之手都受到赞赏!
3个回答

13
使用changegroup hook在mercurial中触发Jenkins构建是最有效的方法,当有人推送到您的仓库时。
另一方面,Jenkins允许通过调用具有特殊令牌的作业的URL来远程触发构建。必须在Jenkins作业中配置此令牌对应的触发器:

Build trigger configuration

将放置在repos .hg/hgrc文件中的水银钩可以定义为:
[hooks]
changegroup = curl --silent http://your.jenkins.server.url/jenkins/job/<YOURJOBNAMEHERE>/build?token=Foo

这个钩子使用curl命令行工具调用您的Jenkins作业的URL,使用定义的令牌远程触发作业。当然,您的Linux系统必须安装Curl。


所以,每次提交/推送发生时,url 将被触发,工作开始? - voluminat0
这可能听起来有些傻(我通常使用git),但是对于提交(例如本地更改),这是否有效?我们在非常假设的情况下工作(没有实际连接到我们的Mercurial存储库,只有模拟可能推送的本地更改)?我之所以问这个问题,是因为在git中,push和commit是两个非常不同的东西。提前致谢!编辑:对于提交,我将changegroup更改为'commit'而不是[hooks] changegroup = ...? - voluminat0
在 Git 和 Hg 中,“push” 的概念是相同的。(提交操作也是如此。) - moswald
@James,我们如何对这种方法进行身份验证? - LostMohican
你可以在curl的调用中添加凭据,例如: curl --user yourUser:yourPassword --silent http://... - James
显示剩余2条评论

4

看起来你的教授希望Jenkins定期轮询Mercurial代码库以检查变更(“每1分钟触发一次”)。当你设置Jenkins任务时,“构建触发器”部分将有一个轮询选项。那就是你想要的。

更好的解决方案是让Mercurial告诉Jenkins有关更改的信息,因为轮询通常不是一个好主意(即使你数天没有检查任何内容,Jenkins仍然每分钟询问是否有任何更改)。你可以查看这本书了解编写Mercurial钩子的示例,或者使用我编写的Python脚本


是的,那部分我已经弄清楚了(* * * * * -> 每分钟),不过还是谢谢你提供的信息。 但是我该如何让Jenkins检测到这是一个提交,并且他需要构建特定存储库/文件夹中的文件呢? - voluminat0
Jenkins的Mercurial插件已经知道如何检测“无更改”和“有更改”的区别。你所要做的就是告诉Jenkins:“当你运行这个任务时,从这个源代码控制提供商(Mercurial)检出文件,并运行这个命令(Maven)。并且每分钟使用Mercurial检查是否需要运行任务。” - moswald

0

如果您想在将代码推送到Bitbucket上的Mercurial存储库时触发Jenkins构建,可以进入存储库的管理页面(点击齿轮图标),然后选择“服务”选项卡。在那里,您可以定义一个具有四个参数的Jenkins服务:

  1. 端点:Jenkins服务器的URL。
    • 对于安全的Jenkins服务器,您需要指定用户名和API令牌。API令牌由Jenkins为特定用户在“管理用户”/“配置”页面上生成。
  2. 模块名称:可选参数,根据已推送的内容有选择地触发构建。
  3. 项目名称:Jenkins作业的名称。
  4. 令牌:可选参数,与在选择“远程触发构建(例如,从脚本)”时在Jenkins作业上定义的身份验证令牌相同。

(我认为这只是一种通过GUI定义“changegroup hook”的方法,正如James在他2012年11月7日的回复中所提到的。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接