netci.groovy 7.9 KB
Newer Older
1 2 3
// Groovy Script: http://www.groovy-lang.org/syntax.html
// Jenkins DSL: https://github.com/jenkinsci/job-dsl-plugin/wiki

4
import jobs.generation.*;
J
Jared Parsons 已提交
5

J
Jared Parsons 已提交
6 7 8 9 10 11
// 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)
J
Jared Parsons 已提交
12

13
// Email the results of aborted / failed jobs to our infrastructure alias
14 15 16
static void addEmailPublisher(def myJob) {
  myJob.with {
    publishers {
T
Ty Overby 已提交
17
      extendedEmail('mlinfraswat@microsoft.com', '$DEFAULT_SUBJECT', '$DEFAULT_CONTENT') {
18
        // trigger(trigger name, subject, body, recipient list, send to developers, send to requester, include culprits, send to recipient list)
T
Ty Overby 已提交
19 20
        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)
21 22 23 24 25
      }
    }
  }
}

26 27 28 29 30 31 32 33 34 35 36 37
// 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 {
    notifications {
      endpoint('https://jaredpar.azurewebsites.net/api/BuildEvent?code=tts2pvyelahoiliwu7lo6flxr8ps9kaip4hyr4m0ofa3o3l3di77tzcdpk22kf9gex5m6cbrcnmi') {
        event('all')
      }
    }
  }   
}

J
Jared Parsons 已提交
38
static void addRoslynJob(def myJob, String jobName, String branchName, Boolean isPr, String triggerPhraseExtra, Boolean triggerPhraseOnly = false) {
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
  def archiveSettings = new ArchivalSettings()
  archiveSettings.addFiles('Binaries/**/*.pdb')
  archiveSettings.addFiles('Binaries/**/*.xml')
  archiveSettings.addFiles('Binaries/**/*.log')
  archiveSettings.addFiles('Binaries/**/*.dmp')
  archiveSettings.addFiles('Binaries/**/*.zip')
  archiveSettings.addFiles('Binaries/**/*.png')
  archiveSettings.addFiles('Binaries/**/*.xml')
  archiveSettings.excludeFiles('Binaries/Obj/**')
  archiveSettings.excludeFiles('Binaries/Bootstrap/**')
  archiveSettings.excludeFiles('Binaries/**/nuget*.zip')
  // Only archive if failed/aborted
  archiveSettings.setArchiveOnFailure()
  archiveSettings.setFailIfNothingArchived()
  Utilities.addArchival(myJob, archiveSettings)
54

55
  // Create the standard job.  This will setup parameter, SCM, timeout, etc ...
56
  def projectName = 'dotnet/roslyn'
57
  def defaultBranch = "*/${branchName}"
58
  Utilities.standardJobSetup(myJob, projectName, isPr, defaultBranch)
59 60

  // Need to setup the triggers for the job
J
Jared Parsons 已提交
61
  if (isPr) {
J
Jared Parsons 已提交
62 63 64 65
    def triggerCore = "open|all|${jobName}"
    if (triggerPhraseExtra) {
      triggerCore = "${triggerCore}|${triggerPhraseExtra}"
    }
T
Ty Overby 已提交
66
    def triggerPhrase = "(?i)^\\s*(@?dotnet-bot\\s+)?(re)?test\\s+(${triggerCore})(\\s+please)?\\s*\$";
J
Jared Parsons 已提交
67 68
    def contextName = jobName
    Utilities.addGithubPRTriggerForBranch(myJob, branchName, contextName, triggerPhrase, triggerPhraseOnly)
69
  } else {
70
    Utilities.addGithubPushTrigger(myJob)
71 72
    addEmailPublisher(myJob)
  }
73 74

  addBuildEventWebHook(myJob)
75 76
}

