Есть ли плагин для перечисления тегов Subversion в Гудзоне? - PullRequest
4 голосов
/ 23 июня 2010

В Хадсон у нас есть задание, которое развертывает указанный тег subversion на сервере.Этот тег в настоящее время вводится в текстовое поле, но, поскольку это просто ошибка ввода, ожидающая, что мы хотим заменить это текстовое поле раскрывающимся списком с доступными в настоящее время тегами.То есть мы бы хотели, чтобы Хадсон/ теги и получить все теги, найденные там.

Я искал плагин Гудзона или какой-либо другой способ сделать это, но безуспешно.Это не может быть первый раз, когда кто-то хочет этого, верно?Или это будет считаться плохой практикой по какой-то причине, о которой я не могу думать в данный момент?

РЕДАКТИРОВАТЬ

Кто-то еще имел имелта же идея (всего три недели назад), но пока нет опубликованного решения: http://issues.hudson -ci.org / browse / HUDSON-6682? page = com.atlassian.jira.plugin.system.issuetabpanels% 3Aall-tabpanel

РЕДАКТИРОВАТЬ 2

Теперь я реализовал ответ Захария Янга, и после нескольких модификаций для нашей среды он работает отлично.

Наши модификации:

У нас есть международный контент, закодированный в 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, чтобы сделатьдругие разработчики могут легко запустить его.

Я призываю всех ответить на голос Захария Янга !

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

ОБНОВЛЕНИЕ 01:
Теперь это часть Subversion Plugin , который поставляется с jenkins/hudson.war.

Вместо плагина Hudson (я не знаю Java), как насчет XSL (1.0)? В следующем решении:

  1. Мы получаем список каталогов тегов через svn list --xml, сохраненный в svn-list.xml
  2. Мы запускаем преобразование, чтобы превратить svn-list.xml во внутреннюю схему Хадсона для выпадающего списка, сохраненного в hudson-list.xml
  3. Мы запускаем другое преобразование, чтобы присоединить 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

1 голос
/ 23 июня 2010

Как насчет плагина для пакетных задач .Это позволит вам перейти к любой сборке в Hudson (текущей и старой) и запустить пакет для этой сборки.Пакеты являются предопределенными задачами.

Это будет работать только для ваших целей, если Hudson создает вашу официальную сборку и помечает ее в Subversion.И, конечно, только для сборок, которые еще не удалены.;)

...