J'ai créé un emploi de pipeline et j'aimerais obtenir le numéro de version SVN pour permettre le traitement en aval ultérieur dans un appel à un script shell. J'utilise un script de pipeline similaire à ce qui suit: existe une documentation sur la fonction de paiement disponible? Est-il possible de saisir le numéro de révision SVN? Je peux voir que la révision est sortie sur le journal. P> P>
7 Réponses :
Je pense que l'un des meilleurs choix peut être utilisé un simple petit "script de console groovy" pour obtenir le numéro de révision, puis mettre dans une variable Jenkins. P>
Quelque chose comme ça pour vous donner une idée:
lien a> p>
Prenez aussi un coup d'oeil à cette question: Lien a> p>
@ivoryjavaboy Malheureusement, votre premier lien fourni est défectueux. Recherché sur Google mais des liens similaires ne sont pas résolvables. Le deuxième lien que j'ai vu, mais essayant d'utiliser cette variable n'a pas fourni de solution. Il résout toujours NULL
Sweetfeet j'ai corrigé le premier lien ... à propos de la variable que je ne l'ai pas essayée mais que je sache qu'il y a beaucoup de variables de Jenkins inconnues, je suppose que cela fonctionne. Au fait, comme je vous l'ai dit .. le groovy one c'est juste un exemple, je ferais un script simple Groovy.
Merci@ivorujavaboy
Malheureusement, on tombe une faute des restrictions de sécurité. Impossible d'utiliser "" .execute () comme il s'agit d'une méthode statique. Impossible d'utiliser le constructeur de processbuilder pour obtenir un processus car votre n'est pas autorisé à utiliser le constructeur avec l'argument de la liste. N'aura pas de cheveux à gauche bientôt.
J'ai fini par appeler une coquille pour obtenir le numéro de révision SVN comme suit
def svnVersionNumber = sh( script: "svn info --show-item last-changed-revision $url", returnStdout: true )
Variable d'environnement JENKINS SVN_REVISION Fournit que tout de suite p>
À utiliser dans le script ANT, il s'agit de: $ {env.svn_revision} code>
Svn_revision est hausse jusqu'à maintenant pas encore pris en charge dans des scripts de pipeline
Cela peut fonctionner dans une fourgonnette mais ce n'était pas la question.
Ce code fonctionne pour moi dans Jenkins Pipeline:
String url = 'svn+ssh:...' SVN_REVISION_IN = sh returnStdout: true, script: 'svn info --show-item last-changed-revision ' + url currentBuild.displayName = "Rev: ${SVN_REVISION_IN}"
Il y a un fichier appelé révision.txt dans la version de construction. subversionscm Fournit des méthodes pour lire ce fichier.
//Here remote returns url@revision but the revision part is across the entire repo //We will use the url part to get the revision for our branch def remote = scm.locations.first().remote def url = remote.split('@').first() //The revision file has the revision for our branch. Parse returns a map. def revmap = scm.parseRevisionFile(currentBuild.rawBuild) revmap[url]
org.jenkinsci.plugins.scriptsecurity.sandbox.ReçuDaccessé Xception: scripts non autorisés à utiliser la méthode hudson.scm.subversionscm getlocations :(
Je viens de l'approuver sous Gérer Jenkins »Approbation de script en cours
Dans le script de pipeline Groovy, il est possible d'obtenir des résultats de la commande Checkout SCM code> dans la variable TREEMAP, puis d'obtenir ce dont vous avez besoin:
def checkoutResults = checkout([
poll: false,
scm: [
$class: 'SubversionSCM',
...
]
])
echo 'checkout results' + checkoutResults.toString()
echo 'checkout revision' + checkoutResults['SVN_REVISION']
echo 'checkout revision' + checkoutResults['SVN_REVISION_1']
echo 'checkout revision' + checkoutResults['SVN_REVISION_2']
J'ai eu le même problème, mais vous pouvez le résoudre en utilisant la carte qui est renvoyée à partir de l'appelant SCM Checkout . Il contient une valeur pour svn_revision.
// Get some code from a SVM repository def scmVars = checkout( ... ) def svnversionnumber = scmVars.SVN_REVISION
Puis-je obtenir le numéro de révision SVN sans obtenir / télécharger le code?
Cette affectation fonctionne-t-elle également dans la syntaxe déclarative (sous un pipeline code> et non le nœud code> code>)? J'ai continué à obtenir des erreurs d'analyse sur
def code>
Peu importe! J'ai besoin de mettre des choses dans un script {..} code> bloquer pour pouvoir "échapper" à la syntaxe de pipeline scriptée ( DOC ) ... De plus, notez que la réponse de @mikhail ci-dessous élaborée, si vous vérifiez à partir de plusieurs URL, l'accesseur de numéro de révision sera être suffixé numérique.
Est-ce que cela fonctionne toujours? Ma console affiche un numéro de révision et la SVN_Revision ne correspond pas. DEF CHECKOUTRESUTRES = CHECKETTRESUTRES = CHECKOUT ($ CLASSE: 'SUBVERSIONSCM', ...) ECHO "COMPLET CHECKOUTRESUTRES:" + CHECKOUTRESUTIONS DEF VersionNumber = checkoutresults.svn_revision echo Manager.build.getDisplayName () + "" + VersionNumber Checkout Journal Ex: Mise à jour < Un href = "https: // myrepo / chemin" rel = "Nofollow NOREFERRER"> MyRepo / Chemin à la révision '2019-04-30T11: 06: 10.962 -0400' Utilisation des informations d'identification ... dans le royaume ' << a href = "https: // myRepo: 443" rel = "nOfollow noreferrer"> myRepo: 443 > VisualSvn Server 'à la révision 25043
@Alexweitz j'ai finalement obtenu cela pour travailler pour moi en changeant la syntaxe sur cette ... def checkoutresults = Checkout ([$ classe: 'subversionscm' ... Snip ...) Manager.build.setdisplayName (gestionnaire.build. getdisplayName () + "" + checkoutrésults ['svn_revision'])
Veuillez noter que ces informations sont actuellement (20202020) non 100% fiables. Dans notre configuration, nous voyons des cas où le SVN_Revision signalé n'est pas la révision réelle qui a été vérifiée. Ceci est en combinaison avec SVN: externes et bibliothèques partagées. Il pourrait être lié à Problèmes.jenkins-ci.org/browse/jenkins-45489 a>.
Quelle version essayez-vous exactement d'obtenir? Version SVN Server? Version cliente? Version de code?
Le numéro de révision du code @ pom12