J
Jared Parsons 已提交
77 78 79 80 81 82 83 84 85
// 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 ->
86
        ['unit32', 'unit64'].each { buildTarget ->
J
Jared Parsons 已提交
87
      def jobName = Utilities.getFullJobName(projectName, "windows_${configuration}_${buildTarget}", isPr)
88
            def myJob = job(jobName) {
J
Jared Parsons 已提交
89
        description("Windows ${configuration} tests on ${buildTarget}")
90 91
                  steps {
                    batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
92
mkdir %TEMP%
93
set TMP=%TEMP%
J
Jared Parsons 已提交
94
.\\cibuild.cmd ${(configuration == 'debug') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}""")
95 96
                  }
                }
J
Jared Parsons 已提交
97

98
      def triggerPhraseOnly = false
J
Jared Parsons 已提交
99
      def triggerPhraseExtra = ""
J
Jason Malinowski 已提交
100
      Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
101 102
      Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
      addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
103 104
    }
  }
J
Jared Parsons 已提交
105
}
106

J
Jared Parsons 已提交
107 108 109 110 111
// Linux
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "linux_debug", isPr)
  def myJob = job(jobName) {
    description("Linux tests")
112 113 114 115
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
                }
116

J
Jared Parsons 已提交
117
  def triggerPhraseOnly = false
J
Jared Parsons 已提交
118
  def triggerPhraseExtra = "linux"
119
  Utilities.setMachineAffinity(myJob, 'Ubuntu14.04', 'latest-or-auto')
J
Jared Parsons 已提交
120 121 122 123 124 125 126 127 128
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

// Mac
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "mac_debug", isPr)
  def myJob = job(jobName) {
    description("Mac tests")
129 130 131 132 133
                  label('mac-roslyn')
                  steps {
                    shell("./cibuild.sh --nocache --debug")
                  }
            }
J
Jared Parsons 已提交
134 135

  def triggerPhraseOnly = true
J
Jared Parsons 已提交
136
  def triggerPhraseExtra = "mac"
137
  Utilities.addXUnitDotNETResults(myJob, '**/xUnitResults/*.xml')
J
Jared Parsons 已提交
138
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
139
  }
J
Jared Parsons 已提交
140 141 142 143 144 145

// Determinism
commitPullList.each { isPr -> 
  def jobName = Utilities.getFullJobName(projectName, "windows_determinism", isPr)
  def myJob = job(jobName) {
    description('Determinism tests')
J
Jared Parsons 已提交
146 147 148
    label('windows-roslyn')
    steps {
      batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
149 150 151 152
mkdir %TEMP%
set TMP=%TEMP%
.\\cibuild.cmd /testDeterminism""")
    }
153
  }
154

J
Jared Parsons 已提交
155
  def triggerPhraseOnly = false
156
  def triggerPhraseExtra = "determinism"
157
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
158
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
159
}
160 161 162 163 164 165 166 167 168 169 170 171

// Perf Correctness
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "perf_correctness", isPr)
  def myJob = job(jobName) {
    description('perf test correctness')
    label('windows-roslyn')
    steps {
      batchFile(""".\\cibuild.cmd /testPerfCorrectness""")
    }
  }

172
  def triggerPhraseOnly = false
173
  def triggerPhraseExtra = "perf-correctness"
174
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
175 176
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
J
Jared Parsons 已提交
177 178 179 180 181 182 183 184 185 186 187 188 189 190

// Microbuild
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "microbuild", isPr)
  def myJob = job(jobName) {
    description('MicroBuild test')
    label('windows-roslyn')
    steps {
      batchFile(""".\\src\\Tools\\MicroBuild\\cibuild.cmd""")
    }
  }

  def triggerPhraseOnly = false
  def triggerPhraseExtra = "microbuild"
191
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15')
J
Jared Parsons 已提交
192 193
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}
M
Matt Mitchell 已提交
194

195 196 197 198 199 200 201 202 203 204
// Open Integration Tests
commitPullList.each { isPr ->
  def jobName = Utilities.getFullJobName(projectName, "open-vsi", isPr)
  def myJob = job(jobName) {
    description('open integration tests')
    label('auto-win2012-20160912')
    steps {
      batchFile("""set TEMP=%WORKSPACE%\\Binaries\\Temp
mkdir %TEMP%
set TMP=%TEMP%
205
.\\cibuild.cmd /debug /testVsi""")
206 207 208 209 210
    }
  }

  def triggerPhraseOnly = true
  def triggerPhraseExtra = "open-vsi"
211
  Utilities.setMachineAffinity(myJob, 'Windows_NT', 'latest-or-auto-dev15-preview5')
212 213 214
  addRoslynJob(myJob, jobName, branchName, isPr, triggerPhraseExtra, triggerPhraseOnly)
}

M
Matt Mitchell 已提交
215 216 217 218 219 220
JobReport.Report.generateJobReport(out)

// Make the call to generate the help job
Utilities.createHelperJob(this, projectName, branchName,
    "Welcome to the ${projectName} Repository",  // This is prepended to the help message
    "Have a nice day!")  // This is appended to the help message.  You might put known issues here.