tutorial steps scripted scm example jenkins groovy jenkins-pipeline

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