James Nurse
James Nurse

Reputation: 396

Pipeline Jenkins, what's the correct way to use variables to use

We've just moved from using the buildflow plugin to pipeline as buildflow was deprecated & the recommendation was to move onto pipeline when possible.

Our previous build flow looked like this:

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)

and I've tried to convert this into a pipeline flow.

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)]
            }
        }
    }
}

I consistently get the error.

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

What is the new correct way to get the version number of the build RioAutomation that was just triggered.

Upvotes: 2

Views: 1622

Answers (1)

burnettk
burnettk

Reputation: 14037

You need to wrap the non-step assignment instruction in a script block to get it to lint/validate clean:

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)

Note that script let's your run pretty much any groovy code you can run in a scripted pipeline inside a declarative pipeline step.

Upvotes: 4

Related Questions