Как отправить необязательные аргументы через Дженкинса - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть конвейер jenkins, который получает аргументы, которые будут влиять на аргументы для скрипта python, который я хочу запустить:

Файл Jenkins:

pipeline {
    agent {label "master"}
    parameters {
        string(name: "add_option_x", defaultValue: '')
        string(name: "add_option_y", defaultValue: '')
    }
    stages {
        stage ("Z") {
            agent {label "master"}
            steps { 
                script {
                    sh "python my_script.py <OPTIONAL_ARGS>"
                } } } }

Скрипт Python:

from argparse import ArgumentParser
p = ArgumentParser()
p.add_argument('--x')
p.add_argument('--y')
print(vars(p.parse_args()))

Теперь я хочу, чтобы через сценарий jenkins можно было отправлять 4 варианта аргументов args:

 1. sh "python my_script.py"
 2. sh "python my_script.py --x ${params.x}"
 3. sh "python my_script.py --y ${params.y}"
 4. sh "python my_script.py --x ${params.x} --y ${params.y}"

Как лучше всего это сделать?(Я не хочу иметь глобальную строку "python my_script.py" и, циклически перебирать параметры и добавлять подстроку всякий раз, когда я нахожу, что параметр не пустой. Это выглядело бы ужасно в groovy, AFAIK)

1 Ответ

1 голос
/ 23 сентября 2019

Если вы не хотите писать цикл, вы можете при желании заменить внутри строки:

def params = [x: "x"]
println """python thescript ${params.x ? "-x ${params.x}" : ""} ... """
// => python thescript -x x ... 

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

Если вы просто хотите простое сопоставление от параметра к аргументу, версия "цикла" будет выглядеть так:

def params = [x: "x"]

def args = [x: "--the-x", y: "--some-y"].findAll{
    it.key in params
}.collect{
    "${it.value} '${params[it.key]}'"
}.join(" ")

println args
// => --the-x 'x'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...