webentwicklung-frage-antwort-db.com.de

Erhalten Sie Zugang zu Build Changelog in Jenkins

Ich habe mir die Haare ausgezogen und versucht, einen Weg zu finden, die Liste der von Jenkins erzeugten Änderungen (aus dem SVN-Pull) in unsere Testflight-Notizen aufzunehmen. Ich verwende das Testflight-Plugin, das ein Feld für Notizen enthält - aber es scheint keinen Parameter/Token zu geben, den Jenkins erstellt, um diese Informationen einzubetten.

Hat jemand Glück gehabt, so etwas zu erreichen?

36
Jim Weinhart

Es sieht so aus, als ob das TestFlight-Plugin im Feld "Build Notes" platzierte Variablen erweitert. Die Frage ist also: Wie können wir die Änderungen für den aktuellen Build in eine Umgebungsvariable bringen?

Soweit mir bekannt ist, stellt das Subversion-Plugin diese Informationen nicht über eine Umgebungsvariable bereit. Alle Jenkins SCM-Plugins integrieren jedoch Änderungsprotokollinformationen, wie Sie über den Link "Änderungen" in der Web-Benutzeroberfläche für jeden Build sehen können.

Diese Informationen sind auch über die Jenkins-API verfügbar, auch wenn ein Build ausgeführt wird.

Wenn Sie beispielsweise einen Erstellungsschritt "Shell ausführen" hinzufügen, in dem Sie den folgenden Befehl ausführen:

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

Sie erhalten ein ähnliches XML-Dokument:

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

Sie können diese Informationen dann beliebig formatieren und in eine Umgebungsvariable einfügen, auf die Sie dann im TestFlight-Abschnitt "Build Notes" Bezug nehmen können.

Das Festlegen einer Umgebungsvariable in einem Erstellungsschritt ist jedoch standardmäßig nicht dauerhaft. Dazu ist das EnvInject Plugin erforderlich.

In diesem Fall könnten Sie Ihren Änderungsprotokolltext in eine temporäre Datei mit folgenden Inhalten schreiben:

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

Wenn Sie dann einen Build-Schritt mit der Option Environment Properties File Path verwenden, um diese Datei zu laden, ist die Variable $CHANGELOG in Ihrer Umgebung vorhanden und bleibt bis zum Ende des Builds bestehen " Feld.


Anmerkung: Ich habe das TestFlight-Plugin selbst nicht verwendet (obwohl ich mir den Code kurz angesehen hatte) und die Änderungs-API nur mit einem Git-Repository getestet. Ebenso habe ich nicht getestet, wie die Zeilenumbrüche mit dem EnvInject-Plugin codiert werden sollten. Dies könnte zu Problemen führen.

33
Christopher Orr

Da Jenkins das geänderte Format protokollierte, habe ich den XML-Inhalt des ursprünglichen Beitrags aktualisiert. Da das ursprüngliche TestFlight nicht mehr gültig ist und das Plugin nun veraltet ist, stecke ich den Inhalt in eine HTML-Datei zur Verwendung mit HockeyKit. Es ist wirklich eine Textdatei mit Zeilenumbrüchen. Sed-Insert-Zeilenumbrüche zu machen ist schwierig, und die Saite wirkt auf den ersten Blick sehr verwirrend (zumindest für mich). 

#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

Hinweis Bearbeiten: BuildDestinationPath und Changelog sind meine lokalen Variablen. Variablen in Caps sind Jenkins-Umgebungsvariablen und sollten bei jeder Installation vorhanden sein. 

7

Ich verwende dieses hier: http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true}

Sehr einfach und es funktioniert für SVN.

4
ferventcoder

Ich habe ein Python-Beispiel gemacht, das xml in CHANGELOGS umwandelt

note.xml sollte sein 

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

der tatsächliche Python-Code befindet sich unten

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
2
I.C.Baek

Tatsächlich können Sie auf diese Informationen zugreifen, bevor die Erstellungsphase abgeschlossen ist, indem Sie die Datei ../builds/$BUILD_NUMBER/changelog.xml im Erstellungsordner lesen/analysieren .. Diese Datei wird mit dem SVN/GIT-Commit-Triggering erstellt und nicht am Ende der Build- oder Post_build-Phase. Das heißt, Sie können es zu Beginn der Erstellungsphase desselben Jobs mit einem Skript analysieren und die Daten in env-Variablen einfügen.

Dies ist der Fall, wenn Sie Curl und XML nicht verwenden möchten.

2
Joniale

Das Testflight Plugin hat hierfür eine Option. Hier ist das Commit:

https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36

Ich habe es in der letzten Version des Testflight-Plugins nicht gesehen, also habe ich das Plugin aus git erstellt und es hat diese Option.

enter image description here

0
Kirby Todd