Respuestas:
Puede usarlo deleteDir()
como el último paso de la tubería Jenkinsfile (suponiendo que no haya cambiado el directorio de trabajo).
checkout scm
.
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 Jenkins Versión 2.16 y el Plugin 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
Luego, seleccione "paso: paso de compilación general" en el paso de muestra y luego seleccione "Eliminar espacio de trabajo cuando finalice la compilación" del paso de compilación
Las soluciones mencionadas deleteDir()
y cleanWs()
(si se 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 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()
}
}
}
cleanWs()
como un paso los elimina antes de que se ejecute el comando post build archive. cleanWs()
debe más probable es que siempre se ejecute como un comando de generación de post
post
sección, cleanWs()
se puede poner de forma segura en la always
condición, pero el lugar más seguro está dentro de la cleanup
condición:post { cleanup { cleanWs() } }
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()
}
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:
options { skipDefaultCheckout() }
para una ejecución un poco más rápida.
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.
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
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 */
}
}
}
En mi caso, quiero borrar los archivos antiguos al principio de la compilación, pero esto es problemático ya que el código fuente ha sido desprotegido.
Mi solución es pedirle a git que limpie cualquier archivo (de la última compilación) que no conozca:
sh "git clean -x -f"
De esa manera, puedo comenzar la compilación limpia y, si falla, el espacio de trabajo no se limpia y, por lo tanto, se puede depurar fácilmente.
Actualmente, deleteir () y cleanWs () no funcionan correctamente cuando se usa el complemento Jenkins kubernetes, el espacio de trabajo del pod se elimina pero el espacio de trabajo maestro persiste
No debería ser un problema para las ramas persistentes, cuando tiene un paso para limpiar el espacio de trabajo antes de la estafa de pago. Básicamente, reutilizará el mismo espacio de trabajo una y otra vez: pero cuando se usan tuberías de múltiples ramas, el maestro mantiene todo el espacio de trabajo y el directorio git
Creo que esto debería ser un problema con Jenkins, ¿alguna iluminación aquí?