ОБНОВЛЕНИЕ 01:
Теперь это часть Subversion Plugin , который поставляется с jenkins/hudson.war
.
Вместо плагина Hudson (я не знаю Java), как насчет XSL (1.0)? В следующем решении:
- Мы получаем список каталогов тегов через
svn list --xml
, сохраненный в svn-list.xml
- Мы запускаем преобразование, чтобы превратить svn-list.xml во внутреннюю схему Хадсона для выпадающего списка, сохраненного в hudson-list.xml
- Мы запускаем другое преобразование, чтобы присоединить hudson-list.xml к файлу config.xml задания на основе определенного имени для списка, который мы хотим обновить, сохранить в new-config.xml и обновить задание Hudson с помощью новой конфигурации
1. svn list --xml
svn list [path-to-svn-tag-directory] --xml > svn-list.xml
2. Конвертировать список SVN в список Гудзона
xsltproc svn-to-hudson.xsl svn-list.xml > hudson-list.xml
СВН-к-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. Присоединяйтесь к Hudson List с помощью файла config.xml
.
В следующем коде curl
используется для получения старого config.xml и для публикации нового, используя 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-теги», «Tagged Builds» и т. Д.).
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>
Надеюсь, это комплексное решение подойдет вам.
Спасибо,
Zachary