stop passing delegate manually as function argument

refs DE-687

Test Plan
1. JS test count equals master test count
2. "expected to call" CPS warning doesn't appear

[canvas-builds-refspec=5a9ac2821ed203759e4f0e37f579774a210c81ba]

Change-Id: Id5e5c8c3b80ad5483f8b08913806b2195401e334
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/266238
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Aaron Ogata <aogata@instructure.com>
Product-Review: Aaron Ogata <aogata@instructure.com>
Reviewed-by: Kyle Rosenbaum <krosenbaum@instructure.com>
This commit is contained in:
Aaron Ogata 2021-06-02 18:47:13 -07:00
parent f51e5b31f4
commit fe5d819183
2 changed files with 47 additions and 44 deletions

View File

@ -53,41 +53,38 @@ pipeline {
script {
def runnerStages = [:]
def stageHooks = [
onNodeAcquired: jsStage.&setupNode,
onNodeAcquired: jsStage.setupNode(),
]
extendedStage('Runner - Jest').hooks(stageHooks).nodeRequirements(label: 'canvas-docker', podTemplate: libraryResource('/pod_templates/docker_base.yml'), container: 'docker').obeysAllowStages(false).timeout(10).queue(runnerStages) {
def delegate = getDelegate()
def tests = [:]
jsStage.queueJestStage(tests, delegate)
callableWithDelegate(jsStage.queueJestStage())(tests)
parallel(tests)
}
extendedStage('Runner - Coffee').hooks(stageHooks).nodeRequirements(label: 'canvas-docker', podTemplate: libraryResource('/pod_templates/docker_base.yml'), container: 'docker').obeysAllowStages(false).timeout(10).queue(runnerStages) {
def delegate = getDelegate()
def tests = [:]
for (int i = 0; i < COFFEE_NODE_COUNT; i++) {
jsStage.queueKarmaStage(tests, delegate, 'coffee', i, COFFEE_NODE_COUNT)
callableWithDelegate(jsStage.queueKarmaStage())(tests, 'coffee', i, COFFEE_NODE_COUNT)
}
parallel(tests)
}
extendedStage('Runner - Karma').hooks(stageHooks).nodeRequirements(label: 'canvas-docker', podTemplate: libraryResource('/pod_templates/docker_base.yml'), container: 'docker').obeysAllowStages(false).timeout(10).queue(runnerStages) {
def delegate = getDelegate()
def tests = [:]
jsStage.queuePackagesStage(tests, delegate)
callableWithDelegate(jsStage.queuePackagesStage())(tests)
for (int i = 0; i < JSG_NODE_COUNT; i++) {
jsStage.queueKarmaStage(tests, delegate, 'jsg', i, JSG_NODE_COUNT)
callableWithDelegate(jsStage.queueKarmaStage())(tests, 'jsg', i, JSG_NODE_COUNT)
}
['jsa', 'jsh'].each { group ->
jsStage.queueKarmaStage(tests, delegate, group, 0, DEFAULT_NODE_COUNT)
callableWithDelegate(jsStage.queueKarmaStage())(tests, group, 0, DEFAULT_NODE_COUNT)
}
parallel(tests)

View File

@ -17,56 +17,62 @@
*/
def setupNode() {
def refspecToCheckout = env.GERRIT_PROJECT == 'canvas-lms' ? env.JENKINSFILE_REFSPEC : env.CANVAS_LMS_REFSPEC
{ ->
def refspecToCheckout = env.GERRIT_PROJECT == 'canvas-lms' ? env.JENKINSFILE_REFSPEC : env.CANVAS_LMS_REFSPEC
checkoutRepo('canvas-lms', refspecToCheckout, 1)
checkoutRepo('canvas-lms', refspecToCheckout, 1)
credentials.withStarlordDockerLogin { ->
sh "./build/new-jenkins/docker-with-flakey-network-protection.sh pull $KARMA_RUNNER_IMAGE"
credentials.withStarlordDockerLogin { ->
sh "./build/new-jenkins/docker-with-flakey-network-protection.sh pull $KARMA_RUNNER_IMAGE"
}
}
}
def tearDownNode() {
sh "mkdir -vp ${env.TEST_RESULT_OUTPUT_DIR}"
sh "docker cp \$(docker ps -qa -f name=${env.CONTAINER_NAME}):/usr/src/app/${env.TEST_RESULT_OUTPUT_DIR} ${env.TEST_RESULT_OUTPUT_DIR}"
{ ->
sh "mkdir -vp ${env.TEST_RESULT_OUTPUT_DIR}"
sh "docker cp \$(docker ps -qa -f name=${env.CONTAINER_NAME}):/usr/src/app/${env.TEST_RESULT_OUTPUT_DIR} ${env.TEST_RESULT_OUTPUT_DIR}"
sh "find ${env.TEST_RESULT_OUTPUT_DIR}"
sh "find ${env.TEST_RESULT_OUTPUT_DIR}"
archiveArtifacts artifacts: "${env.TEST_RESULT_OUTPUT_DIR}/**/*.xml"
junit "${env.TEST_RESULT_OUTPUT_DIR}/**/*.xml"
}
def queueJestStage(stages, delegate) {
queueTestStage(stages, delegate, 'tests-jest', []) {
sh('build/new-jenkins/js/tests-jest.sh')
archiveArtifacts artifacts: "${env.TEST_RESULT_OUTPUT_DIR}/**/*.xml"
junit "${env.TEST_RESULT_OUTPUT_DIR}/**/*.xml"
}
}
def queueKarmaStage(stages, delegate, group, ciNode, ciTotal) {
queueTestStage(stages, delegate, "tests-karma-${group}-${ciNode}", [
"CI_NODE_INDEX=${ciNode}",
"CI_NODE_TOTAL=${ciTotal}",
"JSPEC_GROUP=${group}",
]) {
sh('build/new-jenkins/js/tests-karma.sh')
def queueJestStage() {
{ stages ->
callableWithDelegate(queueTestStage())(stages, 'tests-jest', [], 'build/new-jenkins/js/tests-jest.sh')
}
}
def queuePackagesStage(stages, delegate) {
queueTestStage(stages, delegate, 'tests-packages', []) {
sh('build/new-jenkins/js/tests-packages.sh')
def queueKarmaStage() {
{ stages, group, ciNode, ciTotal ->
callableWithDelegate(queueTestStage())(stages, "tests-karma-${group}-${ciNode}", [
"CI_NODE_INDEX=${ciNode}",
"CI_NODE_TOTAL=${ciTotal}",
"JSPEC_GROUP=${group}",
], 'build/new-jenkins/js/tests-karma.sh')
}
}
def queueTestStage(stages, delegate, containerName, additionalEnvVars, block) {
def baseEnvVars = [
"CONTAINER_NAME=${containerName}",
"TEST_RESULT_OUTPUT_DIR=js-results/${containerName}",
]
delegate.extendedStage(containerName)
.envVars(baseEnvVars + additionalEnvVars)
.hooks([onNodeReleasing: this.&tearDownNode])
.obeysAllowStages(false)
.queue(stages) { block() }
def queuePackagesStage() {
{ stages ->
callableWithDelegate(queueTestStage())(stages, 'tests-packages', [], 'build/new-jenkins/js/tests-packages.sh')
}
}
def queueTestStage() {
{ stages, containerName, additionalEnvVars, scriptName ->
def baseEnvVars = [
"CONTAINER_NAME=${containerName}",
"TEST_RESULT_OUTPUT_DIR=js-results/${containerName}",
]
extendedStage(containerName)
.envVars(baseEnvVars + additionalEnvVars)
.hooks([onNodeReleasing: this.tearDownNode()])
.obeysAllowStages(false)
.queue(stages) { sh(scriptName) }
}
}