Статьи

Управление конфигурациями заданий Jenkins

В JBoss Tools и Developer Studio мы выполняем множество заданий по сборке в Jenkins. Фактически для потоков 3.2.x / 4.x и 3.3.x / 5.x существует более 195 рабочих мест. Когда мы начнем строить первый рубеж нашего следующего года, мы создадим еще 40+ рабочих мест.

Вот некоторые из них:

Чтобы повысить производительность, мы используем профили maven в нашем родительском модуле, чтобы разрешить общий доступ к данным за пределами рабочих областей подчиненных, без использования общих рабочих областей (поскольку это может привести к конфликтам, когда несколько процессов maven пытаются выполнить запись в один репозиторий .m2). , Вот пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<!-- same contents as jbosstools-nightly-staging-composite, but locally
 available (to improve network lag) -->
<profile>
 <id>local.composite</id>
 <activation>
  <activeByDefault>false</activeByDefault>
 </activation>
 <repositories>
  <repository>
   <id>local.composite</id>
   <url>${local.composite}</url>
   <layout>p2</layout>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
   <releases>
    <enabled>true</enabled>
   </releases>
  </repository>
 </repositories>
</profile>

Мы также используем профили для включения анализа покрытия кода или для использования переменных Дженкинса, таких как BUILD_NUMBER, при установке квалификатора с метками времени для функций и плагинов:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<profile>
 <id>hudson</id>
 <activation>
  <property>
   <name>BUILD_NUMBER</name>
  </property>
 </activation>
 <properties>
  <local.site>file:///home/hudson/static_build_env/jbds/target-platform_3.3.indigo.SR2/e372M-wtp332M.target/</local.site>
 </properties>
 <build>
  <plugins>
   <plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-packaging-plugin</artifactId>
    <version>${tychoVersion}</version>
    <configuration>
     <format>'v'yyyyMMdd-HHmm'-H${BUILD_NUMBER}-${BUILD_ALIAS}'</format>
     <archiveSite>true</archiveSite>
    </configuration>
   </plugin>
  </plugins>
 </build>
</profile>

Но как вы справляетесь с сотнями конфигурационных файлов заданий, и как вы можете легко обновлять их без использования браузера? Мы поддерживаем файлы конфигурации работы (config.xml) в автономном режиме .

Для этого мы используем подключаемый модуль maven, который я написал, чтобы получать задания, соответствующие заданному представлению и регулярному выражению, и сохранять их локально на диске, используя ту же структуру, что и на сервере.

Затем этот же плагин можно использовать для отправки файлов config.xml НАЗАД на сервер после внесения изменений в один (или все) файлы.

Для дополнительного уровня аудита мы также фиксируем эти локально кэшированные файлы config.xml в SVN, чтобы мы могли отслеживать их историю. По общему признанию Jenkins предоставляет эту функциональность изначально, но когда вы размещаете изменения в файлах config.xml, сервер не всегда замечает изменение и записывает дельту, поэтому резервное копирование (особенно такое, которое вы можете преобразовать в автономном режиме) никогда не является плохой идеей. ,

Ссылка: Управление конфигурациями заданий Jenkins от нашего партнера JCG Ника Болдта в блоге DivByZero .