Проблема чтения параметризованного аргумента в Jenkins - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть задание Дженкинса со следующей переменной аргументов.

source_host (параметр String) dest_user (параметр выбора) backup (параметр флажка)

Я передаю аргументы Дженкинса в Jenkins Execute Shell, как показано ниже:

$ANSIBLE_SCRIPT_HOME/transfer.sh -a $source_host -b $dest_user -c $backup

Ниже приведен скрипт Transfer.sh.

while getopts ":a:b:c:" opt; do

  case $opt in

    a) source_host="$OPTARG"

    ;;

    b) dest_user="$OPTARG"

    ;;

    c) isbkup="$OPTARG"

    ;;

    \?) echo "Invalid option -$OPTARG" >&2

    ;;

  esac

done

printf "Argument source_host is %s\n" "$source_host"

printf "Argument dest_user is %s\n" "$dest_user"

printf "Argument backup is %s\n" "$backup"

Версия Jenkins: ядро ​​и библиотеки Jenkins 2.138.1

Многочисленные уязвимости безопасности в Jenkins 2.145 и более ранних версиях, а также LTS 2.138.1 и более ранние версии

Если я не выбираю dest_user (параметр выбора), то есть пустым, и вызываю оболочку execute, то в файле Transfer.sh отображается неверная запись для $ dest_user

Аргумент source_host - это user1

Аргумент dest_user is -c

Аргумент резервного копирования отсутствует

Я ожидал, что dest_user ничего не напечатает в выводе вместо -c.

1 Ответ

0 голосов
/ 01 ноября 2018

Если "dest_user" пуст или даже пуст, $ dest_user "уходит" и -c становится значением аргумента -b. Я думаю, вы можете попробовать

$ANSIBLE_SCRIPT_HOME/transfer.sh -a "$source_host" -b "$dest_user" -c "$backup"

Тогда, если $ dest_user пуст, вы передаете пустую строку в качестве параметра. Разница:

/path/to/ansible/transfer.sh -a source_host_value -b -c backup_value

против

/path/to/ansible/transfer.sh -a "source_host_value" -b "" -c "backup_value"

Поместив ваш скрипт в x.sh, я получил:

prompt> $ ./x.sh -a a -b b -c c
Argument source_host is a
Argument dest_user is b
Argument backup is c

prompt> $ ./x.sh -a a -b -c c
Argument source_host is a
Argument dest_user is -c
Argument backup is

prompt> $ ./x.sh -a "a" -b "" -c "c"
Argument source_host is a
Argument dest_user is
Argument backup is c
...