Skip to content

Real World Examples

Jamie Tanna edited this page Oct 27, 2021 · 25 revisions

This page shows how to use Groovy features in the DSL for advanced scripting.

Variables

def jobName = 'example'

job(jobName) {
}

Loops

def giturl = 'https://github.com/quidryan/aws-sdk-test.git'
for(i in 0..10) {
    job("DSL-Tutorial-1-Test-${i}") {
        scm {
            git(giturl)
        }
        steps {
            maven("test -Dtest.suite=${i}")
        }
    }
}

Be aware of problems with the Groovy SDK loop methods.

Multi-line strings

def viewspec = '''
//depot/Tools/build/... //jryan_car/Tools/build/...
//depot/commonlibraries/utils/... //jryan_car/commonlibraries/utils/...
//depot/helloworld/... //jryan_car/helloworld/...
'''

job('PerforceJob') {
    scm {
        p4(viewspec)
    }
}

REST API calls

def project = 'Netflix/asgard'
def branchApi = new URL("https://api.github.com/repos/${project}/branches")
def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader())
branches.each {
    def branchName = it.name
    def jobName = "${project}-${branchName}".replaceAll('/','-')
    job(jobName) {
        scm {
            git("https://github.com/${project}.git", branchName)
        }
    }
}

Import other files (i.e. with class definitions) into your script

Make a directory at the same level as the DSL called utilities and create a file called MyUtilities.groovy in the utilities directory with the following contents:

package utilities

class MyUtilities {
    static void addMyFeature(def job) {
        job.with {
            description('Arbitrary feature')
        }
    }
}

Then from the DSL, add something like this:

import utilities.MyUtilities

def myJob = job('example')
MyUtilities.addMyFeature(myJob)

Note that importing other files is not possible when Script Security is enabled and not using Groovy Sandbox.