diff options
author | Drew Scoggins <anscoggi@microsoft.com> | 2016-07-25 22:34:35 +0300 |
---|---|---|
committer | Drew Scoggins <anscoggi@microsoft.com> | 2017-03-06 21:38:50 +0300 |
commit | 35dd79d5d7f5d2ec93424dcc1c47adfa0bf201c6 (patch) | |
tree | 23099bfd51a9d91d50e8425b3d3c1a3319e44ce2 /perf.groovy | |
parent | 30e9fb02d048e88c71f772eed80ccff407f614d9 (diff) |
Add new perf job to Jenkins
I have added a new perf.groovy file to deal with the perf runs for
CoreFX. Currently we are only adding Windows, but will add Linux
support after this is running.
Diffstat (limited to 'perf.groovy')
-rw-r--r-- | perf.groovy | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/perf.groovy b/perf.groovy new file mode 100644 index 0000000000..451ba02105 --- /dev/null +++ b/perf.groovy @@ -0,0 +1,133 @@ +// Import the utility functionality. + +import jobs.generation.*; + +// The input project name (e.g. dotnet/corefx) +def project = GithubProject +// The input branch name (e.g. master) +def branch = GithubBranchName +// Folder that the project jobs reside in (project/branch) +def projectFolder = Utilities.getFolderName(project) + '/' + Utilities.getFolderName(branch) + +// Globals + +// Map of os -> osGroup. +def osGroupMap = ['Ubuntu14.04':'Linux', + 'Ubuntu16.04':'Linux', + 'Debian8.4':'Linux', + 'Fedora23':'Linux', + 'OSX':'OSX', + 'Windows_NT':'Windows_NT', + 'CentOS7.1': 'Linux', + 'OpenSUSE13.2': 'Linux', + 'RHEL7.2': 'Linux', + 'LinuxARMEmulator': 'Linux'] + +// Map of os -> nuget runtime +def targetNugetRuntimeMap = ['OSX' : 'osx.10.10-x64', + 'Ubuntu14.04' : 'ubuntu.14.04-x64', + 'Ubuntu16.04' : 'ubuntu.16.04-x64', + 'Fedora23' : 'fedora.23-x64', + 'Debian8.4' : 'debian.8-x64', + 'CentOS7.1' : 'centos.7-x64', + 'OpenSUSE13.2' : 'opensuse.13.2-x64', + 'RHEL7.2': 'rhel.7-x64'] + +def osShortName = ['Windows 10': 'win10', + 'Windows 7' : 'win7', + 'Windows_NT' : 'windows_nt', + 'Ubuntu14.04' : 'ubuntu14.04', + 'OSX' : 'osx', + 'Windows Nano 2016' : 'winnano16', + 'Ubuntu16.04' : 'ubuntu16.04', + 'CentOS7.1' : 'centos7.1', + 'Debian8.4' : 'debian8.4', + 'OpenSUSE13.2' : 'opensuse13.2', + 'Fedora23' : 'fedora23', + 'RHEL7.2' : 'rhel7.2'] + + +// ************************** +// Define perf testing. These tests should be run daily, and will run on Jenkins not in Helix +// ************************** +[true, false].each { isPR -> + ['Release'].each { configurationGroup -> + ['Windows_NT'].each { os -> + def osGroup = osGroupMap[os] + def newJobName = "perf_${os.toLowerCase()}_${configurationGroup.toLowerCase()}" + + def newJob = job(Utilities.getFullJobName(project, newJobName, isPR)) { + + label('windows_clr_perf') + wrappers { + credentialsBinding { + string('BV_UPLOAD_SAS_TOKEN', 'CoreFX Perf BenchView Sas') + } + } + + if (isPR) + { + parameters + { + stringParam('BenchviewCommitName', '\${ghprbPullTitle}', 'The name that you will be used to build the full title of a run in Benchview. The final name will be of the form <branch> private BenchviewCommitName') + } + } + parameters + { + stringParam('XUNIT_PERFORMANCE_MAX_ITERATION', '100', 'Set the maximum number of iterations that a test can execute') + } + def configuration = 'Release' + def runType = isPR ? 'private' : 'rolling' + def benchViewName = isPR ? 'corefx private %BenchviewCommitName%' : 'corefx rolling %GIT_BRANCH_WITHOUT_ORIGIN% %GIT_COMMIT%' + + steps { + //We need to specify the max cpu count to be one as we do not want to be executing performance tests in parallel + batchFile("call \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x86 && build.cmd -release") + batchFile("C:\\Tools\\nuget.exe install Microsoft.BenchView.JSONFormat -Source http://benchviewtestfeed.azurewebsites.net/nuget -OutputDirectory \"%WORKSPACE%\\Tools\" -Prerelease -ExcludeVersion") + //Do this here to remove the origin but at the front of the branch name as this is a problem for BenchView + //we have to do it all as one statement because cmd is called each time and we lose the set environment variable + batchFile("if [%GIT_BRANCH:~0,7%] == [origin/] (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH:origin/=%) else (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH%)\n" + + "py \"%WORKSPACE%\\Tools\\Microsoft.BenchView.JSONFormat\\tools\\submission-metadata.py\" --name " + "\"" + benchViewName + "\"" + " --user " + "\"dotnet-bot@microsoft.com\"\n" + + "py \"%WORKSPACE%\\Tools\\Microsoft.BenchView.JSONFormat\\tools\\build.py\" git --branch %GIT_BRANCH_WITHOUT_ORIGIN% --type " + runType) + batchFile("py \"%WORKSPACE%\\Tools\\Microsoft.BenchView.JSONFormat\\tools\\machinedata.py\"") + batchFile("call \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x86 && build-managed.cmd -release -tests -- /p:Performance=true /p:TargetOS=Windows_NT /m:1 /p:LogToBenchview=true /p:BenchviewRunType=${runType}") + } + } + + // Set the label. + newJob.with { + label('windows_clr_perf') + } + // Set up standard options. + Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") + //Set timeout to non-default + newJob.with { + wrappers { + timeout { + absolute(240) + } + } + } + // Add the unit test results + Utilities.addXUnitDotNETResults(newJob, 'bin/**/Perf-*.xml') + def archiveContents = "msbuild.log" + + // Add archival for the built data. + Utilities.addArchival(newJob, archiveContents) + // Set up triggers + if (isPR) { + TriggerBuilder builder = TriggerBuilder.triggerOnPullRequest() + builder.setGithubContext("${os} Perf Tests") + builder.triggerOnlyOnComment() + builder.setCustomTriggerPhrase("(?i).*test\\W+${os}\\W+perf.*") + builder.triggerForBranch(branch) + builder.emitTrigger(newJob) + } + else { + // Set a push trigger + TriggerBuilder builder = TriggerBuilder.triggerOnCommit() + builder.emitTrigger(newJob) + } + } + } +}
\ No newline at end of file |