Jenkins Tuberías: Reutilización del espacio de trabajo cuando se carga un script externo tubería Jenkins

votos
3

Tengo el siguiente caso de uso:

  1. Pedido / tirar de un determinado número de revisión de Git, mediante secuencias de comandos escrita tubería
    (Necesito esto porque puedo recuperar la revisión de forma dinámica)

  2. A partir de esa revisión, cargar un archivo-tubería-Jenkins, que se encuentra entre los archivos que hayan sido controladas a cabo

  3. Este archivo se basaría en los archivos de la misma desprotegido revisión
    (por lo tanto, de la misma área de trabajo)

Problema: El-tubería-Jenkins archivo cargado es ejecutado en un nuevo espacio de trabajo. Pero está vacío. Necesito ese archivo para ser ejecutado en el mismo viejo espacio de trabajo.

Pensé, tal vez es debido a que rodea node, ya que la nodepalabra clave crea espacios de trabajo, como se menciona en los documentos. Pero cuando traté de cargarlo fuera del node, Jenkins anulado esto debido a salir de la caja de arena.

Nota: The Jenkins-tubería-archivo se encuentra y realmente es ejecutado. El problema es que durante la ejecución.


Por favor, mire el código de ejemplo:

escritura de la tubería inline

node('master') {
  def latestBuildableRevision = readFile '/my/LATEST-BUILDABLE-REVISION.txt'

  checkout poll:false,
   scm:[$class:'GitSCM', branches:[[name:latestBuildableRevision]],
   doGenerateSubmoduleConfigurations:false,
   extensions:[[$class: 'CleanBeforeCheckout']], submoduleCfg:[],
    userRemoteConfigs:[[credentialsId:'...', url:'...']]]

  load 'further-script-logic.jenkins'
}

Archivo: más-script-logic.jenkins

node('master') {
   // make use of certain files
   // assumption: pwd() is the *same* workspace which were checked-out before
   // problem: it's not, it's a new empty workspace
}
Publicado el 13/05/2016 a las 08:54
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

Un tipo de solución se describe aquí .

  1. Usted tiene que utilizar {...}()los frenos al final de la secuencia de comandos que llama
  2. Usted tiene que volver a escribir el guión llamado para devolver un cierre (lambda)
    {-> /* former code */ }

De esta manera, usted no "regalar" el control de flujo del programa a la secuencia de comandos ejecutados. En su lugar, utiliza su cierre vuelto y "llama a sí mismo". Esto evita Jenkins desde la creación de nuevas áreas de trabajo.

Lamentablemente, no tengo ni idea, si esta solución sería permitir que varios nodos a ser declaradas en el script que llama y / o en el script.

He incorporado estos cambios en el código de ejemplo.
Busque las líneas marcadas con "<--- CHANGE".

escritura de la tubería inline

node('master') {
  def latestBuildableRevision = readFile '/my/LATEST-BUILDABLE-REVISION.txt'

  checkout poll:false,
   scm:[$class:'GitSCM', branches:[[name:latestBuildableRevision]],
   doGenerateSubmoduleConfigurations:false,
   extensions:[[$class: 'CleanBeforeCheckout']], submoduleCfg:[],
    userRemoteConfigs:[[credentialsId:'...', url:'...']]]

  load 'further-script-logic.jenkins'
}()   // <--- CHANGE 1

Archivo: más-script-logic.jenkins

{->   // <--- CHANGE 2
  node('master') {
    // .....
  }
}
Respondida el 13/05/2016 a las 16:01
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more