2012-08-06 9 views
36

Wyciągam włosy, próbując znaleźć sposób na uwzględnienie listy zmian wygenerowanych przez Jenkinsa (z wyciągu SVN) do naszych notatek z Testów. Używam wtyczki Testflight, która ma pole do notatek - ale nie wydaje się, żeby istniał jakiś element/token, który jenkins tworzy, aby osadzić te informacje.Uzyskaj dostęp do Build Changelog w Jenkins

Czy ktoś miał szczęście osiągając coś takiego?

+0

Potrzebowałem dokładnie tego samego. Dziękuję za zadanie tego pytania i jestem jeszcze bardziej wdzięczny za odpowiedź. – makdad

Odpowiedz

33

Wygląda na to, że wtyczka TestFlight rozszerza zmienne umieszczone w polu "Tworzenie uwag", więc pytanie brzmi: jak możemy uzyskać zmiany dla bieżącej kompilacji w zmiennej środowiskowej?

O ile mi wiadomo, wtyczka Subversion nie udostępnia tych informacji za pośrednictwem zmiennej środowiskowej. Jednak wszystkie wtyczki Jenkins SCM integrują informacje z dziennika zmian, jak widać za pomocą linku "Zmiany" w interfejsie internetowym dla każdej kompilacji.

Informacje te są również dostępne za pośrednictwem interfejsu API Jenkinsa, nawet podczas kompilacji.

Na przykład, jeśli dodasz "Execute skorupę" budować krok gdzie uruchomieniu tego polecenia:

curl -s "http://jenkins/job/my-job/$BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment" 

dostaniesz dokument XML podobny do tego:

<changes> 
    <comment>First commit.</comment> 
    <comment>Second commit.</comment> 
</changes> 

Następnie możesz sformatować te informacje w dowolny sposób i umieścić je w zmiennej środowiskowej, do której można się odwołać w sekcji "Uwagi do budowy" TestFlight.

Jednak ustawienie zmiennej środowiskowej w kroku kompilacji nie jest domyślnie trwałe. — w tym celu wymaga użycia EnvInject Plugin.

W tym przypadku, można napisać tekst changelog do tymczasowego pliku z zawartością, takich jak:

CHANGELOG="New in this build:\n- First commit.\n- Second commit." 

Następnie za pomocą etapu budowy z opcją Environment Properties File Path załadować ten plik, zmienna $CHANGELOG istniałby w twoim środowisku i trwają do końca kompilacji, pozwalając ci na użycie go w polu "Build Notes".


Uwaga: I nie był używany TestFlight wtyczki siebie (choć Wziąłem szybki rzut oka na kod), a ja tylko przetestowane API zmiany z repozytorium Git. Podobnie, nie testowałem, w jaki sposób znaki nowej linii powinny być kodowane za pomocą wtyczki EnvInject, co może powodować problemy.

+0

Dziękuję bardzo, Christopher! –

+6

BTW, "możesz następnie sformatować te informacje, jak chcesz" - Użyłem: "sed -e" s/<\/*comment> // g "| sed '/^$/d; G'', aby usunąć znaczniki XML '' i wyczyścić znaki nowej linii. – makdad

+0

Aby uzyskać czyste wyjście z wielu komunikatów o zmianie, kiedyś to wariacja na temat @ makdad to: 'sed -e„s/<\/comment> // g; s//\ t */g; s/<\/*changes> // g "| sed '/^$/d; G'' –

2

zrobiłem jakiś przykład Pythona, który coverts xml do changelog

note.xml powinny być

<changes> 
     <msg>First commit.</msg> 
     <msg>Second commit.</msg> 
</changes> 

rzeczywisty kod Python jest poniżej

from xml.etree.ElementTree import parse 
tree = parse("note.xml") 
root = tree.getroot() 
sentence = 'CHANGELOG =\"' 
cnt = 1 
for element in root.findall('msg'): 
    tempstring = element.text 
    tempstring =str(cnt)+'. '+'\\n'.join(tempstring.splitlines()) 
    sentence =sentence +tempstring +'\\n' 
    cnt = cnt +1 
sentence = sentence + '\"' 
print sentence 
7

Zważywszy, że dziennik Jenkins zmienił format ja zaktualizowano zawartość XML z oryginalnego wpisu. Ponadto, ponieważ oryginalny TestFlight umarł, a wtyczka jest już przestarzała, przerzucam zawartość do pliku HTML do użytku z HockeyKit. To jest naprawdę plik tekstowy z podziałem wierszy. Wprowadzanie łamania linii sed jest ... wymagające, a struna wygląda na bardzo zagmatwana (przynajmniej dla mnie) na pierwszy rzut oka.

#for distribution in projects 
Changelog=$(curl "${BUILD_URL}api/xml?wrapper=changes&xpath=//changeSet//item//msg" | sed -e "s/<\/msg>//g; s/<msg>/\\`echo -e '\r'`/g; s/<\/*changes>//g") 

# Write result to properties file 
echo -e "$Changelog" > "${BuildDestinationPath}/"${BUILD_NUMBER}.html 

Uwaga Edycja: BuildDestinationPath i zmian są moje zmienne lokalne. Zmienne w czapkach są zmiennymi środowiskowymi Jenkins i powinny istnieć w dowolnej instalacji.

+0

część zwijana powinna być inna dla serwerów Jennkins z uwierzytelnianiem –

2

W rzeczywistości można uzyskać dostęp do tych informacji przed zakończeniem fazy budowy, czytając/analizując plik ../builds/$BUILD_NUMBER/changelog.xml wewnątrz folderu kompilacji. Ten plik jest tworzony z wyzwalaczem zatwierdzania SVN/GIT, a nie z końcem fazy kompilacji lub post_build. Oznacza to, że możesz sparsować go na początku fazy budowania tego samego zadania za pomocą skryptu i wstawić dane w zmiennych env.

To jest, jeśli nie chcesz używać curl i XML.

Powiązane problemy