代码之家  ›  专栏  ›  技术社区  ›  Peter Jaric

在哈德逊有没有列出Subversion标签的插件?

  •  4
  • Peter Jaric  · 技术社区  · 15 年前

    Hudson 我们有一个将指定的Subversion标记部署到服务器的作业。此标记当前输入到一个文本字段中,但由于这只是一个等待发生的输入错误,我们希望该文本字段被一个下拉列表替换为当前可用的标记。也就是说,我们希望Hudson转到<subversion repo url>/tags并获取在那里找到的所有标签。

    我在找一个 Hudson plugin 或者其他一些方法来完成这个,但没有成功。这不是第一次有人想要这个,对吧?或者这会被认为是一种不好的做法,因为某些我目前无法想到的原因?

    编辑

    别人 有同样的想法(仅三周前),但目前还没有发布解决方案: http://issues.hudson-ci.org/browse/HUDSON-6682?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

    编辑2

    我现在已经实现了ZacharyYoung的答案,在对我们的环境进行了一些修改之后,它工作得很好。

    我们的修改:

    我们有以utf-8编码的国际内容,我必须将其添加到join.xsl中:

    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
    

    以及上传新配置的curl命令:

    curl -H "Content-Type: text/xml; charset=UTF-8" -X POST --data-binary @$WORKING_DIR/new-config.xml $HUDSON_CONFIG_PATH -u $USER:$PASSWORD
    

    至少我现在还记得。

    现在它被放置在一个外部脚本中,但是我将把它放在一个哈德逊作业中,以使其他开发人员能够轻松地运行它。

    我敦促每个人 赞成扎卡里·杨的回答 !

    2 回复  |  直到 15 年前
        1
  •  4
  •   Zach Young mo1010    14 年前

    更新01:
    这现在是 Subversion Plugin 那艘船 jenkins/hudson.war .

    代替HudSon插件(我不知道Java),XSL(1)怎么样?在以下解决方案中:

    1. 我们通过 svn list --xml ,保存到svn-list.xml
    2. 我们运行一个转换,将svn-list.xml转换为hudson的内部模式以供选择下拉列表,保存到hudson-list.xml。
    3. 我们运行另一个转换,根据要更新的列表的特定名称将hudson-list.xml加入到作业的config.xml中,保存到new-config.xml,并使用新的config更新hudson作业。

    1。 VPN列表——XML

      svn list [path-to-svn-tag-directory] --xml > svn-list.xml
    

    2。将SVN列表转换为Hudson列表

      xsltproc svn-to-hudson.xsl svn-list.xml > hudson-list.xml
    

    svn-to-hudson.xsl :

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" indent="yes"/>
      <xsl:template match="/lists/list">
        <hudson.model.ChoiceParameterDefinition>
          <name>[Your Name for the List]</name>
          <description/>
          <choices class="java.util.Arrays$ArrayList">
            <a class="string-array">
              <xsl:apply-templates select="entry"/>
            </a>
          </choices>
        </hudson.model.ChoiceParameterDefinition>
      </xsl:template>
    
      <xsl:template match="entry">
        <string>
          <xsl:value-of select="name"/>
        </string>
      </xsl:template>
    </xsl:stylesheet>
    

    三。用job的config.xml加入hudson列表

    以下用途 curl 要获取旧的config.xml并发布新的config.xml,请使用Hudson的作业API修改配置。

    curl -o old-config.xml http://[your-hudson-server]/job/[job-name]/config.xml -u [username]:[password]
    xsltproc join.xsl old-config.xml > new-config.xml
    curl -X POST -d @new-config.xml http://[your-hudson-server]/job/[job-name]/config.xml -u [username]:[password]
    

    join.xsl要求在同一目录中存在hudson-list.xml:

    <xsl:variable name="tag-list" select="document('hudson-list.xml')"/>
    

    您还需要修改

    <xsl:variable name="list-name" select="string('Name')"/>
    

    到作业中列表的名称(例如,“SVN标记”、“标记的构建”等)。

    XSL :

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" indent="yes"/>
    
      <xsl:variable name="tag-list" select="document('hudson-list.xml')"/>
      <xsl:variable name="list-name" select="string('Name')"/>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="hudson.model.ChoiceParameterDefinition">
        <xsl:choose>
          <xsl:when test="name = $list-name"> <!-- If the name matches, swap in new list -->
            <xsl:copy-of select="$tag-list"/>
          </xsl:when>
          <xsl:otherwise>                      <!-- If the name does not match, copy what's already there -->
            <xsl:copy-of select="."/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    </xsl:stylesheet>
    

    我希望这个端到端的解决方案对您有效。

    谢谢您,
    扎卡里

        2
  •  1
  •   Peter Schuetze    15 年前

    那呢? batch task Plugin . 这将允许您转到哈德逊的任何构建(当前版本和旧版本),并在该构建上运行批处理。批处理是预定义的任务。

    只有当哈德逊创建了你的官方构建并在Subversion中标记它时,这才适用于你的目的。当然,只适用于尚未删除的构建。;)