Как передать выбранные значения параметров активного выбора для построения сценария

#maven #jenkins #jenkins-pipeline #jenkins-groovy #jenkins-declarative-pipeline

#maven #дженкинс #дженкинс-конвейер #дженкинс-заводной #дженкинс-декларативный-конвейер

Вопрос:

Я новичок в Дженкинсе, пожалуйста, помогите мне в этом. У меня есть проект maven, который немного сложен, поэтому я разделил тесты с помощью TestNG xmls. На основе потока выполнения я выберу соответствующий XML-файл для создания проекта. На данный момент я создаю сценарий вручную, выбирая требуемый XML-файл, как показано ниже.

Я установил параметр выбора (name= TestSuite), который включает в себя все XML-файлы и включает команду mvn clean test в разделе сборки.

 mvn install test -DsuiteXmlFile=src/test/resources/testSuite/$testSuite
  

Когда я создам, он получит выбранное значение из выпадающего списка параметров выбора и выполнится.

Но мое требование заключается в том, что я хочу интегрировать это для периодического запуска сборки в определенный период времени. Для этого я попытался использовать «Параметры активного выбора», но, пожалуйста, помогите мне, как вызвать выбранные параметры флажка и продолжить mvn install test

Ниже приведен подход, который я использовал.

  1. Я создал сценарий конвейера для создания «Параметров активного выбора и ссылочных параметров»
  2. Затем я попытался извлечь выбранные значения, используя сценарии `echo»: $ {params.Скрипты}»

Ниже приведены мои параметры,

  • Параметр активного выбора: поток
  • Реактивный параметр активного выбора: сценарии
  • Активный ссылочный параметр: информация о потоке

«Скрипты» будут включать флажки и файлы xml

Сборка с параметром UI

Выбранные параметры xml

Вывод консоли конвейера

В этом сценарии, как я передам выбранный xml mvn clean test , потому что на данный момент он передает все выбранные значения с разделителями-запятыми как caseCreation.xml,testng.xml . В связи с этим, как я могу отделить каждый выбранный XML-файл и передать его mvn install test -DsuiteXmlFile=src/test/resources/testSuite/$testSuite .

А также, пожалуйста, помогите мне найти лучший подход к периодическим сборкам в определенный период времени, который мог бы удовлетворить вышеуказанный сценарий.

Заранее спасибо.

`

Ответ №1:

Я хотел бы порекомендовать плагин, который я сам использую для запуска заданий на основе синтаксиса cron с возможностью указания параметров: Параметризованный планировщик

 properties([
    pipelineTriggers([
        parameterizedCron('''
            0 20 * * 1-5 %gitRevision=desktop/dev;brokerName=robotests
            0 00 * * 1-5 %gitRevision=master;brokerName=robotests
        ''')
    ]),
])
  

Если я вас правильно понял, этого должно быть достаточно, чтобы определить несколько запусков с разными параметрами.
Если вы хотите использовать значение параметра активного выбора, то вы должны понимать, что он хранит все значения в виде строки. Используйте Groovy magic для преобразования строки в список и укажите требуемый индекс (разделите его), например

 sh "mvn install test -DsuiteXmlFile=src/test/resources/testSuite/${Scripts.tokenize(',')[0]}"
  

будет вашим первым значением

Комментарии:

1. Спасибо за ответ. Я попробовал со вторым вариантом. Это работает, но я хочу знать, как мне нужно будет выполнять итерацию между выбранными параметрами с помощью сценария конвейера. например: если я выберу 3 варианта из «Скриптов», как я напишу сценарий конвейера, чтобы выполнить итерацию между всеми выбранными параметрами в параметре Scripts

Ответ №2:

Ниже приведен пример декларативного конвейера:

 pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    Scripts.tokenize(',').each{
                        sh "mvn install test -DsuiteXmlFile=src/test/resources/testSuite/${it}"
                    }
                }
            }
        }
    }
}
  

Сценарий:

 node (){ 
    stage("Build") {
        Scripts.tokenize(',').each{
            sh "mvn install test -DsuiteXmlFile=src/test/resources/testSuite/${it}"
        }
    }
}