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) } } }