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:
- Vaya a la última compilación del trabajo de canalización del que desea limpiar el espacio de trabajo.
- Haga clic en el enlace Reproducir en el menú LHS.
- 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 */
}
}
}