Wir sind seit einer Woche mit diesem Problem beschäftigt, obwohl wir seit einigen Monaten mit Pipelines arbeiten. Unser Ziel ist es, so viele Container wie viele Feature-Dateien in unserer Gurken-Testsuite hochzufahren und diese Tests parallel durchzuführen (eine pro Container). Hier ist der Fehler, den wir mit dem Pipeline-Code erhalten unter:Fehler bei der Jenkins-Pipeline, die mehrere Docker-Container für Gurkentests aufbaut, eine Feature-Datei pro Container
java.lang.UnsupportedOperationException: Aufruf public static java.util.List org.codehaus.groovy.runtime.DefaultGroovyMethods.each (java.util .List, groovy.lang.Closure) auf einem CPS-transformierten Verschluss wird noch nicht unterstützt (JENKINS-26481); Einkapseln in einem @NonCPS Verfahren oder Benutzung Java-style-Schleife
Pipeline-Code:
def cucumberTestImage
pipeline {
agent any
options {
echo "options stuff"
}
stages {
stage('Build & Deploy'){
steps {
parallel (
SPA: {
script {
echo "deploying SPA app"
}
}
}
echo 'SPA JOB COMPLETED!!'
},
Tests: {
script {
}
//building docker image name cucumberTestImage
}
}
)
}
}
stage('Test') {
steps {
script {
def tests = [:]
getFeatures().each {stage -> tests[stage] = {
cucumberTestImage.inside{sh "echo ${stage}"}
}}
parallel tests;
}
}
}
}
}
@NonCPS
def getFeatures() {
return sh(script: 'cd testfolder && find features -type f -name \'*.feature\'', returnStdout: true).tokenize()
}
Danke für die schnelle Antwort. Es hat den Fehler behoben, aber der Stufenwert innerhalb des Image.Inside-Blocks behält den endgültigen Wert aus der Liste. Wenn also die parallele Anweisung in der Ausgabe startet, werden alle Echoanweisungen mit dem endgültigen Wert aus der Liste angezeigt! Das scheint ein spezifisches Problem zu sein. – Ram
@Ram Ich glaube nicht, dass das Problem docker bezogen ist. Dies ist ein Problem der jenkins-Pipeline. Vielleicht möchten Sie https://stackoverflow.com/questions/40195720/how-to-print-each-element-of-multi-line-string-parameter eine Einstellung geben. Versuchen Sie auch, die Pipeline-Sandbox zu deaktivieren. – yamenk
das ist gelöst, es gab einen Tippfehler – Ram