jenkins - scripted - pipeline steps
Jenkins: no se puede definir la variable en la etapa de canalizaciĆ³n (4)
Estoy tratando de crear un script de canalización Jenkins declarativo pero tengo problemas con la declaración de variable simple.
Aquí está mi guión:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13."
sh "echo ${foo}"
}
}
}
Sin embargo, me sale este error:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 13.
def foo = "foo"
^
Estoy en Jenkins 2.7.4 y Pipeline 2.4.
Creo que el error no proviene de la línea especificada sino de las primeras 3 líneas. Intenta esto en su lugar:
node {
stage("first") {
def foo = "foo"
sh "echo ${foo}"
}
}
Creo que tenías algunas líneas adicionales que no son válidas ...
EDITAR
De la
documentación del modelo de tubería
declaractiva, parece que tiene que usar un bloque de declaración de
environment
para declarar sus variables, por ejemplo:
pipeline {
environment {
FOO = "foo"
}
agent none
stages {
stage("first") {
sh "echo ${FOO}"
}
}
}
De acuerdo con @ Pom12, @abayer. Para completar la respuesta, debe agregar un bloque de script
Intenta algo como esto:
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"
}
}
}
}
El modelo declarativo para Jenkins Pipelines tiene un subconjunto restringido de sintaxis que permite en los bloques de
stage
;
consulte la guía de sintaxis para obtener más información
.
Puede omitir esa restricción envolviendo sus pasos en un bloque de
script { ... }
, pero como resultado, perderá la validación de sintaxis, parámetros, etc. dentro del bloque de
script
.
En Jenkins 2.138.3 hay dos tipos diferentes de tuberías.
Tuberías declarativas y guionizadas.
"Las canalizaciones declarativas son una nueva extensión de la DSL de canalización (es básicamente un script de canalización con un solo paso, un paso de canalización con argumentos (llamados directivas), estas directivas deben seguir una sintaxis específica. El punto de este nuevo formato es que es más estricto y, por lo tanto, debería ser más fácil para los nuevos en las tuberías, permitir la edición gráfica y mucho más. Las tuberías con guiones son la alternativa para los requisitos avanzados "
tubería de jenkins: agente vs nodo?
Aquí hay un ejemplo del uso de variables globales y de entorno en una canalización declarativa. Por lo que puedo decir, el entorno es estático después de que se configuran.
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