J'essaie de créer un script de pipeline Jenkins déclaratif, mais j'ai des problèmes avec la déclaration de variable simple.
Voici mon script:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13."
sh "echo ${foo}"
}
}
}
Cependant, j'obtiens cette erreur:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 13.
def foo = "foo"
^
Je suis sur Jenkins 2.7.4 et Pipeline 2.4.
Le modèle déclaratif pour les pipelines Jenkins a un sous-ensemble restreint de syntaxe qu'il autorise dans les blocs stage
voir le guide de la syntaxe pour plus d'informations . Vous pouvez contourner cette restriction en encapsulant vos étapes dans un bloc script { ... }
, mais vous perdrez ainsi la validation de la syntaxe, des paramètres, etc., dans le bloc script
.
Je pense que l'erreur ne vient pas de la ligne spécifiée mais des 3 premières lignes. Essayez ceci à la place:
node {
stage("first") {
def foo = "foo"
sh "echo ${foo}"
}
}
Je pense que vous avez eu quelques lignes supplémentaires qui ne sont pas valides ...
EDIT
D'après déclaractive documentation du modèle de pipeline , il semble que vous deviez utiliser un bloc de déclaration environment
pour déclarer vos variables, par exemple:
pipeline {
environment {
FOO = "foo"
}
agent none
stages {
stage("first") {
sh "echo ${FOO}"
}
}
}
D'accord avec @ Pom12, @abayer. Pour compléter la réponse, vous devez ajouter un bloc de script.
Essayez quelque chose comme ça:
pipeline {
agent any
environment {
ENV_NAME = "${env.BRANCH_NAME}"
}
// ----------------
stages {
stage('Build Container') {
steps {
echo 'Building Container..'
script {
if (ENVIRONMENT_NAME == 'development') {
ENV_NAME = 'Development'
} else if (ENVIRONMENT_NAME == 'release') {
ENV_NAME = 'Production'
}
}
echo 'Building Branch: ' + env.BRANCH_NAME
echo 'Build Number: ' + env.BUILD_NUMBER
echo 'Building Environment: ' + ENV_NAME
echo "Running your service with environemnt ${ENV_NAME} now"
}
}
}
}
Dans Jenkins 2.138.3, il existe deux types de pipelines différents.
Pipelines déclaratifs et scriptés.
"Les pipelines déclaratifs sont une nouvelle extension du pipeline DSL (c’est un script de pipeline avec une seule étape, une étape de pipeline avec des arguments (appelés directives), ces directives doivent suivre une syntaxe spécifique. Ce nouveau format a pour but de est plus stricte et devrait donc être plus facile pour les débutants en pipelines, permettre l'édition graphique, etc.
pipeline Jenkins: agent vs noeud?
Voici un exemple d'utilisation de variables d'environnement et globales dans un pipeline déclaratif. D'après ce que je peux dire, l'environnement est statique après son paramétrage.
def browser = 'Unknown'
pipeline {
agent any
environment {
//Use Pipeline Utility Steps plugin to read information from pom.xml into env variables
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
}
stages {
stage('Example') {
steps {
script {
browser = sh(returnStdout: true, script: 'echo Chrome')
}
}
}
stage('SNAPSHOT') {
when {
expression {
return !env.JOB_NAME.equals("PROD") && !env.VERSION.contains("RELEASE")
}
}
steps {
echo "SNAPSHOT"
echo "${browser}"
}
}
stage('RELEASE') {
when {
expression {
return !env.JOB_NAME.equals("TEST") && !env.VERSION.contains("RELEASE")
}
}
steps {
echo "RELEASE"
echo "${browser}"
}
}
}//end of stages
}//end of pipeline