netci.groovy 5.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// 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)
21
      maxPerNode(1)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
      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 {
48
        absolute(120)
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
        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' {
74
          'pattern'('**/xUnitResults/*.xml')
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
            '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 {
115 116 117 118
    triggers {
      pullRequest {
        admin('Microsoft')
        useGitHubHooks(true)
J
Jonathon Marolf 已提交
119
        triggerPhrase("(?i).*test\\W+(${contextName.replace('_', '/').substring(7)}|${opsysName}|${triggerKeyword}|${opsysName}\\W+${triggerKeyword}|${triggerKeyword}\\W+${opsysName})\\W+please.*")
120 121 122 123
        onlyTriggerPhrase(triggerOnly)
        autoCloseFailedPullRequests(false)
        orgWhitelist('Microsoft')
        allowMembersOfWhitelistedOrgsAsAdmin(true)
124
        permitAll(true)
125 126 127
        extensions {
          commitStatus {
            context(contextName.replace('_', '/').substring(7))
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
          }
        }
      }
    }
  }
}

['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('')
            }

149 150 151
            switch (opsys) {
              case 'win':
                myJob.with {
152
                  label('windows-roslyn')
153 154 155
                  steps {
                    batchFile(".\\cibuild.cmd ${(configuration == 'dbg') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}")
                  }
156
                }
157
                addConcurrentBuild(myJob, 'roslyn/win/unit')
158 159 160 161 162
                break;
              case 'linux':
                myJob.with {
                  label('ubuntu-fast')
                  steps {
163
                    shell("./cibuild.sh --nocache --debug")
164
                  }
165
                }
166
                addConcurrentBuild(myJob, 'roslyn/lin/unit')
167 168 169 170 171
                break;
              case 'mac':
                myJob.with {
                  label('mac-roslyn')
                  steps {
172
                    shell("./cibuild.sh --nocache --debug")
173 174
                  }
                }
175
                addConcurrentBuild(myJob, 'roslyn/mac/unit')
176
                break;
177 178 179 180 181 182 183 184 185 186
            }

            addLogRotator(myJob)
            addWrappers(myJob)

            addUnitPublisher(myJob)

            if (branchName == 'prtest') {
              switch (buildTarget) {
                case 'unit32':
187
                  addPullRequestTrigger(myJob, jobName, opsys, "(unit|unit32|unit\\W+32)")
188 189
                  break;
                case 'unit64':
190
                  addPullRequestTrigger(myJob, jobName, opsys, '(unit|unit64|unit\\W+64)')
191 192 193 194 195 196 197 198 199 200 201 202 203 204
                  break;
              }
              addScm(myJob, '${sha1}', '+refs/pull/*:refs/remotes/origin/pr/*')
            } else {
              addPushTrigger(myJob)
              addScm(myJob, "*/${branchName}")
              addEmailPublisher(myJob)
            }
          }
        }
      }
    }
  }
}