【问题标题】:Configure or Create hudson job automatically自动配置或创建 hudson 作业
【发布时间】:2011-04-22 15:52:37
【问题描述】:

有没有什么方法可以在之前的 Jobs 的基础上再通过一个 Hudson 工作来创建新的 Hudson 工作?

例如,如果我需要一个一个地创建新的一堆作业,自动创建 4 个配置相似但参数不同的作业

基本上是这样的步骤

  1. 创建 SVN 分支我可以调用svn cp 命令并使用脚本对其进行参数化
  2. 根据新的 svnbranch 名称创建一些构建
  3. 稍后标记它

或者换句话说,我需要克隆以前的工作,并在 $ Branch 出现在新工作的地方给出新的分支名称。

谢谢

【问题讨论】:

    标签: configuration hudson


    【解决方案1】:

    您可以尝试 Hudson Remote API 来完成此类任务 (setting up an Hudson project)。

    例如看这个教程,记住你可以很容易地显示帮助:

    java -jar hudson-cli.jar -s http://your_Hudson_server/ help
    

    所以,要复制一份工作:

    java -jar hudson-cli.jar -s http://your_Hudson_server/ copy-job myjob copy-myjob
    

    【讨论】:

    • 我认为从网页中读取 api 会更好。只需访问 http://:/api,您将看到一些一般说明以及复制 api 的文档。如果您对 API 的其他部分感兴趣,请转到您实际执行配置的页面并将/api 添加到其中。使用您最喜欢的任何方法。如果您无法在本地访问 Hudson jar,浏览器版本甚至可以工作(无论如何,不​​太可能的原因)
    • 第二次阅读你的帖子,我学到了一些新东西。我以为你只能在同一台服务器上使用 cli 与 Hudson 交谈。但这只是从命令行使用远程 API 的一种简单方法。我总是用wget 与哈德森交谈。不幸的是,我只能投票给你一次。 :(
    • @VonC 我现在可以复制一个作业 我需要从 hudson 本身运行它 我尝试执行这个批处理并运行 java -jar hudson-cli.jar -s your_Hudson_server copy-job myjob copy-myjob 没有创造任何工作只是成功,我如何从 hudson 本身运行?
    • @sharp,我不确定,除了可能来自专门的 Hudson 作业本身(然后会启动 java -jar 命令行)
    • @VonC 你说没有办法从哈德逊作业中的批处理命令调用?
    【解决方案2】:

    已经在其他答案中介绍过,但是为了方便复制 config.xml:

    curl --user USER:PASS -H "Content-Type: text/xml" -s  
    --data-binary "@config.xml" "http://hudsonserver:8080/createItem?name=newjobname"
    

    【讨论】:

    • 无论出于何种原因,'--data "@config.xml"' 选项对我不起作用。我改用了 --data "$XML" 并且效果很好。 YMMV。
    • 您必须使用--data-binary 以避免issues.jenkins-ci.org/browse/JENKINS-7501 出现换行问题。
    • 如果你得到Error 403 No valid crumb was included in the request,尝试为用户创建API TOKEN而不是PASSWORD [登录,点击右上角的用户图标/名称->配置->添加api令牌]
    • 类似于这个答案,但使用环境变量。 curl -XPOST --user ${JENKINS_USER_ID}:${JENKINS_API_TOKEN} \ -H "Content-Type: text/xml" \ -s --data-binary "@config.xml" \ 'http://jenkins.robert.net/createItem?name=createdFromCLI3' 注意:它使用${JENKINS_API_TOKEN}
    【解决方案3】:

    你可以像这样使用 groovy 系统脚本:

    def jenkins = hudson.model.Hudson.instance
    def template = jenkins.getItem("MyTemplate")
    def job = jenkins.copy(template,"MyNewJob")
    job.scm = new hudson.scm.SubversionSCM("http://base/branches/mybranche")
    job.save()
    

    【讨论】:

    • 你能举个例子,在 Git 上使用同样的方法吗?
    【解决方案4】:

    好像有一个jenkins插件。

    https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin

    我还没有测试插件。但如果该插件有效,它应该可以减少直接复制作业和修改变量/值的一些人为错误。

    【讨论】:

    • 我创建了一个Docker image 用于运行准备好使用 DSL 脚本的 Jenkins 实例。希望这会有所帮助
    【解决方案5】:
    def jenkins = hudson.model.Hudson.instance
    def template = jenkins.getItem("MyTemplate")
    def job = jenkins.copy(template,"MyNewJob")
    job.save()
    

    我现在使用这个我必须使用 Groovy 更改 MyNewJob 的参数值我将如何做到这一点?

    ex 我有一个名为“Build_BranchName”的参数,默认值为 //perforce/mybranch 我必须将其更改为 //perforce/mynewbranch

    【讨论】:

      【解决方案6】:

      您可以选择 VonC 刚刚给您的选项(这可能是最安全的方法,但您也可以通过在 {Hudson_Home}\jobs 中创建一个新目录(目录名称将是作业名称)和在那里复制一个修改过的config.xml。修改基本上只是SVN URL。您应该从您正在复制的作业中检查xml。您需要了解如何通过脚本更改xml文件,但这是次要问题。

      很遗憾,您必须重新启动 Hudson,或者强制重新加载配置。 (访问页面 http://:/reload 重新加载配置)。

      【讨论】:

      • 感谢大家提出宝贵的建议,但根本不可能重新启动 Hudson,因为它会破坏我的其他构建 -:(
      • @praveen:VonC 的解决方案无需重启,也无需重新加载配置。这就是为什么我更喜欢 VonC 的原因之一。我不确定从磁盘重新加载配置是否会破坏构建。无论如何,使用 VonC 的解决方案就可以了。 wget 在使用远程 api 时会产生奇迹。但是除了 wget 和 hudsons 的 cli 之外,您还可以使用许多脚本语言与远程 api 对话。
      • @Peter 我能够在 Windows 中获得克隆作业,但是当我在 linux 中尝试时 java -jar hudson-cli.jar -s localhost:9080/hudson help 线程“main”中的异常 java.io.FileNotFoundException : localhost:9080/hudson/cli 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1288) 在 hudson.cli.FullDuplexHttpStream.(FullDuplexHttpStream.java:61) 在 hudson.cli.CLI。(CLI.java:90) at hudson.cli.CLI.(CLI.java:62) at hudson.cli.CLI.main(CLI.java:175) 有什么建议吗?
      • 我会提交问题报告,可能有人可以帮助您。 issues.hudson-ci.org
      • 助你一臂之力。看看http://<HudsonURL>/api。这将向您展示 api 方面的一些帮助。它还将告诉您如何复制作业。然后您转到http://<HudsonURL>/job/<job_name>/api,它将解释如何更改作业设置。由于您可以通过浏览器执行此操作,因此您也可以使用wget(用于访问 Web 服务器的 linux/unix 工具)来执行此操作。
      【解决方案7】:

      如果您愿意使用 GIT(就像我一样,将主 SVN 存储库镜像到 Hudson/Jenkins 服务器上,效果很好)...。 ..你可以试试 Stephen Haberman 的post-receive-hudson

      这个钩子为每个人创造了新的工作 哈德逊连续分支 集成工具。除了创建 如果需要,推送的用户是 如果他们添加到工作的电子邮件列表中 还没有。

      无论如何,该脚本可以为您提供有关如何远程控制 Jenkins(Hudson) 的新提示。

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 2014-04-27
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多