Ich habe den folgenden Anwendungsfall:Jenkins Pipelines: Re-Use-Arbeitsbereich, wenn ein externen Jenkins Pipeline Skript Laden
Kasse/zieht eine bestimmte Git Revision, mit geschriebener Pipeline Skript
(Ich brauche das, weil ich abrufen der Revision dynamisch)Von dieser Revision, legen Sie eine Jenkins-Pipeline-Datei, unter der sich zuvor Dateien ausgecheckt
Diese Datei würde auf Dateien vertrauen aus dem gleichen Revision
(also aus dem gleichen Arbeitsbereich) ausgecheckt
Problem: Die geladene Jenkins-Pipeline-Datei wird in einem neuen Arbeitsbereich ausgeführt. Aber es ist leer. Ich brauche diese Datei, um im selben alten Arbeitsplatz ausgeführt zu werden.
Ich dachte, vielleicht ist es wegen der Umgebung node
, weil das Schlüsselwort node
Arbeitsbereiche erstellt, wie in den Dokumenten erwähnt. Aber als ich versuchte, es außerhalb der node
zu laden, hat Jenkins das wegen "Verlassen der Sandbox" verboten.
Hinweis: Die jenkins-Pipeline-Datei wird gefunden und wirklich ausgeführt. Das Problem ist während die Ausführung.
Bitte sehen Sie die Beispiel-Code:
Inlined Pipeline Skript
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'
}
Datei: Weiter Skript-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
}
Great! Und mehrere Knoten in genanntem Skript funktionieren! :) – Iviator
Dieses "Feature" war unglaublich schwierig zu entdecken ... Ich bin begeistert, dass ich es gefunden habe, muss aber besser dokumentiert werden, mehrere Executoren pro Pipeline zu erzeugen ist irgendwie lächerlich und fast fehlerhaft, wenn Sie mich fragen, dies muss ein Kontrollkästchen Feature "verkettete Skriptausführung" oder etwas in dieser Richtung sein – sloven