提交 d3a35ef0 编写于 作者: T Tanner Gooding

Adding netci.groovy for dynamic job generation in Jenkins.

上级 24f8a59c
// Groovy Script: http://www.groovy-lang.org/syntax.html
// Jenkins DSL: https://github.com/jenkinsci/job-dsl-plugin/wiki
static void addLogRotator(def myJob) {
myJob.with {
logRotator {
daysToKeep(21)
numToKeep(-1)
artifactDaysToKeep(5)
artifactNumToKeep(25)
}
}
}
static void addConcurrentBuild(def myJob, String category) {
myJob.with {
concurrentBuild(true)
throttleConcurrentBuilds {
throttleDisabled(false)
maxTotal(0)
maxPerNode(1)
categories([category])
}
}
}
static void addScm(def myJob, String branchName, String refspecName = '') {
myJob.with {
scm {
git {
remote {
github('dotnet/roslyn', 'https', 'github.com')
name('')
refspec(refspecName)
}
branch(branchName)
wipeOutWorkspace(true)
shallowClone(true)
}
}
}
}
static void addWrappers(def myJob) {
myJob.with {
wrappers {
timeout {
absolute(60)
abortBuild()
}
timestamps()
}
}
}
static void addEmailPublisher(def myJob) {
myJob.with {
publishers {
extendedEmail('$DEFAULT_RECIPIENTS, cc:mlinfraswat@microsoft.com', '$DEFAULT_SUBJECT', '$DEFAULT_CONTENT') {
trigger('Aborted', '$PROJECT_DEFAULT_SUBJECT', '$PROJECT_DEFAULT_CONTENT', null, true, true, true, true)
trigger('Failure', '$PROJECT_DEFAULT_SUBJECT', '$PROJECT_DEFAULT_CONTENT', null, true, true, true, true)
}
}
}
}
static void addUnitPublisher(def myJob) {
myJob.with {
configure { node ->
node / 'publishers' << {
'xunit'('plugin': 'xunit@1.97') {
'types' {
'XUnitDotNetTestType' {
'pattern'('**/*TestResults.xml')
'skipNoTestFiles'(false)
'failIfNotNew'(true)
'deleteOutputFiles'(true)
'stopProcessingIfError'(true)
}
}
'thresholds' {
'org.jenkinsci.plugins.xunit.threshold.FailedThreshold' {
'unstableThreshold'('')
'unstableNewThreshold'('')
'failureThreshold'('0')
'failureNewThreshold'('')
}
'org.jenkinsci.plugins.xunit.threshold.SkippedThreshold' {
'unstableThreshold'('')
'unstableNewThreshold'('')
'failureThreshold'('')
'failureNewThreshold'('')
}
}
'thresholdMode'('1')
'extraConfiguration' {
testTimeMargin('3000')
}
}
}
}
}
}
static void addPushTrigger(def myJob) {
myJob.with {
triggers {
githubPush()
}
}
}
static void addPullRequestTrigger(def myJob, String contextName, String opsysName, String triggerKeyword = 'this', Boolean triggerOnly = false) {
myJob.with {
triggers {
pullRequest {
admin('Microsoft')
useGitHubHooks(true)
triggerPhrase("(?i).*test\\W(${opsysName}|${triggerKeyword}|${opsysName}\\W${triggerKeyword}||${triggerKeyword}\\W${opsysName})\\Wplease.*")
onlyTriggerPhrase(triggerOnly)
autoCloseFailedPullRequests(false)
orgWhitelist('Microsoft')
allowMembersOfWhitelistedOrgsAsAdmin(false)
permitAll(false)
extensions {
commitStatus {
context(contextName.replace('_', '/').substring(7))
}
}
}
}
}
}
['master', 'future', 'stabilization', 'prtest'].each { branchName ->
// folder("${branchName.substring(0, 6)}")
['win', 'linux', 'mac'].each { opsys ->
// folder("${branchName.substring(0, 6)}/${opsys.substring(0, 3)}")
['dbg', 'rel'].each { configuration ->
if ((configuration == 'dbg') || ((branchName != 'prtest') && (opsys == 'win'))) {
// folder("${branchName.substring(0, 6)}/${opsys.substring(0, 3)}/${configuration}")
['unit32', 'unit64'].each { buildTarget ->
if ((opsys == 'win') || (buildTarget == 'unit32')) {
def jobName = "roslyn_${branchName.substring(0, 6)}_${opsys.substring(0, 3)}_${configuration}_${buildTarget}"
def myJob = job(jobName) {
description('')
label('windows-roslyn')
}
if (opsys == 'win') {
myJob.with {
steps {
batchFile(".\\cibuild.cmd ${(configuration == 'dbg') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}")
}
}
} else {
myJob.with {
steps {
shell("./cibuild.sh")
}
}
}
addLogRotator(myJob)
addWrappers(myJob)
addUnitPublisher(myJob)
addConcurrentBuild(myJob, 'roslyn-internal_unit')
if (branchName == 'prtest') {
switch (buildTarget) {
case 'unit32':
addPullRequestTrigger(myJob, jobName, opsys, "unit((\\W)?(32)?)")
break;
case 'unit64':
addPullRequestTrigger(myJob, jobName, opsys, 'unit((\\W)?(64)?)')
break;
}
addScm(myJob, '${sha1}', '+refs/pull/*:refs/remotes/origin/pr/*')
} else {
addPushTrigger(myJob)
addScm(myJob, "*/${branchName}")
addEmailPublisher(myJob)
}
}
}
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册