Ich benutze Jenkins Version 2.7.1 mit der Pipeline-Suite von Plugins, um eine Pipeline in einer Jenkins-Datei zusammen mit dem Docker-Plugin zu implementieren. Mein Ziel ist es, mehrere Projekt-Builds parallel auszuführen, wobei jedes Build in einem eigenen Container ausgeführt wird. Mein Jenkinsfile wie folgt aussieht:Jenkins Pipeline & Docker Plugin - gleichzeitige Builds auf einzigartigen Agenten
node('docker-agent') {
stage('Checkout') {
checkout scm
}
stage('Setup') {
build(job: 'Some External Job', node: env.NODE_NAME, workspace: env.WORKSPACE)
}
}
ich eine Anforderung habe einen externen Job zu nennen, aber ich brauche diese auf dem gleichen Arbeitsplatz auszuführen, wo der checkout scm
Schritt den Code ausgecheckt hat, damit die node
und workspace
Parameter. Ich verstehe, dass durch das Einbetten eines build
Aufrufs innerhalb eines node
Blocks effektiv ein Executor verschwendet wird, aber mir geht es gut, da der Agent ein Container in einer Docker Cloud ist und keine Ressourcen verschwendet.
Das eine Problem mit meinem Ansatz ist, dass eine andere Instanz dieses Projekt Build könnte die Executoren von einer anderen laufenden Instanz in der Zeitlücke zwischen den 2 Stufen stehlen.
Wie kann ich im Wesentlichen sicherstellen, dass (1) Projekt-Builds gleichzeitig ausgeführt werden können, aber (2) jeder Build auf einer neuen Instanz eines durch docker-agent
gekennzeichneten Agenten ausgeführt wird?
Ich habe versucht, das Locking-Plugin, aber ein neuer Build wird einfach warten, um die Sperre auf bestehenden Agenten zu erwerben, anstatt seinen eigenen Agenten zu spinnen.
Was ist mit der Verwendung mehrerer Agenten mit jeweils einem Executor? Was macht der Build? Normalerweise benutze ich docker-compose für meine Pipelines, was es mir ermöglicht, 'Mein Ziel ist es, mehrere Projekt-Builds parallel auszuführen, wobei jedes Build in einem eigenen Container ausgeführt wird.' –