Téléchargement des fichiers de la dernière révision SVN vers SFTP dans Jenkins CI
-
28-10-2019 - |
Question
Je configure le travail Jenkins pour télécharger des fichiers de Subversion vers SFTP. Publier sur SSH va assez bien, mais il télécharge tous les fichiers sur chaque version.
Pour certains projets, nous avons des milliers de fichiers et le téléchargement coûte plus d'une heure, ce n'est donc pas une option.
Quelqu'un peut-il suggérer un moyen de télécharger uniquement des fichiers modifiés lors de la dernière révision?
La solution
Vous pouvez utiliser Plugin de subversion Pour interroger pour les modifications SVN et exécuter un travail qui ne fait rien en particulier. Appelons ça Votre PollingJob. Ensuite, appelez l'API Jenkins via HTTP comme ceci:
http://[jenkins_server]/api/xml?depth=2&xpath=/hudson/job[name='YourPollingJob']/build[id='BUILD_ID']/changeSet
où BUILD_ID
est l'identifiant de construction réel du travail que vous venez de gérer (le format habituel est quelque chose comme 2012-02-21_16-15-49
). Examiner le résultat. Notez que toutes les informations sur les fichiers qui ont changé depuis la construction précédente sont là - il vous suffit de l'analyser.
Alors maintenant, vous pouvez faire ce qui suit: Votre PollingJob appellera un autre emploi - appelons-le Copier - et passez-lui c'est BUILD_ID
comme paramètre (via le Plugin de déclenchement paramétré; Assurez-vous d'appeler Copier comme étape post-construction, pas comme une étape de construction). Copier Interrogera ensuite Jenkins via HTTP (comme ci-dessus, la meilleure façon est de le faire via wget
), analyser les résultats et faire la copie.
Vous pouvez tout faire dans un seul travail, mais c'est un peu plus compliqué et difficile à déboguer.
De plus, il est probablement prudent de copier tout le référentiel une fois par jour (tous les soirs).
Autres conseils
Vous pouvez conserver ces fichiers dans un référentiel séparé. Il semble que des VC distribués comme Mercurial ou Git seraient les meilleurs pour cela dans votre cas. Vous pouvez soit le configurer dans l'espace de travail et ajouter une étape de build pour commettre des fichiers modifiés et pousser l'engagement sur le serveur où vous souhaitez le publier (ce qui devrait fonctionner tant que vous n'éloignez pas l'espace de travail ou ne construisez pas sur plusieurs machines) ou ajouter des étapes supplémentaires pour cloner / tirer le dépôt avec les artefacts du serveur sur lequel vous les gardez.