Запуск задания и распаковка файла из 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 версии 2.319 и выше при появлении новой сборки в Nexus.
После установки плагина URLTrigger Plug-in в задании появится пункт URLTrigger → Poll 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.

Увеличить
Адрес для загрузки формируется на основе полей artifactId и versionId или явно задается в переменной
NEXUS_URL
. Скрипт выполняется на linux jenkins slave, на котором должны быть установлены утилиты md5sum, curl и unzip. После загрузки архив распаковывается в каталог nexus в текущем пространстве Jenkins.Пример:
Раскрыть type=javadef 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»