Параметр Jenkins Active Choices с Docker для получения лазурных меток - PullRequest
0 голосов
/ 17 января 2019

для заданий развертывания. Я хочу настроить задание jenkins, которое получает все существующие теги из определенного хранилища Azure и делает их доступными для выбора в параметре Active Choice.

Я попробовал несколько вещей, но ничего не работает. в приведенном ниже коде вы можете увидеть последний код, с которым я пытался. Я хочу вытащить док-контейнер, в котором есть наш azure cli и наш конфиг, после этого я хочу получить доступ к контейнеру и запустить команду azure (пока нет в коде, но раньше он не работает). Ошибка, которую я получаю,

groovy.lang.MissingMethodException: No signature of method Script1.sh() is applicable for argument types: (Java.lang.String) values: "docker login -u... and so on"
def dockerImage = 'ourRegistry/deploy/azure'
def output = []
try {    
          sh 'docker login -u="our_robot_user" -p="TOKEN" ourRegistry && docker pull ${dockerImage}'
          dockerRun = docker.image(dockerImage).withRun('--env-file=azure.env')
          dockerRun.inside("-u user") {
                output.push("INSIDE")
                //res = sh(returnStdout: true, script: 'az acr repository show-tags --name xx --subscription "xx" --repository "xx"')
                //output.push(res)
    }
    } catch (error) {
          output.push(error)
    }
return output

Можно ли даже запустить это в активном параметре выбора? Или я могу импортировать определенные библиотеки, чтобы это работало? Или есть лучший способ?

1 Ответ

0 голосов
/ 06 февраля 2019

Я успешно воспроизвел полный сценарий (т. Е. Требование «настроить задание Jenkins, которое получает все существующие теги из определенного репозитория реестра контейнеров Azure и делает их доступными для выбора в качестве параметров при создании задания») следуя указанному ниже процессу.

Только к вашему сведению это достигается с помощью «параметра выбора», как показано на скриншоте ниже.

enter image description here

Для работы приведенного ниже сценария конвейера Jenkins необходимы

  1. для установки Azure CLI на узле, где вы запускаете конвейер (т.е. в этом примере в мастере Jenkins)
  2. чтобы JSON-процессор командной строки 'jq' был доступен в узле, где вы запускаете конвейер (т.е. в этом примере в мастере Jenkins)
  3. для добавления субъекта службы Azure к учетным данным Jenkins, как указано здесь -> https://docs.microsoft.com/en-us/azure/jenkins/execute-cli-jenkins-pipeline#add-azure-service-principal-to-jenkins-credential

Ниже приведен скрипт конвейера 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 восстанавливается и выбирается с новыми параметрами.

Ура !!

С уважением, Кришна

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