在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
我现在已经实施了Zachary Young的答案,经过对环境的一些修改后,它完美无缺。
我们的修改:
我们有以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
这至少是我现在所记得的。
现在将它放在一个外部脚本中,但是我会把它放在一个Hudson作业中,以便其他开发人员可以轻松地运行它。
我敦促大家赞成Zachary Young的回答!
答案 0 :(得分:4)
更新01:
现在,这是jenkins/hudson.war
附带的Subversion Plugin的一部分。
代替Hudson插件(我不懂Java),有些XSL(1.0)怎么样?在以下解决方案中:
svn list --xml
获取标签的目录列表,保存到svn-list.xml <强> 1。 svn list --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到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>
第3。使用Job的config.xml加入Hudson List
以下使用curl
来获取旧的config.xml,并使用Hudson的作业API修改配置来发布新的config.xml。
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标记”,“标记构建”等)。
join.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>
我希望这种端到端的解决方案适合您。
谢谢你,
扎卡里
答案 1 :(得分:1)
batch task Plugin怎么样?这将允许您转到Hudson中的任何构建(当前和旧构建)并在该构建上运行批处理。批次是预定义的任务。
这只适用于你的目的,如果Hudson正在创建你的官方版本并在subversion中标记它。当然,仅适用于尚未删除的版本。 ;)