Jenkins Zweigstellen der Pipeline: sauberer Arbeitsbereich / Verzeichnis löschen, wenn Sie bauen endet

verwenden wir Jenkins Zweigstellen (Drehbuch), pipeline laufen mehrere builds parallel. Jeder erstellt eine neue, eindeutig benannte Verzeichnis an der Kasse den code, und führen Sie den test. Verzeichnisse sind eindeutig benannt, denn Sie enthalten den branch-Namen, sondern auch ein zufälliger Teil wie "JAA2A5HUZB7TRE4OTVXU7S...".

Dies bedeutet, dass nach jedem build-X-Verzeichnisse (X = Anzahl paralleler jobs * Anzahl der Zweige) bleiben Sie auf der Jenkins-Knoten -, Füll-Speicherplatz.

Frage ich mich, wie könnte ich automatisch diese Verzeichnisse löschen.

Eine vereinfachte version meines ursprünglichen pipeline sieht wie folgt aus

//Initialize the matrix
def matrix = [
  'foo',
  'bar',
]

//Initialize empty tasks map
def tasks = [:]

//Job status
successful = true

//Fill our tasks map from the Matrix data
for (x in matrix) {

  def job_name = x

  tasks[job_name] = {
    node('libvirt') {
        //Checkout repository first
        stage("$job_name - Checkout") {
          checkout scm
        }

        //Then build the machine
        gitlabCommitStatus('build') {
            stage("$job_name - Build") {
                  sh "./bin/build.sh ${job_name}"
            }
        }
      }
    }
  }
}


////Pipeline ////

notifyBuild('STARTED')

//Run tasks in parallel
try {
  parallel tasks
} catch(e) {
  throw e
} finally {
  if (successful) {
    notifyBuild('SUCCESS')
  } else {
    notifyBuild('FAILED')
  }
}

//Methods
def notifyBuild(String buildStatus = 'STARTED') {
   //used to send formatted e-mails 
}

Ich zum ersten Hinzugefügt deleteDir() wie diese

} finally {
  if (successful) {
    notifyBuild('SUCCESS')
  } else {
    notifyBuild('FAILED')
  }
  node('libvirt') {
    deleteDir()
  }
}

löst einen Fehler aus und macht den build fehlschlagen.

Ich dann noch ein cleanWs() wie diese

} finally {
  if (successful) {
    notifyBuild('SUCCESS')
  } else {
    notifyBuild('FAILED')
  }
  node('libvirt') {
    cleanWs()
  }
}

Die Ausgabe ist

Running on node in /srv/jenkins/workspace/pipeline-deletedir-DRD7EKBEMMWJQZW6KKMQVVBTJTPTKLRAE2ITDK7V7IB5PTFXZUZA
[Pipeline] {
[Pipeline] step
[WS-CLEANUP] Deleting project workspace...[WS-CLEANUP] done
[Pipeline] }
[Pipeline] //node
[Pipeline] End of Pipeline
Finished: SUCCESS

aber das Verzeichnis /srv/jenkins/workspace/pipeline-deletedir-DRD7EKBEMMWJQZW6KKMQVVBTJTPTKLRAE2ITDK7V7IB5PTFXZUZA noch existiert.

Ich bin auf der Suche nach einer Lösung zur Anpassung dieses scripted-pipeline (und für deklarative pipeline, wenn man weiß, wie), um in der Lage sein, zu löschen alle Verzeichnisse erstellt, indem die build.

  • Eine partielle Lösung ist die Nutzung der "Verwaisten Posten" - Strategie, die mit aggressiven Werte. Dies beantwortet nicht die OP, da es nur für Zweige, die gelöscht werden (und PR Filialen geschlossen für PR-s). Aber es sollte helfen, beschränken Sie die Verwendung von Speicherplatz zu einem gewissen Grad.
  • Wird "Verwaiste Element Strategie" entfernen Sie die alte Arbeitsbereiche für abgestorbene äste, die über ein cluster von remote-Agenten? (einschließlich Agenten off-line, wenn die Branche Löschung aufgefallen ist).
InformationsquelleAutor daks | 2017-07-06
Schreibe einen Kommentar