Запуск задания и распаковка файла из Nexus

Подготовительный этап включает в себя следующее:
  • определение переменных окружения и атрибутов задания;
  • запрос на продолжение или отмену. Пример интерактивного ввода между этапами:
    Раскрыть type=java
    node {
     stage('Build') {
       // код
       // Отправка письма с запросом продолжать/не продолжать
       mail body: «${env.JOB_NAME} требует ввода!.<br>Сделайте выбор по < a href = $ {
       env.BUILD_URL
     }
     /input>ссылке</a > . < br > «,
     charset: 'utf-8', mimeType: 'text/html', subject: «${env.JOB_NAME}!»,
       to:  example@example.ru
     input 'Запускать deploy?'
    }
    stage('Deploy') {
     // код
     // Отправка письма с запросом теста
     mail body: «${env.JOB_NAME} требует ввода!.<br>Сделайте выбор
     по < a href = $ {
       env.BUILD_URL
     }
     /input>ссылке</a > . < br > «,
     charset: 'utf-8', mimeType: 'text/html', subject: «${env.JOB_NAME}!»,
       to: example@example.ru
     choice = new ChoiceParameterDefinition('Smoketests', ['Smoke1',
       'Smoke2', 'Smoke3', 'Без смок-теста'
     ] as String[], 'SmokeTests:')
     def userinput = input id: '30', message: 'Какие тесты запускать?', parameters: [choice]
     switch (userinput) {
       case 'Без смок-теста':
         break
       default:
         stage 'Smoke test' + userinput
         echo «Running smoke test « + userinput
         build userinput
     }
    }
    }
    
  • загрузка артефактов из Nexus. Пример выбора версии артефакта из Nexus:
    Раскрыть type=java
    node {
     def ver
     stage('Stage 1') {
       def versions = getVersionId('http://nexus.<domain>.ru:8081/nexus/service/local', 'com.sbt.aep', 'aep-module')
       ver = input message: 'Get Version',
         parameters: [choice(choices: versions, description: '', name: 'versions')]
       echo ver
     }
     stage('Stage 2') {
       echo getNexusLink('http://nexus. .<domain>.ru:8081/nexus/service/local', 'aep-module', ver, 'zip', 'AE-SPARK_group', 'com.sbt.aep')
       echo 'Hello World 2'
     }
     stage('send mail') {
       echo «pass»
     }
    }
    @NonCPS
    def getNexusLink(nexusRestApiUrl, nexusArtifactId, nexusVersionId, nexusExtensionId, nexusRepositoryId, nexusGroupId) {
     def api = «${nexusRestApiUrl}/artifact/maven/redirect?g=${nexusGroupId}&a=${nexusArtifactId}&v=${nexusVersionId}&e=${nexusExtensionId}&r=${nexusRepositoryId}»
     def con = new URL(api).openConnection()
     con.connect()
     def is = con.getInputStream()
     is.close()
     con.getURL().toString()
    }
    @NonCPS
    def getVersionId(nexusRestApiUrl, nexusGroupId, nexusArtifactId) {
     def versions = []
     def parser = new XmlParser();
     def xml = parser.parse(«${nexusRestApiUrl}/lucene/search?g=${nexusGroupId}&a=${nexusArtifactId}»);
     xml['data']['artifact']['version'].collect {
       it — >
         it.text()
     }.unique().join(«\n»)
    }
    
  • рассылка уведомлений.

Запуск задания Jenkins

В разделе приведен пример запуска задания Jenkins версии 2.319 и выше при появлении новой сборки в Nexus.
После установки плагина URLTrigger Plug-in в задании появится пункт URLTriggerPoll with a URL.
Результат установки плагина

Увеличить

В данном примере раз в минуту опрашивается изменение содержимого файла http://<domain>.ru:8081/nexus/content/repositories/OFEP_snapshot/ru/ofep/distribution/ofep-distr/16.1.0_RC2-SNAPSHOT/maven-metadata.xml.md5. При его изменении запускается задание. Настройка примера с указанием задания для запуска приведена на рисунке ниже.
Пример выбора задания для запуска

Увеличить

Посмотреть статус опроса адреса можно через пункт меню URLTrigger Log.
Меню Jenkins

Увеличить

Загрузка и распаковка файла из Nexus

Адрес для загрузки формируется на основе полей artifactId и versionId или явно задается в переменной NEXUS_URL. Скрипт выполняется на linux jenkins slave, на котором должны быть установлены утилиты md5sum, curl и unzip. После загрузки архив распаковывается в каталог nexus в текущем пространстве Jenkins.
Пример:
Раскрыть type=java
def getNexusLink(nexusRestApiUrl, nexusArtifactId, nexusVersionId, nexusExtensionId, nexusRepositoryId, nexusGroupId) {
def api = «$nexusRestApiUrl/artifact/maven/redirect?g=$nexusGroupId&a=$nexusArtifactId&v=$nexusVersionId&e=$nexusExtensionId&r=$nexusRepositoryId»
def con = new URL(api).openConnection()
con.connect()
def is = con.getInputStream()
is.close()
con.getURL().toString()
}
def getUrl(url) {
new URL(url).getText()
}
// artifactId
// versionId
// NEXUS_URL = 'http://sbtnexus.<domain>.ru:8081/nexus/content/repositories/CC_CD_KK_repo/Infobank/Distrib/D-28.001.01/16/D-28.001.01-16.zip'
NEXUS_URL = getNexusLink(«http://sbtnexus. .<domain>.ru:8081/nexus/service/local»,
«${artifactId}»,
  «${versionId}»,
«zip»,
«CC_CD_KK_repo»,
«Infobank.Distrib»)
echo «${NEXUS_URL}»
def workspace = pwd()
md5sum = getUrl(«${NEXUS_URL}.md5»)
writeFile file: «infobank.zip.md5», text: «${md5sum} infobank.zip\n»
dir('nexus') {}
sh «if ! md5sum -c infobank.zip.md5; then curl -s -L ${NEXUS_URL} -o infobank.zip && unzip -o -d ${workspace}/nexus infobank.zip -x 'Documentation\*'; fi»
Предыдущий раздел
Хранение заданий и паролей
Следующий раздел
Развертывание и обработка ошибок
Была ли страница полезной?