Я успешно воспроизвел полный сценарий (т. Е. Требование «настроить задание Jenkins, которое получает все существующие теги из определенного репозитория реестра контейнеров Azure и делает их доступными для выбора в качестве параметров при создании задания») следуя указанному ниже процессу.
Только к вашему сведению, это достигается с помощью «параметра выбора», как показано на скриншоте ниже.
Для работы приведенного ниже сценария конвейера Jenkins необходимо
Ниже приведен скрипт конвейера Jenkins.
#!groovy
import groovy.transform.Field
import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript
def props = []
@Field
def newParams = []
node {
try {
regenerateJob = (params.RegenerateJob == null) ? true : params.RegenerateJob
}
catch (MissingPropertyException e) {
regenerateJob = true
}
stage('test'){
withCredentials([azureServicePrincipal('JENKINSSERVICEPRINCIPALCREDENTIALID')]) {
def shtagsoutput = sh (returnStdout: true, script: '''az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID > /dev/null
az account set -s $AZURE_SUBSCRIPTION_ID > /dev/null
shtagsoutputtemp=$(az acr repository show-tags --name "AZURECONTAINERREGISTRYNAME" --subscription $AZURE_SUBSCRIPTION_ID --repository "AZURECONTAINERREGISTRYREPOSITORYNAME" | jq '.[]')
shtagsoutputtempfinal=$(echo $shtagsoutputtemp | sed 's/"//g')
echo "${shtagsoutputtempfinal}"''').split(' ')
shtagsoutputfinal = [shtagsoutput].flatten()
newParams += [$class: 'ChoiceParameterDefinition', name: 'Phase', choices: shtagsoutputfinal]
newParams += [$class: 'BooleanParameterDefinition', name: 'RegenerateJob', defaultValue: false]
props += [$class: 'ParametersDefinitionProperty', parameterDefinitions: newParams]
properties(properties: props)
}
}
}
Обратите внимание, что при создании этого задания Jenkins оно остается без параметров. Но после первой сборки задание Jenkins восстанавливается и выбирается с новыми параметрами.
Приветствия !!
С уважением, Кришна
Paul, можно также сгенерировать код во время изготовления с TextTransform.exe или задачей MSBuild Elton Stoneman. Просто имейте в виду, что поведение встроенных директив, как блок и включает, отличается, когда T4 работает в Visual Studio по сравнению с хостом командной строки.
Отвечая на мой собственный вопрос, они, как предполагается, сгенерированы во время проектирования согласно этому обсуждению:
https://web.archive.org/web/20081227142303/http://www.olegsych.com/2008/02/t4-template-directive/