Jenkins 管道詹金斯,什么';这是使用变量的正确方法

Jenkins 管道詹金斯,什么';这是使用变量的正确方法,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我们刚刚从使用buildflow插件转向管道,因为buildflow已被弃用&建议在可能的情况下转向管道 我们以前的构建流程如下所示: def rioBranchName = params["rioBranch"] def restBranchName = params["restBranch"] def deployServer = params["deploymentServer"] def tagNumber = build.number def automationBuild bui

我们刚刚从使用buildflow插件转向管道,因为buildflow已被弃用&建议在可能的情况下转向管道

我们以前的构建流程如下所示:

def rioBranchName = params["rioBranch"]
def restBranchName = params["restBranch"]
def deployServer =  params["deploymentServer"]
def tagNumber = build.number
def automationBuild

build( "Restart Tomcat", deploymentServers: deployServer)

parallel (
  { build( "Rio", branch: rioBranchName, deploymentServer: deployServer, extraTasks:"multiReDeploy", gradleSwitches: "--settings-file packageSettings.gradle") },
  { build( "REST - Smoke Tests", branch: restBranchName,  deploymentServer: deployServer, extraTasks:"multiReDeploy") }, 
  { automationBuild = build( "Rio Automation", branch: rioBranchName) }
)


build("Restart Tomcat", deploymentServers: deployServer)

build("SCTM Trigger - Develop - Smoke", ,  automationTestBuildNumber: automationBuild.build.number)
我试着把它转换成管道流

def automationBuild

pipeline {
    agent any
    stages {
        stage('Build'){
            steps {
                parallel buildAtlas: {
                     build job: 'Rio', parameters: [string(name: 'branch', value: params["rioBranch"])]
                }, buildRest: {
                    build job: 'REST - Smoke Tests', parameters: [string(name: 'branch', params["restBranch"])]
                }, buildAutomation: {
                    automationBuild = build job: 'Rio Automation', parameters: [string(name: 'branch', value: params["rioBranch"])]
                },
                failFast: false
            }
        }
        stage('Test commit'){
            steps {
                build job: 'Restart Tomcat', parameters: [string(name: 'deploymentServers', value: params["deploymentServer"])]
                build job: 'SCTM Trigger - Develop - Smoke', parameters: [string(name: 'automationTestBuildNumber', value: automationBuild.build.number)]
            }
        }
    }
}
我总是犯错误

WorkflowScript: 11: Expected a step @ line 11, column 6.
def automationBuild = build job: 'Rio Automation', parameters: [string(name: 'branch', value: params["rioBranch"])]

获取刚刚触发的生成自动化版本号的正确新方法是什么。

您需要将非步骤分配指令包装在
脚本
块中,以将其清除:


请注意,
script
让我们运行几乎所有可以在声明性管道步骤内的脚本管道中运行的groovy代码。

尝试将其包装为一个
steps{…}
添加的
buildAutomation:{steps{automationBuild=build作业:'Rio Automation',parameters:[string](名称:'branch',值:params[“rioBranch”])]},
&得到了相同的错误,这是您的意思吗?是的。如果您在
管道{}中声明
自动生成
,该怎么办
您可以发布生成的管道文件的外观吗?这里是这些更改的粘贴箱。它仍会引发类似的错误&另一个.org.codehaus.groovy.control.multipleCompositionErrorException:启动失败:工作流脚本:2:不是有效的节定义:“def automationBuild”。需要一些额外的配置。@第2行第5列。def automationBuild ^WorkflowScript:13:在第13行第10列需要一个步骤。automationBuild=生成作业:“Rio Automation”,参数:[字符串(名称:“branch”,值:params[“rioBranch”])]这让我走上了正确的轨道…脚本允许我运行设置变量的构建。正如您所说的,它允许您运行几乎所有groovy代码。我现在接受这一点&明天将添加使其完全工作所需的额外逻辑。
def rioBranchName = params["rioBranch"]
def restBranchName = params["restBranch"]
def deployServer =  params["deploymentServer"]
def tagNumber = build.number
def automationBuild

build( "Restart Tomcat", deploymentServers: deployServer)

parallel (
  { build( "Rio", branch: rioBranchName, deploymentServer: deployServer, extraTasks:"multiReDeploy", gradleSwitches: "--settings-file packageSettings.gradle") },
  { build( "REST - Smoke Tests", branch: restBranchName,  deploymentServer: deployServer, extraTasks:"multiReDeploy") }, 
  { 
    script {
      automationBuild = build( "Rio Automation", branch: rioBranchName)
    }
  }
)


build("Restart Tomcat", deploymentServers: deployServer)

build("SCTM Trigger - Develop - Smoke", ,  automationTestBuildNumber: automationBuild.build.number)