Как вызвать метод общей библиотеки jenkins в jenkinsFile - PullRequest
0 голосов
/ 21 апреля 2020

Описание

Я преобразую свой проект jenkinsfiles в общую библиотеку, создаю повторно используемые методы в groovy. Я использую плагин extended_choice_parameter для параметризованной сборки в Jenkins. Я использую это для передачи значений, таких как кластер, этап, учетные данные и т. Д. c на работу Дженкинса. Теперь я хочу использовать разделяемую библиотеку Jenkins, где я могу определять функции с параметрами и вызывать их в jenkinsfile с аргументами.

Задача

При использовании разделяемой библиотеки для параметров, которая является блоком внутри «конвейера» в jenkinsFile я получаю ошибку, связанную с использованием функции параметра. Я создал этот файл jobParams. groovy

List commonParams() {
     //return list of parameters
     def paramsList = [
        choice(name: 'stage', choices: ['lab', 'dev', 'qa', 'uat', 'prod'], description: 'select stage name' ),
        choice(name: 'playbook',
                choices: [  '',
                            'Linux',
                            'Unix',
                            'CentOS',
                            'Ubuntu',
                            'Debian'
                          ],
                description: 'select the playbook to deploy'
              ),
        credentials(name: 'sshCredentialsId', defaultValue: 'lc_ikep_ansible', credentialType: "Username with password", required: true, description: 'SSH credentials for Ansible' ) ,
        string(name: 'ansibleTags', defaultValue: '', description: 'Type in ansibleTags separated by space, example: "pre-install ikep-acls"'),
        string(name: 'extraVars', defaultValue: '', description: 'Type in extraVars in format: --extra-vars=\'{key1: {key2: \"value2\", key3: \"value3\"}}\''),
        choice(name: 'verboseLogging', choices: ['', '-v', '-vvv', '-vvvv'], description: 'Select ansible verbose logging'),
        booleanParam( name: 'forceDeploy',
                      defaultValue: false,
                      description: 'Activate to force deployment for non-master branches'
                    )
     ]

     return paramsList

}

Теперь я вызываю этот список в jenkinsfile, так как эти параметры генерируются до того, как мы нажимаем BUILD в jenkins. Используя следующий код, я могу напечатать все параметры, определенные в списке выше. Но теперь, как я могу использовать это как параметр для генерации параметров сборки в Jenkins.

/* Pipeline */
def commonParams = jobParams.commonParams()
    String listAsString =  "[\"${commonParams.join('", "')}\"]"
    echo "printing variables ${listAsString}"

Пожалуйста, предложите, поскольку я не нашел действительный вариант использования при поиске inte rnet. Внутри блок конвейера в файле jenkins Я попытался выполнить следующее, но выдает ошибку, указывающую

pipeline {
  agent { label "ansibleDeployments"}
  options { 
    ansiColor('xterm') 
    disableConcurrentBuilds()
    }
  environment {
    ansibleTags = 'all'
    }
  parameters {
    (listAsString)
    }

ОШИБКА

WorkflowScript: 67: Expected a build parameter definition @ line 67, column 5.
       (listAsString)
       ^

1 Ответ

0 голосов
/ 23 апреля 2020

Кажется, что вы передаете строку вместо списка, блок параметров может получить список.

parameters << commonParams

Также вы можете проверить определение каждого закрытия в https://jenkins.io/doc/pipeline/steps/

...