宣言型Jenkinsパイプラインスクリプトを作成しようとしていますが、単純な変数宣言に問題があります。
これが私のスクリプトです:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13."
sh "echo ${foo}"
}
}
}
しかし、私はこのエラーが出ます:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 13.
def foo = "foo"
^
私はJenkins 2.7.4とPipeline 2.4を使っています。
Jenkins Pipelinesの宣言モデルには、stage
ブロックで許可されている構文のサブセットが制限されています - 詳細については構文ガイドを参照してください 。ステップをscript { ... }
ブロックでラップすることでこの制限を回避できますが、その結果、script
ブロック内の構文、パラメータなどの検証は失われます。
エラーは特定の行からではなく、最初の3行から来ていると思います。代わりにこれを試してください:
node {
stage("first") {
def foo = "foo"
sh "echo ${foo}"
}
}
私はあなたが有効ではないいくつかの余分な行を持っていたと思います...
編集
宣言的 パイプラインモデルのドキュメント から、変数を宣言するためにenvironment
宣言ブロックを使用する必要があるようです。例えば:
pipeline {
environment {
FOO = "foo"
}
agent none
stages {
stage("first") {
sh "echo ${FOO}"
}
}
}
@ Pom12、@abayerに同意します。答えを完成させるには、スクリプトブロックを追加する必要があります
このようなことを試してください:
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"
}
}
}
}
Jenkins 2.138.3では、2種類のパイプラインがあります。
宣言的およびスクリプト化されたパイプライン.
「宣言的パイプラインは、パイプラインDSLの新しい拡張です(基本的には1つのステップしか持たないパイプラインスクリプト、引数を持つパイプラインステップ(ディレクティブと呼ばれます)。これらのディレクティブは特定の構文に従う必要があります。より厳密なので、パイプラインに慣れていない人、グラフィカルな編集ができる人、その他にとって、もっと簡単なはずです。スクリプト化されたパイプラインは、高度な要件の代替となります。」
宣言型パイプラインで環境変数とグローバル変数を使用する例を示します。私が言えることから、環境は設定された後は静的です。
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