#bash #shell #jenkins
Вопрос:
for bool in $jobdummyjob1 $jobdummyjob2 $jobdummyjob3
do
echo "Boolean Value is $bool"
if "$bool" ; then
echo "$alljobs"
curl -X POST https://jenkins.delasport.com/job/$bool/build --user veselin.tonchev@delasport.com:11880a2d5164f159e10c61e77cc416e311
fi
done
Все, что мне нужно, это каким-то образом взять имена jobdummyjob1, 2, 3 и поместить их в URL-адрес в виде строки. Эти переменные являются логическими, поэтому, когда я это делаю, я получаю значение true или false в URL. Мне нужно не значение переменной, а ее имя.
Сначала я запускаю «для» и просматриваю каждый объект. Каждый объект содержит логическое значение. Затем я выполняю проверку true/false, и если это правда, мне нужно получить строковое имя той же переменной и поместить его в URL-адрес . Это работа Дженкинса.
Комментарии:
1. Это не проблема «Дженкинса». Это просто оболочка интерполирует переменную в цикле, поэтому она передает значения. Вы хотите «перебирать имена переменных, а не значения». Множество ответов , если вы ищете это.
2. Это не то, что мне было нужно. Я отправил мне, как напечатать имя переменной, и это здорово, и я это знаю. Мне нужно понять, как напечатать имя и значение одной и той же логической переменной/. Сначала мне понадобится значение true или false, затем мне понадобится его имя.
Ответ №1:
Вы можете использовать косвенное использование переменных:
for name in jobdummyjob1 jobdummyjob2 jobdummyjob3
do
bool=${!name}
echo "Boolean Value is $bool"
if "$bool" ; then
echo "$alljobs"
curl -X POST https://jenkins.delasport.com/job/"$name"/build --user veselin.tonchev@delasport.com:11880a2d5164f159e10c61e77cc416e311
fi
done
Но чище использовать ассоциативный массив:
declare -A bools
bools=([jobdummyjob1]=true [jobdummyjob2]=false [jobdummyjob3]=true)
for name in "${!bools[@]}" ; do
bool=${bools[$name]}
if ...
done
Комментарии:
1. Третий вариант: Используйте подстановочный знак имени переменной (если все соответствующие переменные имеют, например, один и тот же хорошо известный префикс имени).
jobdummyjob1=true; jobdummyjob2=false; jobdummyjob3=true; for var in "${!jobdummyjob@}"; do echo "${var}=${!var}"; done
(Недостатком является то, что у вас нет такого большого контроля над порядком итераций.)2. К сожалению, я попробовал ваше предложение, но безуспешно. Я копаюсь в поисках подстановочного знака и начинаю думать, что Дженкинс не поддерживает подстановочные переменные
3. Какая часть-Дженкинс, а какая часть-баш?
4. Я заставил его работать с этим сценарием, но я столкнулся с другой проблемой, которая, я надеюсь, должна быть последней: проблема в том, что если имя логической переменной начинается с числа или имеет некоторые специальные символы, как в случае с «18dummyjob» и «18-job.com-тест», оно каким-то образом исключается, и Дженкинс говорит, что: /tmp/jenkins18288022382660040755.sh: 13: /tmp/jenkins18288022382660040755.sh: dummyjob: не найдено Числа буквально пропущены, что изменяет значение переменной. У вас есть какие-либо идеи о том, какую строковую операцию я мог бы использовать в этом случае? Также теряется логическое значение.
5. код для bool в $jobdummyjob1 $jobdummyjob2 $jobdummyjob3 $18dummyjob делать countOuter=$((countOuter 1)) имя в jobdummyjob1 jobdummyjob2 jobdummyjob3 18dummyjob делать countInner=$((countInner 1)) Если [ «$countOuter» -ЭК «$countInner» ] amp;amp; «$боол»; затем локон -х пост Дженкинс. delasport.com/job/$имя/сборка —пользователь veselin.tonchev@delasport.com:11880a2d5164f159e10c61e77cc416e311 эхо «ПОКАЗАТЬ БУЛ — — — — — — — $бул» Подсчет=0, сделано Подсчет=0 сделано «код»