Modyfikowanie opisu Jenkinsa dla kompilacji
chciałbymzdalnie zmień opis budowy Jenkinsa. Mój skrypt jest ustawiony i gotowy z wyjątkiem jednego drobnego problemu: wielu opisów linii.
Używam REST API i JSON w Jenkins, aby pobrać stary opis:
old_description=$(curl -s --user "$USER:$PASSWORD" --data-urlencode "tree=description" \
"$jenkins_url/job/$job_name/$build_number/api/json")
old_description=${old_description#*:\"} #Remove JSON garbage
old_description=${old_description%\"\}} #Remove JSON garbage
Polecenie `curl wyciąga:
<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=green><b>At first you don't succeed. Try again</b></font>
(Uwaga: Dodałem podziały wierszy, aby ułatwić czytanie. To jest wyciągane jako pojedyncza linia).
The\r\n
są oddzielnymi liniami, więc robię to:
old_description=$(sed 's/\\r\\n/\
/g' <<<$old_description)
I to się zmienia$old_description
do:
font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font>
(UWAGA: Nowe linie są częścią wartości. To jest opis trzech linii.)
Mój program (w zależności od parametrów wiersza poleceń) może zastąpić, dołączyć lub dodać nowy opis do kompilacji:
if [ "$prepend_flag" -a -n "$old_description" ] #Prepend new description to old description
then
new_description="$new_description<br/>
$old_description"
elif [ "$append_flag" -a -n "$old_description" ] #Append new description to old description
then
new_description="$old_description<br/>
$new_description"
fi
Teraz powtórzę opis:
if curl -u $USER:$PASSWORD --data-urlencode "description=$new_description" \
--data-urlencode "Submit=Submit" \
"$jenkins_url/job/$job_name/$build_number/submitDescription"
then
echo "Description successfully changed on Build #$build_number in Jenkins job $job_name"
else
echo "WARNING: Description was not set. Manually change the descripiton of the build"
echo " for Build #$build_number in Jenkins job $job_name"
fi
Jeśli przygotowuję lub dołączam nowy opis za pierwszym razem, otrzymuję to w Jenkins:
<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font><br/>
<font color=red><b>My new description</b></font><br/>
Wygląda dobrze. Następnym razem to nie działa. Rozumiem:
<font color=blue><b>At first you don't succeed. Try again</b></font><br/>\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>\n<font color=green><b>At first you don't succeed. Try again</b></font><br/>\n<font color=red><b>My new description</b></font><br/>
<font color=blue><b>My new new description</b></font>
Zanotuj\n
pojawia się.
Jak mogę rozwiązać ten problem?
Włożyłem cały programpastebin.