when starts delete before always actions jenkins jenkins-pipeline workspace

starts - Espacio de trabajo de eliminación de tuberías de Jenkins



pipeline when (10)

Como @gotgenes señaló con la versión Jenkins. 2.74 , funciona a continuación, no estoy seguro desde cuándo, tal vez si alguien puede editar y agregar la versión anterior

cleanWs()

Con la versión 2.16 de Jenkins y el complemento de limpieza del espacio de trabajo que tengo, uso

step([$class: ''WsCleanup''])

para eliminar el espacio de trabajo.

Puedes verlo yendo a

JENKINS_URL/job/<any Pipeline project>/pipeline-syntax

A continuación, seleccione "paso: paso de compilación general" en el paso de muestra y luego seleccione "Eliminar el espacio de trabajo cuando finalice la compilación" del paso de compilación

Estamos ejecutando Jenkins 2.xy amamos el nuevo plugin Pipeline. Sin embargo, con tantas ramas en un repositorio, el espacio en disco se llena rápidamente.

¿Hay algún complemento que sea compatible con Pipeline que pueda borrar el espacio de trabajo en una compilación exitosa?


De hecho, la función deleteDir elimina recursivamente el directorio actual y su contenido. Los enlaces simbólicos y las uniones no se seguirán, pero se eliminarán.

Para eliminar un directorio específico de un espacio de trabajo, ajuste el paso deleteDir en un paso dir.

dir(''directoryToDelete'') { deleteDir() }


El uso de la extensión ''WipeWorkspace'' parece funcionar también. Requiere la forma más larga:

checkout([ $class: ''GitSCM'', branches: scm.branches, extensions: scm.extensions + [[$class: ''WipeWorkspace'']], userRemoteConfigs: scm.userRemoteConfigs ])

Más detalles aquí: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-

Extensiones de GitSCM disponibles aquí: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl


Las soluciones mencionadas deleteDir() y cleanWs() (si usa el complemento de limpieza del espacio de trabajo ) funcionan, pero la recomendación de usarlo en un paso de compilación adicional generalmente no es la solución deseada . Si la compilación falla y se cancela la canalización, esta etapa de limpieza nunca se alcanza y, por lo tanto, el espacio de trabajo no se limpia en las compilaciones fallidas.

=> En la mayoría de los casos, probablemente debería ponerlo en una condición de paso posterior a la construcción como always :

pipeline { agent any stages { stage(''Example'') { steps { echo ''Hello World'' } } } post { always { cleanWs() } } }


Nos aseguramos de trabajar con un espacio de trabajo limpio mediante el uso de una característica del complemento git. Puede agregar comportamientos adicionales como ''Limpiar antes de pagar''. Usamos esto también para ''Podar ramas de seguimiento remoto obsoletas''.


Puede usar deleteDir() como el último paso de la tubería Jenkinsfile (suponiendo que no haya cambiado el directorio de trabajo).


Si ha utilizado un espacio de trabajo personalizado en Jenkins, deleteDir () no eliminará la carpeta @tmp.

Entonces, para eliminar @tmp junto con el espacio de trabajo, use el siguiente

pipeline { agent { node { customWorkspace "/home/jenkins/jenkins_workspace/${JOB_NAME}_${BUILD_NUMBER}" } } post { cleanup { /* clean up our workspace */ deleteDir() /* clean up tmp directory */ dir("${workspace}@tmp") { deleteDir() } /* clean up script directory */ dir("${workspace}@script") { deleteDir() } } } }

Este fragmento también funcionará para el espacio de trabajo predeterminado.


Usé deleteDir () de la siguiente manera:

post { always { deleteDir() /* clean up our workspace */ } }

Sin embargo, también tuve que ejecutar un Éxito o Fracaso DESPUÉS siempre, pero no puede solicitar las condiciones de publicación. El orden actual es siempre, modificado, abortado, fallido, exitoso y luego inestable.

Sin embargo, hay una condición de publicación muy útil, la limpieza que siempre se ejecuta al final, consulte https://jenkins.io/doc/book/pipeline/syntax/

Así que al final mi publicación fue la siguiente:

post { always { } success{ } failure { } cleanup{ deleteDir() } }

Esperemos que esto pueda ser útil para algunos casos de esquina


Usando el siguiente script de canalización:

pipeline { agent { label "master" } options { skipDefaultCheckout() } stages { stage(''CleanWorkspace'') { steps { cleanWs() } } } }

Sigue estos pasos:

  1. Vaya a la última compilación del trabajo de canalización del que desea limpiar el espacio de trabajo.
  2. Haga clic en el enlace Reproducir en el menú LHS.
  3. Pegue la secuencia de comandos anterior en el cuadro de texto y haga clic en Ejecutar

Limpieza : dado que la sección de publicación de una tubería está garantizada para ejecutarse al final de la ejecución de una tubería, podemos agregar alguna notificación u otros pasos para realizar la finalización, notificación u otras tareas de finalización de la tubería.

pipeline { agent any stages { stage(''No-op'') { steps { sh ''ls'' } } } post { cleanup { echo ''One way or another, I have finished'' deleteDir() /* clean up our workspace */ } } }