¿Cómo obtengo la URL de SCM dentro de un Gasoducto Jenkins o Multibranch Pipeline?

Estoy tratando de get una fusión de preconstrucción para trabajar dentro de una tubería multibranquio y me gustaría evitar tener que codificar la url git en mi secuencia de commands.

Parece que el paso scm debe almacenar la URL de alguna manera, pero no puedo encontrar la forma de acceder a ella.

Tiene razón, el object scm tiene la información que necesita.

Cuando se utiliza git como control de origen en un proyecto de scm (o proyecto de scm ), la variable global scm será una instancia de GitSCM . Eso significa que `scm.getUserRemoteConfigs () 'devolverá una list de instancias de UserRemoteConfig . Esas instancias tienen el nombre del control remoto git, url y refspec. Puede iterar sobre esa list para encontrar un control remoto que coincida, o simplemente tomar la primera si está seguro de que solo tiene una url.

 def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

NOTAS

  • RejectedAccessException : los methods getUserRemoteConfigs y getUrl arrojarán org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException hasta que los aprueben manualmente, en "Gestionar Jenkins -> Aprobación de script en process". La única forma que he encontrado para hacerlo es intentar ejecutar el script, hacer que arroje una exception de acceso, aprobar el método que causó la exception y repetir para cada método hasta que no se generen más excepciones de acceso. Afortunadamente, la configuration es para todo el server, por lo que solo tiene que hacer esto una vez por cada controller jenkins, no para cada trabajo de canalización.

  • GitHub : durante la testing con una canalización multibranquio de origen GitHub , getUserRemoteConfigs devolvió dos instancias de UserRemoteConfig, una para las twigs regulares y otra para las requestes de extracción. Estos tenían la misma url así que no es gran cosa, pero algo a tener en count. Por ejemplo, en un proyecto que usa una connection basada en 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) ]" 

Inspirado por un comentario en respuesta de @BitwiseMan, he encontrado una forma (hacky) de get la URL sin RejectedAccessException:

 checkout scm def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

Tenga en count que debe hacerse después de la checkout scm . Básicamente, debe estar en un repository git desprotegido (es decir, tiene el file .git/config en él)

Tienes que save la url git dentro de tu trabajo padre y pasar el parámetro a la fase hija

o simplemente puede clonar el proyecto en su trabajo raíz y el formulario de trabajo allí.

Use el https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin es el plugin de Jenkins git