Чтение и анализ внешнего XML-файла в шаблоне Jelly - PullRequest
2 голосов
/ 29 июня 2011

Я использую Jenkins 1.410 и Email-Ext 2.14.Мой проект - проверка работоспособности, чтобы проверить ряд других сборок, убедиться, что их артефакты доставлены правильно, а затем отправить сводное электронное письмо.Все в порядке.

Теперь я пытаюсь проанализировать POM.xml родительского проекта и извлечь несколько версий зависимостей и включить их в красиво отформатированный раздел в электронном письме.

Вопрос: Как в шаблоне Jelly я могу прочитать внешний файл pom.xml (взять его как коллекцию / массив строк, объект xml dom, большую строку и т. Д.) И извлечь нужные мне свойства / атрибуты.Учитывая это, я могу отформатировать их в таблицу или что-то в этом роде.

Нужно ли мне создавать свой собственный плагин (который будет для меня новым)?Или эта функция уже существует?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 25 июня 2013

Эта функциональность уже существует в плагине Email-ext.Вы можете читать файлы XML из скрипта Jelly, настроенного в этом плагине, используя библиотеку тегов xml: http://commons.apache.org/proper/commons-jelly/libs/xml/tags.html

Ниже приведен пример синтаксического анализа файла pom.xml, расположенного в рабочей области задания jenkins.Когда файл читается в {myxmldoc}, он становится документом dom4j, который можно использовать со стандартными выражениями XPATH для запроса или циклического перебора необходимых атрибутов и элементов:

<j:set var="WORK_SPACE" value="${buildenv.get('WORKSPACE')}"/>
<x:parse xml="${WORK_SPACE}/pom.xml" var="myxmldoc"/> 

<!--select element with particular attribute-->
<x:set var="myvar" select="$myxmldoc/project/build/plugins/plugin[@attribute='abc']"/>

<!--Loop through elements-->
<x:forEach var="myloopvar" select="$myxmldoc/project/build/plugins/plugin">
.....
</x:forEach>
1 голос
/ 29 июня 2016

Предварительные шаги

1. Download common-jelly package from: http://redrockdigimark.com/apachemirror/commons/jelly/binaries/commons-jelly-1.0.zip
2. Extract the files from the zip
3. Copy the following files: commons-jelly-tags-util-1.1.1.jar, commons-jelly-tags-xml-1.1.jar, commons-jelly-tags-fmt-1.0.jar
4. Paste the above files at: <Jenkins server path>\war\WEB-INF\lib
5. Restart Jenkins

XML IS: abc.xml

<sites>
 <site>
  <URL>http://www.google.com</URL>
  <STATUS>200</STATUS>
 </site>
 <site>
  <URL>http://www.yahoo.com</URL>
  <STATUS>200</STATUS>
 </site>
</sites>

Код желе для чтения вышеXML

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:x="jelly:xml" xmlns:html="jelly:html" xmlns:util="jelly:util">

<j:set var="xmlFilePath" value="${build.getWorkspace().child('abc.xml')}"/>
<util:file name="${xmlFilePath}" var="xmlFileContent" />
<x:parse var="myxmldoc" xml="${xmlFileContent}"/>
<x:set var="allSites" select="$myxmldoc/sites"/>
<table class="border">
 <tr>
  <th class="border1"><b>URL</b></th>
  <th class="border1" width="140px"><b>HTTP Code</b></th>
  <th class="border1" width="140px"><b>Status</b></th>
 </tr>
 <x:forEach var="mysite" select="$allSites/site">
 <j:set var="myURL"><x:expr select='$mysite/URL' /></j:set>
 <j:set var="myStatus"><x:expr select='$mysite/STATUS' /></j:set>
 <tr>
  <td class="border_test_passed">
   <a href="${myURL}">${myURL}</a>
  </td>
  <td class="border_test_total">
   <b>${myStatus}</b>
  </td>
  <td class="border_test_total">
   <j:choose>
    <j:when test="${myStatus=='200'}"><img src="${rooturl}userContent/BSGreen.png" width="15px" /></j:when>
    <j:otherwise><img src="${rooturl}userContent/BSRed.png" width="15px" /></j:otherwise>
   </j:choose>
  </td>                     
 </tr>
 </x:forEach>
</table>
...