diff --git a/services/jenkins/configmap-jcasc.yaml b/services/jenkins/configmap-jcasc.yaml
index c1c6d14d3..836a86a48 100644
--- a/services/jenkins/configmap-jcasc.yaml
+++ b/services/jenkins/configmap-jcasc.yaml
@@ -489,93 +489,94 @@ data:
node(POD_LABEL) {
container('kubectl') {
stage('Fixture check') {
- def buildNum = env.BUILD_NUMBER
- def incidentId = "hermes-triage-demo/${buildNum}"
- def jobName = "hermes-demo-test-${buildNum}"
- def seed = params.SEED_FAILURE ? "true" : "false"
- writeFile file: 'test-runner-job.yaml', text: """
- apiVersion: batch/v1
- kind: Job
- metadata:
- name: ${jobName}
- namespace: hermes-triage-demo
- labels:
- app.kubernetes.io/part-of: hermes-triage-demo
- atlas.bstein.dev/role: demo-test-runner
- spec:
- backoffLimit: 0
- ttlSecondsAfterFinished: 3600
- template:
- metadata:
- labels:
- app.kubernetes.io/part-of: hermes-triage-demo
- atlas.bstein.dev/role: demo-test-runner
- spec:
- restartPolicy: Never
- containers:
- - name: test-runner
- image: busybox:1.37
- env:
- - name: INCIDENT_ID
- value: "${incidentId}"
- - name: SEED_FAILURE
- value: "${seed}"
- command:
- - sh
- - -c
- - |
- STATE_FILE=/fixture/state
- if [ "\\$SEED_FAILURE" = "true" ]; then
- echo unhealthy > "\\$STATE_FILE"
- fi
- if [ ! -f "\\$STATE_FILE" ]; then
- echo healthy > "\\$STATE_FILE"
- fi
- STATE=\\$(cat "\\$STATE_FILE")
- if [ "\\$STATE" = "healthy" ]; then
- echo "{\\\\"event\\\\":\\\\"hermes_demo_test_pass\\\\",\\\\"incident_id\\\\":\\\\"\\$INCIDENT_ID\\\\",\\\\"message\\\\":\\\\"fixture state healthy\\\\"}"
- exit 0
- fi
- echo "{\\\\"event\\\\":\\\\"hermes_demo_test_failure\\\\",\\\\"incident_id\\\\":\\\\"\\$INCIDENT_ID\\\\",\\\\"classification_hint\\\\":\\\\"demo_fixture_unhealthy\\\\",\\\\"message\\\\":\\\\"expected fixture state healthy; found \\$STATE\\\\"}"
- exit 1
- volumeMounts:
- - name: fixture
- mountPath: /fixture
- resources:
- requests:
- cpu: 25m
- memory: 16Mi
- limits:
- cpu: 100m
- memory: 32Mi
- volumes:
- - name: fixture
- persistentVolumeClaim:
- claimName: hermes-triage-demo-fixture
- """
- sh "kubectl -n hermes-triage-demo create -f test-runner-job.yaml"
- def verdict = "unknown"
+ def buildNum = '' + env.BUILD_NUMBER
+ def incidentId = 'hermes-triage-demo/' + buildNum
+ def jobName = 'hermes-demo-test-' + buildNum
+ def seed = params.SEED_FAILURE ? 'true' : 'false'
+ def manifest = [
+ 'apiVersion: batch/v1',
+ 'kind: Job',
+ 'metadata:',
+ ' name: ' + jobName,
+ ' namespace: hermes-triage-demo',
+ ' labels:',
+ ' app.kubernetes.io/part-of: hermes-triage-demo',
+ ' atlas.bstein.dev/role: demo-test-runner',
+ 'spec:',
+ ' backoffLimit: 0',
+ ' ttlSecondsAfterFinished: 3600',
+ ' template:',
+ ' metadata:',
+ ' labels:',
+ ' app.kubernetes.io/part-of: hermes-triage-demo',
+ ' atlas.bstein.dev/role: demo-test-runner',
+ ' spec:',
+ ' restartPolicy: Never',
+ ' containers:',
+ ' - name: test-runner',
+ ' image: busybox:1.37',
+ ' env:',
+ ' - name: INCIDENT_ID',
+ ' value: "' + incidentId + '"',
+ ' - name: SEED_FAILURE',
+ ' value: "' + seed + '"',
+ ' command:',
+ ' - sh',
+ ' - -c',
+ ' - |',
+ ' STATE_FILE=/fixture/state',
+ ' if [ "$SEED_FAILURE" = "true" ]; then',
+ ' echo unhealthy > "$STATE_FILE"',
+ ' fi',
+ ' if [ ! -f "$STATE_FILE" ]; then',
+ ' echo healthy > "$STATE_FILE"',
+ ' fi',
+ ' STATE=$(cat "$STATE_FILE")',
+ ' if [ "$STATE" = "healthy" ]; then',
+ ' echo "{\\"event\\":\\"hermes_demo_test_pass\\",\\"incident_id\\":\\"$INCIDENT_ID\\",\\"message\\":\\"fixture state healthy\\"}"',
+ ' exit 0',
+ ' fi',
+ ' echo "{\\"event\\":\\"hermes_demo_test_failure\\",\\"incident_id\\":\\"$INCIDENT_ID\\",\\"classification_hint\\":\\"demo_fixture_unhealthy\\",\\"message\\":\\"expected fixture state healthy; found $STATE\\"}"',
+ ' exit 1',
+ ' volumeMounts:',
+ ' - name: fixture',
+ ' mountPath: /fixture',
+ ' resources:',
+ ' requests:',
+ ' cpu: 25m',
+ ' memory: 16Mi',
+ ' limits:',
+ ' cpu: 100m',
+ ' memory: 32Mi',
+ ' volumes:',
+ ' - name: fixture',
+ ' persistentVolumeClaim:',
+ ' claimName: hermes-triage-demo-fixture'
+ ]
+ writeFile file: 'test-runner-job.yaml', text: manifest.join('\n') + '\n'
+ sh 'kubectl -n hermes-triage-demo create -f test-runner-job.yaml'
+ def verdict = 'unknown'
timeout(time: 3, unit: 'MINUTES') {
- waitUntil(initialRecurrencePeriod: 5000) {
- def st = sh(script: "kubectl -n hermes-triage-demo get job ${jobName} -o jsonpath='{.status.succeeded}:{.status.failed}'", returnStdout: true).trim()
- if (st.startsWith("1")) { verdict = "pass"; return true }
- if (st.endsWith(":1")) { verdict = "fail"; return true }
+ waitUntil {
+ def st = sh(script: 'kubectl -n hermes-triage-demo get job ' + jobName + ' -o jsonpath={.status.succeeded}:{.status.failed}', returnStdout: true).trim()
+ if (st.startsWith('1')) { verdict = 'pass'; return true }
+ if (st.endsWith(':1')) { verdict = 'fail'; return true }
return false
}
}
- def runnerLog = sh(script: "kubectl -n hermes-triage-demo logs job/${jobName} --tail=20 || true", returnStdout: true).trim()
- echo "test-runner output:\\n${runnerLog}"
+ def runnerLog = sh(script: 'kubectl -n hermes-triage-demo logs job/' + jobName + ' --tail=20 || true', returnStdout: true).trim()
+ echo 'test-runner output: ' + runnerLog
def junitBody
- if (verdict == "pass") {
- junitBody = """"""
+ if (verdict == 'pass') {
+ junitBody = ''
} else {
- def safeLog = runnerLog.replace("&", "&").replace("<", "<").replace(">", ">")
- junitBody = """${safeLog}"""
+ def safeLog = runnerLog.replace('&', '&').replace('<', '<').replace('>', '>')
+ junitBody = '' + safeLog + ''
}
writeFile file: 'demo-junit.xml', text: junitBody
junit 'demo-junit.xml'
- if (verdict != "pass") {
- error("Demo fixture check failed for incident ${incidentId}")
+ if (verdict != 'pass') {
+ error('Demo fixture check failed for incident ' + incidentId)
}
}
}