当Jenkins Mercurial插件调用时,找不到“hg”

时间:2011-07-22 17:56:54

标签: mercurial hudson jenkins

基本上,这是我得到的日志:

  

由用户dontcare4free启动

     

$ hg clone --rev default ssh://hg@bitbucket.org/dontcare4free/my-repository / var / lib / jenkins / workspace / Custom-MC-Server

     

* 无法导入扩展名hgext.imerge:没有名为imerge的模块   remote:主机密钥验证失败   中止:远程hg没有合适的响应!
  错误:无法克隆ssh://hg@bitbucket.org/dontcare4free/my-repository
  [Custom-MC-Server] $ hg log --rev。 --template {node}
  java.io.IOException:无法运行程序“hg”(在目录“/ var / lib / jenkins / workspace / My-Repository”中):java.io.IOException:error = 2,没有这样的文件或目录
    在java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
    在hudson.Proc $ LocalProc。(Proc.java:244)
    在hudson.Proc $ LocalProc。(Proc.java:216)
    在hudson.Launcher $ LocalLauncher.launch(Launcher.java:698)
    在hudson.Launcher $ ProcStarter.start(Launcher.java:329)
    在hudson.Launcher $ ProcStarter.join(Launcher.java:336)
    在hudson.plugins.mercurial.MercurialSCM.joinWithPossibleTimeout(MercurialSCM.java:299)
    在hudson.plugins.mercurial.HgExe.popen(HgExe.java:191)
    在hudson.plugins.mercurial.HgExe.tip(HgExe.java:171)
    at> hudson.plugins.mercurial.MercurialSCM.calcRevisionsFromBuild(MercurialSCM.java:255)
    在hudson.scm.SCM._calcRevisionsFromBuild(SCM.java:304)
    在hudson.model.AbstractProject.calcPollingBaseline(AbstractProject.java:1205)
    在hudson.model.AbstractProject.checkout(AbstractProject.java:1194)
    在hudson.model.AbstractBuild $ AbstractRunner.checkout(AbstractBuild.java:555)
    在hudson.model.AbstractBuild $ AbstractRunner.run(AbstractBuild.java:443)
    在hudson.model.Run.run(Run.java:1376)
    在hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    在hudson.model.ResourceController.execute(ResourceController.java:88)
    在hudson.model.Executor.run(Executor.java:175)
  引起:java.io.IOException:java.io.IOException:error = 2,没有这样的文件或目录
    在java.lang.UNIXProcess。(UNIXProcess.java:164)
    在java.lang.ProcessImpl.start(ProcessImpl.java:81)
    在java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
    ... 18更多
  Jabber通知程序插件:发送通知:-snip-
  Jabber通知插件:通知嫌疑人
  Jabber通知程序插件:通知罪犯
  通知上游项目完成工作
  完成:失败

据我所知,这意味着找不到hg可执行文件。但是,当我尝试执行hg作为构建步骤(shell执行)并禁用Mercurial集成时,我没有遇到这样的错误。

我尝试过,无论是否更改安装目录和可执行文件,我甚至尝试过编译(好吧,无论如何)来自源代码的Mercurial,都无济于事。

编辑:傻我。我完全误读了日志。问题与它根本没有找到hg可执行文件无关,但实际上是因为我忘了正确设置我的密钥。

3 个答案:

答案 0 :(得分:8)

检查http://localhost:8080/systemInfo环境变量> PATH显示“/ usr / bin:/ bin:/ usr / sbin:/ sbin”。我无法确定为什么詹金斯看到这一切。以守护程序配置的用户身份登录时,我会获得更大的路径集。

我能够通过创建一个符号链接来帮助Mercurial Plug-in找到“hg”。

sudo ln -s /usr/local/bin/hg /usr/bin/hg 

我尝试将以下内容添加到/ etc / profile(我重新启动以防万一)

PATH=$PATH:/usr/local/bin
export PATH

我通过输入

验证了这修改了我的路径
echo $PATH
终端中的

但是,这条道路没有出现在詹金斯

我能够使用sym链接解决方案,但我真的很想了解Jenkins获取Path的位置。

答案 1 :(得分:4)

Nullable是对的,问题不在于找不到hg可执行文件,而是jenkins用户没有公钥。

解决方案如下:

  1. 以jenkins用户身份登录
  2. 确保jenkins用户有一个公共ssh密钥,该密钥应该位于.ssh / id_rsa.pub
  3. 如果没有,请使用ssh-keygen生成一个并且不指定密码短语
  4. 问题cat .ssh/id_rsa.pub,复制输出。
  5. 登录bitbucket或github,将刚刚复制的公钥添加到您的帐户
  6. 再试一次!
  7. 希望对这个问题的任何人都有帮助,祝你好运。

答案 2 :(得分:0)

我首先想到的是你应该检查jenkins设置中hg可执行文件的路径,如果有这样的选项,它可能不会指向正确的路径。

如果这没有用,请确保hg在PATH上。

根据此页面http://www.pixelastic.com/blog/162:failed-to-import-extension-hgext-imerge-warning-on-dreamhost

,可能需要进行一些设置

也许这可以解决您的问题?