J'essaie d'obtenir une fusion de pré-construction pour travailler à l'intérieur d'un pipeline multibranches et je voudrais éviter d'avoir à coder en dur l'url git dans mon script de pipeline.
Il semble que scm step doive stocker l'URL d'une manière ou d'une autre, mais je ne sais pas comment y accéder.
Vous avez raison, l'objet scm
contient les informations dont vous avez besoin.
Lorsque vous utilisez git comme contrôle source dans un projet Pipeline (ou projet Pipeline Multibranch), la variable globale scm
sera une instance de GitSCM . Cela signifie que `scm.getUserRemoteConfigs () 'renverra une liste d'instances serRemoteConfig . Ces instances ont le nom, l'url et refspec de la télécommande git. Vous pouvez parcourir cette liste pour trouver une télécommande correspondante, ou simplement prendre la première si vous êtes sûr que vous n'avez qu'une seule URL.
def scmUrl = scm.getUserRemoteConfigs()[0].getUrl()
RejectedAccessException - Les méthodes getUserRemoteConfigs
et getUrl
lanceront toutes deux org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException
jusqu'à ce que vous les approuviez manuellement, sous "Gérer Jenkins -> Approbation de script en cours". La seule façon que j'ai trouvée de le faire est d'essayer d'exécuter le script, de lui faire lever une exception d'accès, d'approuver la méthode qui a provoqué l'exception et de répéter pour chaque méthode jusqu'à ce qu'aucune exception d'accès ne soit levée. Heureusement, le paramètre est à l'échelle du serveur, vous n'avez donc à le faire qu'une fois par contrôleur jenkins, pas pour chaque travail de pipeline.
GitHub - Lors des tests avec un GitHub - pipeline multibranches d'origine, getUserRemoteConfigs
a renvoyé deux instances UserRemoteConfig, un pour les succursales régulières et un autre pour les demandes de tirage. Ceux-ci avaient la même URL, donc ce n'est pas grave, mais quelque chose à garder à l'esprit. Par exemple, dans un projet utilisant une connexion HTTPS:
echo scm.getUserRemoteConfigs()
"[
+refs/heads/*:refs/remotes/Origin/* => https://github.com/bitwiseman/project.git (Origin),
+refs/pull/*/head:refs/remotes/Origin/pr/* => https://github.com/bitwiseman/project.git (Origin)
]"
Inspiré par un commentaire en réponse de @BitwiseMan, j'ai trouvé un moyen (hacky) d'obtenir l'URL sans RejectedAccessException:
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.Origin.url').trim()
Veuillez noter que cela doit être fait après checkout scm
. Fondamentalement, vous devez être dans un référentiel git extrait (c'est-à-dire a .git/config
fichier dedans)