web-dev-qa-db-fra.com

Accédez à Build Changelog in Jenkins

Je me suis tiré les cheveux en essayant de trouver un moyen d'inclure la liste des modifications générées par Jenkins (tirée du SVN) dans nos notes Testflight. J'utilise le plug-in Testflight, qui contient un champ pour les notes, mais il ne semble exister aucun paramètre/jeton créé par jenkins pour intégrer cette information.

Quelqu'un a-t-il eu de la chance d'accomplir quelque chose comme ça?

36
Jim Weinhart

Il semble que le plug-in TestFlight développe les variables placées dans le champ "Notes de génération". La question qui se pose est donc: comment pouvons-nous obtenir les modifications de la version actuelle dans une variable d'environnement?

Autant que je sache, le plug-in Subversion ne fournit pas ces informations via une variable d'environnement. Cependant, tous les plugins Jenkins SCM intègrent les informations de journal des modifications, comme vous pouvez le constater via le lien "Modifications" de l'interface utilisateur Web de chaque génération.

Ces informations sont également disponibles via l'API Jenkins, même pendant la construction.

Par exemple, si vous ajoutez une étape de génération "Exécuter Shell" où vous exécutez cette commande:

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

Vous obtiendrez un document XML semblable à celui-ci:

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

Vous pouvez ensuite formater ces informations à votre guise et les placer dans une variable d'environnement qui peut ensuite être référencée dans la section "Notes de génération" de TestFlight.

Toutefois, la définition d'une variable d'environnement dans une étape de construction n'est pas persistante par défaut. Pour ce faire, vous devez utiliser le plug-in EnvInject .

Dans ce cas, vous pouvez écrire votre texte de journal dans un fichier temporaire avec un contenu tel que:

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

Ensuite, en utilisant une étape de construction avec l'option Chemin d'accès au fichier de propriétés d'environnement pour charger ce fichier, la variable $CHANGELOG existerait dans votre environnement et persisterait jusqu'à la fin de la construction, vous permettant ainsi de l'utiliser " champ.


Remarque: Je n'ai pas utilisé le plugin TestFlight moi-même (bien que j'aie jeté un coup d'œil au code), et je n'ai testé que les modifications apportées à l'API avec un référentiel Git. De même, je n'ai pas testé la manière dont les nouvelles lignes devraient être codées avec le plugin EnvInject, ce qui pourrait poser problème.

33
Christopher Orr

Étant donné que le format du journal Jenkins a changé, j'ai mis à jour le contenu XML du message d'origine. En outre, depuis que TestFlight est mort et que le plug-in est obsolète, je transfère le contenu dans un fichier HTML à utiliser avec HockeyKit. C'est vraiment un fichier texte avec des sauts de ligne. Faire des sauts de lignes d'insertion sed est .. difficile, et la chaîne semble très déroutante (du moins pour moi) au premier abord. 

#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

Note Edit: BuildDestinationPath et Changelog sont mes variables locales. Les variables en majuscules sont des variables d'environnement Jenkins et doivent exister à tout moment. 

7
Andreja Djokovic

J'utilise celui-ci trouvé ici: http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true}

Très simple et cela fonctionne pour SVN.

4
ferventcoder

J'ai fait quelques exemples en python qui couvrent XML pour CHANGELOGS

note.xml devrait être 

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

le code python actuel est en dessous

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

En fait, vous pouvez accéder à ces informations avant la fin de la phase de construction en lisant/analysant le fichier ../builds/$BUILD_NUMBER/changelog.xml dans le dossier de construction . Ce fichier est créé avec le déclenchement de validation SVN/GIT et pas avec la fin de la phase de construction ou post_build. Cela signifie que vous pouvez l'analyser au début de la phase de construction du même travail avec un script et insérer les données dans des variables env.

C’est si vous ne voulez pas utiliser curl et XML.

2
Joniale

Le plugin Testflight a une option pour cela. Voici le commit:

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

Je ne l'ai pas vu dans la dernière version de plug-in testflight, j'ai donc construit le plugin à partir de git et cette option est disponible.

enter image description here

0
Kirby Todd