Ich arbeite an einer Jenkins Shared Library.Wo soll ich die Funktion in der Pipeline-Datei platzieren?
Mein Plan ist es, in der Lage zu sein, die Anzahl der Zeilen in jedem Jenkinsfile auf das Minimum zu reduzieren.
Ich möchte in der Lage sein, etwas zu tun wie:
buildProduct()
und dass es eine Pipeline bauen ausstellen, die in der gemeinsamen genutzten Bibliothek befindet.
Meine standardPipeline.groovy Datei sieht so aus:
import com.company.utils.pipelineFunctions;
import com.company.utils.Git;
def ris = new pipelineFunctions()
def run_in_stage(String stage_name, Closure command){
ris.run_in_stage(stage_name, command, emailadd)
}
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
node {
// Clean workspace before doing anything
deleteDir()
try {
def ris = new pipelineFunctions()
//run_in_stage('Clone', {
run_in_stage('Clone', {
checkout scm
})
stage ('Build') {
sh "echo 'building ${config.projectName} ...'"
}
stage ('Tests') {
parallel 'static': {
sh "echo 'shell scripts to run static tests...'"
},
'unit': {
sh "echo 'shell scripts to run unit tests...'"
},
'integration': {
sh "echo 'shell scripts to run integration tests...'"
}
}
stage ('Deploy') {
sh "echo 'deploying to server ${config.serverDomain}...'"
sh "echo Itai ganot"
}
} catch (err) {
currentBuild.result = 'FAILED'
throw err
}
}
}
Die pipelineFunctions.groovy Datei sieht so aus:
package com.company.utils;
import com.company.utils.Git;
def run_in_stage(String stage_name, Closure command, String sendTo){
def gitTool = new Git()
String ulink = gitTool.getCommitter()
String jlink = "(<${env.BUILD_URL}|Open>)"
println "============================================================"
stage (stage_name) {
try {
command()
if (currentBuild.result == 'FAILURE') {
error "Build failed, see log for further details."
}
println "============================================================"
} catch (Exception ex) {
def except = "${ex}"
String emailadd = ulink+'@company.com'
if (currentBuild.result == null) {
currentBuild.result = "FAILURE" }
this.notifyStatus(stage_name, currentBuild.result, except)
echo "Pipeline failed at stage: ${stage_name}"
throw ex
}
}
}
return this;
Wenn ich laufen die Build es mit dem folgenden Fehler fehl:
groovy.lang.MissingPropertyException: No such property: ris for class: groovy.lang.Binding
Ich versuche zu verstehen, wo soll ich die run_in_stage Funktion def Denn wo immer ich es hingebe, führt es dazu, dass der Build fehlschlägt.
Irgendeine Idee, was ich falsch mache?
ich noch einen Fehler auf dem „def ris = new pipelineFunctions()“ in dem run_in_stage Funktion –
@ItaiGanot erhalten Ich habe das obige und ru neu erstellt n es. Der einzige Fehler, den ich bekam, war sehr explizit: 'groovy.lang.MissingPropertyException: Keine solche Eigenschaft: emailadd für class: StandardPipeline'. Ich habe das Update für das oben hinzugefügt (nur erklärt etwas namens'Emailadd' im Bereich). Ist das der Fehler, dem du begegnet bist, oder war es etwas anderes? –