AusweisApp2/resources/jenkins/dsl/common/Build.groovy

234 lines
3.8 KiB
Groovy

package common
import javaposse.jobdsl.dsl.Job
import javaposse.jobdsl.dsl.DslFactory
class Build
{
enum JobType
{
Freestyle, Multi, Matrix
}
JobType jobType = JobType.Freestyle
String name
String namePrefix = ''
String libraries
String artifacts
String label
String trigger = '@daily'
String excludePattern = 'source/**'
List oldBuilds = [7, 15]
boolean releaseJob = false
boolean xunit = false
boolean cleanup = false
boolean sendMail = true
boolean disableChangelog = false
boolean allowEmptyArtifacts = false
boolean review = false
int timeout = 60
int weight = -1
DslFactory dslFactory
String buildName(String prefix, String name, boolean libs=false)
{
def branchPrefix = ''
if(!getReleaseJob())
{
if(libs && getReview())
branchPrefix = '${Libraries}_'
else
branchPrefix = dslFactory.MERCURIAL_REVISION_BRANCH + '_'
}
return branchPrefix + prefix + name
}
String getJobName()
{
return buildName(getNamePrefix(), getName())
}
String getLibName()
{
def prefix = 'Libs_'
if(getReleaseJob())
{
prefix = '${MERCURIAL_REVISION_BRANCH}_' + prefix
}
return buildName(prefix, getLibraries(), true)
}
Job generate(DslFactory factory)
{
dslFactory = factory
def j
if(getJobType() == JobType.Multi)
j = dslFactory.multiJob(getJobName())
else if(getJobType() == JobType.Matrix)
j = dslFactory.matrixJob(getJobName())
else if(getJobType() == JobType.Freestyle)
j = dslFactory.freeStyleJob(getJobName())
else
throw new Exception('Unknown job type: ' + getJobType())
j.with
{
if(getLabel())
label(getLabel())
if(getOldBuilds())
logRotator(*getOldBuilds())
if(getWeight() > 1)
weight(getWeight())
environmentVariables
{
env('TEMP', '$WORKSPACE/tmp')
env('TMP', '$WORKSPACE/tmp')
env('TMPDIR', '$WORKSPACE/tmp')
}
wrappers
{
preBuildCleanup()
{
if(!getReleaseJob() && getExcludePattern())
excludePattern(getExcludePattern())
deleteDirectories(true)
}
timestamps()
if(getTimeout() > -1)
{
timeout
{
absolute(getTimeout())
}
}
}
scm
{
hg(dslFactory.MERCURIAL_REPOSITORY_URL)
{
if(getReleaseJob())
tag('${changeset}')
else
branch(dslFactory.MERCURIAL_REVISION_BRANCH)
subdirectory('source')
if(getDisableChangelog())
disableChangeLog()
clean()
}
}
if(getTrigger())
{
triggers
{
cron('@weekly')
scm(getTrigger())
}
}
steps
{
if(getLibraries())
{
copyArtifacts(getLibName())
{
targetDirectory('libs')
buildSelector
{
latestSuccessful(true)
}
}
if(getName().contains('_Win'))
batchFile('cd libs/build & FOR %%a in (Toolchain_*) DO cmake -E tar xf %%a')
else
shell('cd libs/build; cmake -E tar xf Toolchain_*')
}
if(getName().contains('_Win'))
batchFile('mkdir build & mkdir tmp')
else
shell('mkdir build; mkdir tmp')
}
publishers
{
if(getXunit())
{
archiveXUnit
{
qTestLib
{
pattern('build/**/results.*.log.xml')
}
failedThresholds
{
unstable(0)
unstableNew(0)
failure(100)
failureNew(100)
}
skippedThresholds
{
unstable(100)
unstableNew(100)
failure(100)
failureNew(100)
}
thresholdMode(ThresholdMode.PERCENT)
}
}
if(getArtifacts())
{
archiveArtifacts()
{
pattern(getArtifacts())
allowEmpty(getAllowEmptyArtifacts())
fingerprint()
}
}
if(getCleanup())
{
wsCleanup()
{
cleanWhenUnstable(false)
cleanWhenFailure(false)
cleanWhenNotBuilt(false)
cleanWhenAborted(false)
}
}
if(getSendMail())
mailer('', true, true)
}
}
return j
}
}