Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
563f1e2c
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
563f1e2c
编写于
5月 19, 2016
作者:
J
Jared Parsons
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Moving to new groovy script
上级
e23da388
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
109 addition
and
209 deletion
+109
-209
netci.groovy
netci.groovy
+109
-209
未找到文件。
netci.groovy
浏览文件 @
563f1e2c
// 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
)
}
}
}
import
jobs.generation.Utilities
;
static
void
addConcurrentBuild
(
def
myJob
,
String
category
)
{
myJob
.
with
{
concurrentBuild
(
true
)
if
(
category
!=
null
)
{
throttleConcurrentBuilds
{
throttleDisabled
(
false
)
maxTotal
(
0
)
maxPerNode
(
1
)
categories
([
category
])
}
}
}
}
// The input project name (e.g. dotnet/corefx)
def
projectName
=
GithubProject
// The input branch name (e.g. master)
def
branchName
=
GithubBranchName
// Folder that the project jobs reside in (project/branch)
def
projectFoldername
=
Utilities
.
getFolderName
(
projectName
)
+
'/'
+
Utilities
.
getFolderName
(
branchName
)
static
void
addScm
(
def
myJob
,
String
branchName
,
String
refspecName
=
''
)
{
// Email the results of aborted / failed jobs to our infrastructure alias
static
void
addEmailPublisher
(
def
myJob
)
{
myJob
.
with
{
scm
{
git
{
remote
{
github
(
'dotnet/roslyn'
,
'https'
,
'github.com'
)
name
(
''
)
refspec
(
refspecName
)
}
branch
(
branchName
)
wipeOutWorkspace
(
true
)
shallowClone
(
true
)
publishers
{
extendedEmail
(
'mlinfraswat@microsoft.com'
,
'$DEFAULT_SUBJECT'
,
'$DEFAULT_CONTENT'
)
{
// trigger(trigger name, subject, body, recipient list, send to developers, send to requester, include culprits, send to recipient list)
trigger
(
'Aborted'
,
'$PROJECT_DEFAULT_SUBJECT'
,
'$PROJECT_DEFAULT_CONTENT'
,
null
,
false
,
false
,
false
,
true
)
trigger
(
'Failure'
,
'$PROJECT_DEFAULT_SUBJECT'
,
'$PROJECT_DEFAULT_CONTENT'
,
null
,
false
,
false
,
false
,
true
)
}
}
}
}
static
void
addWrappers
(
def
myJob
)
{
// Calls a web hook on Jenkins build events. Allows our build monitoring jobs to be push notified
// vs. polling
static
void
addBuildEventWebHook
(
def
myJob
)
{
myJob
.
with
{
wrappers
{
timeout
{
absolute
(
120
)
abortBuild
()
notifications
{
endpoint
(
'https://jaredpar.azurewebsites.net/api/BuildEvent?code=tts2pvyelahoiliwu7lo6flxr8ps9kaip4hyr4m0ofa3o3l3di77tzcdpk22kf9gex5m6cbrcnmi'
)
{
event
(
'all'
)
}
timestamps
()
}
}
}
}
static
void
addArtifactArchiving
(
def
myJob
,
String
patternString
,
String
excludeString
)
{
myJob
.
with
{
publishers
{
archiveArtifacts
{
allowEmpty
(
true
)
defaultExcludes
(
false
)
exclude
(
excludeString
)
fingerprint
(
false
)
onlyIfSuccessful
(
false
)
pattern
(
patternString
)
}
}
}
// Generates the standard trigger phrases. This is the regex which ends up matching lines like:
// test win32 please
static
String
generateTriggerPhrase
(
String
jobName
,
String
opsysName
,
String
triggerKeyword
=
'this'
)
{
return
"(?i).*test\\W+(${jobName.replace('_', '/').substring(7)}|${opsysName}|${triggerKeyword}|${opsysName}\\W+${triggerKeyword}|${triggerKeyword}\\W+${opsysName})\\W+please.*"
;
}
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
addRoslynJob
(
def
myJob
,
String
jobName
,
String
branchName
,
Boolean
isPr
,
String
triggerPhraseExtra
,
Boolean
triggerPhraseOnly
=
false
)
{
def
includePattern
=
"Binaries/**/*.pdb,Binaries/**/*.xml,Binaries/**/*.log,Binaries/**/*.dmp,Binaries/**/*.zip,Binaries/**/*.png,Binaries/**/*.xml"
def
excludePattern
=
"Binaries/Obj/**,Binaries/Bootstrap/**,Binaries/**/nuget*.zip"
Utilities
.
addArchival
(
myJob
,
includePattern
,
excludePattern
)
// Create the standard job. This will setup parameter, SCM, timeout, etc ...
def
projectName
=
'dotnet/roslyn'
def
defaultBranch
=
"*/${branchName}"
Utilities
.
standardJobSetup
(
myJob
,
projectName
,
isPr
,
defaultBranch
)
// Need to setup the triggers for the job
if
(
isPr
)
{
def
triggerCore
=
"open|all|${jobName}"
if
(
triggerPhraseExtra
)
{
triggerCore
=
"${triggerCore}|${triggerPhraseExtra}"
}
def
triggerPhrase
=
"(?i).*test\\W+(${triggerCore})\\W+please.*"
;
def
contextName
=
jobName
Utilities
.
addGithubPRTriggerForBranch
(
myJob
,
branchName
,
contextName
,
triggerPhrase
,
triggerPhraseOnly
)
}
else
{
Utilities
.
addGithubPushTrigger
(
myJob
)
addEmailPublisher
(
myJob
)
}
addBuildEventWebHook
(
myJob
)
}
static
void
addUnitPublisher
(
def
myJob
)
{
myJob
.
with
{
configure
{
node
->
node
/
'publishers'
<<
{
'xunit'
(
'plugin'
:
'xunit@1.97'
)
{
'types'
{
'XUnitDotNetTestType'
{
'pattern'
(
'**/xUnitResults/*.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'
)
}
// True when this is a PR job, false for commit. On feature branches we do PR jobs only.
def
commitPullList
=
[
false
,
true
]
if
(
branchName
.
startsWith
(
"features/"
))
{
commitPullList
=
[
true
]
}
// Windows
commitPullList
.
each
{
isPr
->
[
'debug'
,
'release'
].
each
{
configuration
->
[
'unit32'
,
'unit64'
].
each
{
buildTarget
->
def
jobName
=
Utilities
.
getFullJobName
(
projectName
,
"windows_${configuration}_${buildTarget}"
,
isPr
)
def
myJob
=
job
(
jobName
)
{
description
(
"Windows ${configuration} tests on ${buildTarget}"
)
steps
{
batchFile
(
"""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd ${(configuration == 'debug') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}"""
)
}
}
}
}
}
static
void
addPushTrigger
(
def
myJob
)
{
myJob
.
with
{
triggers
{
githubPush
()
def
triggerPhraseOnly
=
configuration
==
'release'
def
triggerPhraseExtra
=
""
Utilities
.
setMachineAffinity
(
myJob
,
'Windows_NT'
,
'latest-or-auto'
)
Utilities
.
addXUnitDotNETResults
(
myJob
,
'**/xUnitResults/*.xml'
)
addRoslynJob
(
myJob
,
jobName
,
branchName
,
isPr
,
triggerPhraseExtra
,
triggerPhraseOnly
)
}
}
}
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+(${contextName.replace('_', '/').substring(7)}|${opsysName}|${triggerKeyword}|${opsysName}\\W+${triggerKeyword}|${triggerKeyword}\\W+${opsysName})\\W+please.*"
)
onlyTriggerPhrase
(
triggerOnly
)
autoCloseFailedPullRequests
(
false
)
orgWhitelist
(
'Microsoft'
)
allowMembersOfWhitelistedOrgsAsAdmin
(
true
)
permitAll
(
true
)
extensions
{
commitStatus
{
context
(
contextName
.
replace
(
'_'
,
'/'
).
substring
(
7
))
}
}
}
// Linux
commitPullList
.
each
{
isPr
->
def
jobName
=
Utilities
.
getFullJobName
(
projectName
,
"linux_debug"
,
isPr
)
def
myJob
=
job
(
jobName
)
{
description
(
"Linux tests"
)
steps
{
shell
(
"./cibuild.sh --nocache --debug"
)
}
}
}
static
void
addStandardJob
(
def
myJob
,
String
jobName
,
String
branchName
,
String
buildTarget
,
String
opsys
)
{
addLogRotator
(
myJob
)
addWrappers
(
myJob
)
def
includePattern
=
"Binaries/**/*.pdb,Binaries/**/*.xml,Binaries/**/*.log,Binaries/**/*.dmp,Binaries/**/*.zip"
def
excludePattern
=
"Binaries/Obj/**,Binaries/Bootstrap/**"
addArtifactArchiving
(
myJob
,
includePattern
,
excludePattern
)
if
(
branchName
==
'prtest'
)
{
switch
(
buildTarget
)
{
case
'unit32'
:
addPullRequestTrigger
(
myJob
,
jobName
,
opsys
,
"(unit|unit32|unit\\W+32)"
)
break
;
case
'unit64'
:
addPullRequestTrigger
(
myJob
,
jobName
,
opsys
,
'(unit|unit64|unit\\W+64)'
)
break
;
}
addScm
(
myJob
,
'${sha1}'
,
'+refs/pull/*:refs/remotes/origin/pr/*'
)
}
else
{
addPushTrigger
(
myJob
)
addScm
(
myJob
,
"*/${branchName}"
)
addEmailPublisher
(
myJob
)
}
def
triggerPhraseOnly
=
false
def
triggerPhraseExtra
=
""
Utilities
.
setMachineAffinity
(
myJob
,
'Ubuntu14.04'
,
'latest-or-auto'
)
Utilities
.
addXUnitDotNETResults
(
myJob
,
'**/xUnitResults/*.xml'
)
addRoslynJob
(
myJob
,
jobName
,
branchName
,
isPr
,
triggerPhraseExtra
,
triggerPhraseOnly
)
}
[
'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
(
''
)
}
switch
(
opsys
)
{
case
'win'
:
myJob
.
with
{
label
(
'windows-roslyn'
)
steps
{
batchFile
(
"""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd ${(configuration == 'dbg') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}"""
)
}
}
// Generic throttling for Windows, no category
addConcurrentBuild
(
myJob
,
null
)
break
;
case
'linux'
:
myJob
.
with
{
label
(
'ubuntu-fast'
)
steps
{
shell
(
"./cibuild.sh --nocache --debug"
)
}
}
addConcurrentBuild
(
myJob
,
'roslyn/lin/unit'
)
break
;
case
'mac'
:
myJob
.
with
{
label
(
'mac-roslyn'
)
steps
{
shell
(
"./cibuild.sh --nocache --debug"
)
}
}
addConcurrentBuild
(
myJob
,
'roslyn/mac/unit'
)
break
;
}
addUnitPublisher
(
myJob
)
addStandardJob
(
myJob
,
jobName
,
branchName
,
buildTarget
,
opsys
)
}
}
}
// Mac
commitPullList
.
each
{
isPr
->
def
jobName
=
Utilities
.
getFullJobName
(
projectName
,
"mac_debug"
,
isPr
)
def
myJob
=
job
(
jobName
)
{
description
(
"Mac tests"
)
label
(
'mac-roslyn'
)
steps
{
shell
(
"./cibuild.sh --nocache --debug"
)
}
}
if
(
branchName
!=
'prtest'
)
{
def
determinismJobName
=
"roslyn_${branchName.substring(0, 6)}_determinism
"
def
determinismJob
=
job
(
determinismJobName
)
{
description
(
''
)
}
def
triggerPhraseOnly
=
true
def
triggerPhraseExtra
=
"
"
Utilities
.
addXUnitDotNETResults
(
myJob
,
'**/xUnitResults/*.xml'
)
addRoslynJob
(
myJob
,
jobName
,
branchName
,
isPr
,
triggerPhraseExtra
,
triggerPhraseOnly
)
}
determinismJob
.
with
{
label
(
'windows-roslyn'
)
steps
{
batchFile
(
"""set TEMP=%WORKSPACE%\\Binaries\\Temp
// Determinism
commitPullList
.
each
{
isPr
->
def
jobName
=
Utilities
.
getFullJobName
(
projectName
,
"windows_determinism"
,
isPr
)
def
myJob
=
job
(
jobName
)
{
description
(
'Determinism tests'
)
label
(
'windows-roslyn'
)
steps
{
batchFile
(
"""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd /testDeterminism"""
)
}
}
addConcurrentBuild
(
determinismJob
,
null
)
addStandardJob
(
determinismJob
,
determinismJobName
,
branchName
,
"unit32"
,
"win"
)
}
def
triggerPhraseOnly
=
true
def
triggerPhraseExtra
=
""
Utilities
.
setMachineAffinity
(
myJob
,
'Windows_NT'
,
'latest-or-auto'
)
addRoslynJob
(
myJob
,
jobName
,
branchName
,
isPr
,
triggerPhraseExtra
,
triggerPhraseOnly
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录