Comment puis-je appeler un script groovy à partir d'un Jenkins fichier?
Je suis en train d'essayer de séparer le contenu d'un Jenkinsfile dans un script groovy à faire. Mais il ne parvient pas à appeler ces scripts:
Voici le code:
#!/usr/bin/env groovy
node('test-node'){
stage('Checkout') {
echo "${BRANCH_NAME} ${env.BRANCH_NAME}"
scm Checkout
}
stage('Build-all-targets-in-parallel'){
def workspace = pwd()
echo workspace
parallel(
'first-parallel-target' :
{
//Load the file 'file1.groovy' from the current directory, into a variable called "externalMethod".
//callScriptOne()
def externalMethod = load("file1.groovy")
//Call the method we defined in file1.
externalMethod.firstTest()
},
'second-parallel-target' :
{
//callScriptTwo()
def externalMethod = load("file2.groovy")
//Call the method we defined in file1.
externalMethod.testTwo()
}
)
}
stage('Cleanup workspace'){
deleteDir()
}
}
fichier.groovy
#!groovy
def firstTest(){
node('test-node'){
stage('build'){
echo "Second stage"
}
stage('Cleanup workspace'){
deleteDir()
}
}
}
Ressemble à la Jenkinsfile est en mesure d'appeler fichier1.groovy mais me donne toujours une erreur:
java.lang.NullPointerException: Cannot invoke method firstTest() on null object
- Je ne pense pas que
load("file1.groovy")
est de trouver votre groovy fichier essayez de déboguer que.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez disposer de méthodes dans votre
Jenkinsfile
partir d'un fichier externe, vous devez effectuer les opérations suivantesDans votre
file1.groovy
, le retour des références aux méthodesMODIFIER
evaluate
ne semble pas être nécessaireou
Et comme mentionné par @Olia
devrait fonctionner
Ici est une référence sur
readTrusted
. Notez qu'aucun paramètre de substitution (un léger checkout)Léger passage à la caisse:
Au moins qui fonctionne pour moi
readFile
, doncevaluate readFile(file)
est le même queload(file)
. Vous pouvez également utiliserreturn this
, mais je préfère la détermination de la portée. En regardant le lien posté par @Olia suggèrent également que l'évaluation n'est pas requise.readTrusted
, qui permet de lire des fichiers sans faire le plein fletched caisseIl semble que vous avez manqué de retour dans les scripts que vous chargez:
S'il vous plaît, vérifiez ici:
https://jenkins.io/doc/pipeline/steps/workflow-cps/#load-evaluate-a-groovy-source-file-into-the-pipeline-script
Donc appelé votre fichier chargé auront une structure comme:
De cette façon, vous ne devriez pas obtenir l'objet null