Skip to content
This repository has been archived by the owner on Oct 28, 2024. It is now read-only.

ci: add error message if Error signal #508

Merged
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions local/configs/jenkins.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ jobs:
- file: "/var/pipeline-library/src/test/resources/jobs/downstream.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/getBuildInfoJsonFiles/abort.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/getBuildInfoJsonFiles/connectionRefused.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/getBuildInfoJsonFiles/error.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/getBuildInfoJsonFiles/success.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/getBuildInfoJsonFiles/unstable.dsl"
- file: "/var/pipeline-library/src/test/resources/jobs/git.dsl"
Expand Down
32 changes: 29 additions & 3 deletions resources/scripts/generate-build-data.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ DEFAULT_HASH="{ }"
DEFAULT_LIST="[ ]"
DEFAULT_STRING='" "'

### To manipulate the steps
BASE_URL="${JENKINS_URL}"
if [ -z "${JENKINS_URL}" ] ; then
BASE_URL=${BO_JOB_URL//\/blue\/rest\/*/}
fi

### Prepare the utils for the context if possible
if [ -e "${UTILS_LIB}" ] ; then
# shellcheck disable=SC1091,SC1090
Expand Down Expand Up @@ -132,7 +138,7 @@ function fetchAndPrepareTestsInfo() {
## Tests json response differs when there were tests executed in
## the pipeline, otherwise it returns:
## { message: "no tests", code: 404, errors: [] }
if jq -e 'select(.code==404)' "${file}" > /dev/null ; then
if jq -e 'select(.code==404)' "${file}" > /dev/null 2>&1 ; then
echo "${default}" > "${file}"
else
normaliseTests "${file}"
Expand Down Expand Up @@ -205,14 +211,34 @@ function fetchAndDefaultStepsInfo() {
default=$3

fetchAndDefault "${file}" "${url}" "${default}"
normaliseSteps "${file}"

### Prepare steps errors report
output="${STEPS_ERRORS}"
jq 'map(select(.result=="FAILURE"))' "${file}" > "${output}"
if ! grep -q 'result' "${output}" ; then
echo "${default}" > "${output}"
else
### Update the displayDescription for those steps with a failure and an empty displayDescription.
### For instance, when using theh pipeline step `error('foo')`
### then the 'foo' message is not shown in the BlueOcean restAPI.
###
if jq -e 'map(select(.type=="STEP" and .result=="FAILURE" and .displayDescription==null))' "${output}" > /dev/null ; then
tmp=$(mktemp)
for href in $(jq -r 'map(select(.type=="STEP" and .result=="FAILURE" and .displayDescription==null) | ._links.self.href) | .[]' "${output}"); do
id=$(basename "${href}")
new=$(curl -s "${BASE_URL}${href}log/" | head -c 100)
curlCommand "${tmp}" "${BASE_URL}${href}log/"
if [ -e "${tmp}" ] ; then
cachedout marked this conversation as resolved.
Show resolved Hide resolved
new=$(head -c 100 "${tmp}")
jq --arg id "${id}" --arg new "${new}" '(.[] | select(.result=="FAILURE" and .displayDescription==null and .id==$id) | .displayDescription) |= $new' "${output}" > "$tmp" && mv "$tmp" "${output}"
fi
done
fi
fi

## Normalise later on
normaliseSteps "${file}"
normaliseSteps "${output}"
}

function fetchAndDefaultTestsErrors() {
Expand All @@ -225,7 +251,7 @@ function fetchAndDefaultTestsErrors() {
## Tests json response differs when there were tests executed in
## the pipeline, otherwise it returns:
## { message: "no tests", code: 404, errors: [] }
if jq -e 'select(.code==404)' "${file}" > /dev/null ; then
if jq -e 'select(.code==404)' "${file}" > /dev/null 2>&1 ; then
echo "${default}" > "${file}"
else
normaliseTests "${file}"
Expand Down
39 changes: 39 additions & 0 deletions src/test/resources/jobs/getBuildInfoJsonFiles/error.dsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
NAME = 'it/getBuildInfoJsonFiles/error'
DSL = '''pipeline {
agent { label 'local' }
stages {
stage('error') {
steps { error ('foo') }
}
}
post {
cleanup {
deleteDir()
getBuildInfoJsonFiles(env.JOB_URL, env.BUILD_NUMBER)
archiveArtifacts artifacts: '*.json'
sh """#!/bin/bash -xe
## Assert json modifications
jq '.build.result' build-report.json | grep 'FAILURE'
jq '.build.state' build-report.json | grep 'FINISHED'
jq '.test_summary.total' build-report.json | grep '0'
jq 'map(select(.type=="STEP" and .result=="FAILURE" and .displayDescription=="foo"))' steps-errors.json | grep "foo"
## Assert all the files are there
[ -e 'artifacts-info.json' ] && echo yeah || exit 1
[ -e 'changeSet-info.json' ] && echo yeah || exit 1
[ -e 'job-info.json' ] && echo yeah || exit 1
[ -e 'tests-summary.json' ] && echo yeah || exit 1
[ -e 'tests-info.json' ] && echo yeah || exit 1
[ -e 'steps-info.json' ] && echo yeah || exit 1
[ -e 'steps-error.json' ] && echo yeah || exit 1
"""
}
}
}'''

pipelineJob(NAME) {
definition {
cps {
script(DSL.stripIndent())
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"id" : "062e59bc-aee5-43a9-b51d-675840836041",
"name" : "blue_rest_organizations_jenkins_pipelines_it_getbuildinfojsonfiles_abort",
"request" : {
"url" : "/blue/rest/organizations/jenkins/pipelines/it/getBuildInfoJsonFiles/abort/",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "{\"_class\":\"io.jenkins.blueocean.rest.impl.pipeline.PipelineImpl\",\"_links\":{\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/\"},\"scm\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/scm/\"},\"actions\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/actions/\"},\"runs\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/\"},\"trends\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/trends/\"},\"queue\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/queue/\"}},\"actions\":[],\"disabled\":false,\"displayName\":\"abort\",\"estimatedDurationInMillis\":-1,\"fullDisplayName\":\"IT/getBuildInfoJsonFiles/abort\",\"fullName\":\"it/getBuildInfoJsonFiles/abort\",\"latestRun\":{\"_class\":\"io.jenkins.blueocean.rest.impl.pipeline.PipelineImpl$PipelineRunSummary\",\"_links\":{\"parent\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/\"},\"tests\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/tests/\"},\"log\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/log/\"},\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/\"},\"blueTestSummary\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/blueTestSummary/\"},\"actions\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/actions/\"},\"changeSet\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/changeSet/\"},\"artifacts\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/artifacts/\"}},\"actions\":[],\"artifactsZipFile\":\"/job/it/job/getBuildInfoJsonFiles/job/abort/1/artifact/*zip*/archive.zip\",\"causeOfBlockage\":null,\"causes\":[{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.AbstractRunImpl$BlueCauseImpl\",\"shortDescription\":\"Started by user anonymous\",\"userId\":null,\"userName\":\"anonymous\"}],\"description\":null,\"durationInMillis\":35976,\"enQueueTime\":\"2020-04-30T11:38:39.269+0000\",\"endTime\":\"2020-04-30T11:39:15.251+0000\",\"estimatedDurationInMillis\":-1,\"id\":\"1\",\"name\":null,\"organization\":\"jenkins\",\"pipeline\":\"abort\",\"replayable\":true,\"result\":\"ABORTED\",\"runSummary\":\"aborted\",\"startTime\":\"2020-04-30T11:38:39.275+0000\",\"state\":\"FINISHED\",\"type\":\"WorkflowRun\",\"changeSet\":[{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.ChangeSetResource\",\"_links\":{\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/changeSet/null/\"}},\"affectedPaths\":[\"build-info.json\",\"vars/sendDataToElasticsearch.groovy\",\"vars/githubPrComment.txt\",\"vars/notifyBuildResult.txt\",\"vars/getBuildInfoJsonFiles.groovy\",\"vars/README.md\",\"vars/githubPrCheckApproved.groovy\",\"vars/notifyBuildResult.groovy\",\"vars/githubPrComment.groovy\",\"CHANGELOG.md\",\"pipeline-log-summary.txt\",\"resources/groovy-html-custom.template\",\"resources/scripts/generate-build-data.sh\",\"resources/github-comment-markdown.template\",\"job-info.json\",\"pom.xml\",\"local/local.pid\",\"local/local.log\",\"local/configs/jenkins.yaml\",\"steps-errors.json\",\"artifacts-info.json\",\"tests-summary.json\",\"pipeline-log.txt\",\"changeSet-info.json\",\"tests-info.json\",\"steps-info.json\",\"tests-errors.json\",\"build-report.json\",\"src/test/docker/generate-build-data/db.json\",\"src/test/docker/generate-build-data/success.routes\",\"src/test/docker/generate-build-data/success.json\",\"src/test/docker/generate-build-data/README.md\",\"src/test/docker/generate-build-data/all.sh\",\"src/test/resources/tests-errors.json\",\"src/test/groovy/GetGithubTokenStepTests.groovy\",\"src/test/groovy/GetBuildInfoJsonFilesStepTests.groovy\",\"src/test/groovy/GithubPrCommentStepTests.groovy\",\"src/test/groovy/GithubPrCheckApprovedStepTests.groovy\",\"src/test/groovy/EchoColorStepTests.groovy\",\"src/test/groovy/WhireTest.groovy\",\"src/test/groovy/co/elastic/mock/PullRequestMock.groovy\",\"src/test/groovy/co/elastic/TestUtils.groovy\",\"src/test/groovy/ApmBasePipelineTest.groovy\",\"src/test/groovy/NotifyBuildResultStepTests.groovy\",\"src/test/groovy/NotificationManagerStepTests.groovy\",\"src/test/groovy/GitCheckoutStepTests.groovy\",\"src/co/elastic/NotificationManager.groovy\",\"nohup.out\"],\"author\":{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.UserImpl\",\"_links\":{\"favorites\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/users/unknown/favorites/\"},\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/users/unknown/\"}},\"avatar\":null,\"email\":null,\"fullName\":\"unknown\",\"id\":\"unknown\",\"permission\":null},\"checkoutCount\":0,\"commitId\":null,\"issues\":[],\"msg\":\"20 new files, 27 files modified, 1 file deleted\",\"timestamp\":null,\"url\":null}]},\"name\":\"abort\",\"organization\":\"jenkins\",\"parameters\":[],\"permissions\":{\"create\":true,\"configure\":true,\"read\":true,\"start\":true,\"stop\":true},\"weatherScore\":100}",
"headers" : {
"Date" : "Thu, 30 Apr 2020 11:46:20 GMT",
"X-Content-Type-Options" : "nosniff",
"X-Blueocean-Refresher" : "7f9ea7cf",
"Cache-Control" : "no-cache, no-store, no-transform",
"X-Jenkins" : "2.230",
"X-Jenkins-Session" : "7f9ea7cf",
"Content-Type" : "application/json;charset=utf-8",
"Server" : "Jetty(9.4.27.v20200227)"
}
},
"uuid" : "062e59bc-aee5-43a9-b51d-675840836041",
"persistent" : true,
"insertionIndex" : 26
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"id" : "d38e98f8-c876-4623-9320-b4ce5bd28a11",
"name" : "blue_rest_organizations_jenkins_pipelines_it_getbuildinfojsonfiles_abort",
"request" : {
"url" : "/blue/rest/organizations/jenkins/pipelines/it/getBuildInfoJsonFiles/abort//",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "{\"_class\":\"io.jenkins.blueocean.rest.impl.pipeline.PipelineImpl\",\"_links\":{\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/\"},\"scm\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/scm/\"},\"actions\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/actions/\"},\"runs\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/\"},\"trends\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/trends/\"},\"queue\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/queue/\"}},\"actions\":[],\"disabled\":false,\"displayName\":\"abort\",\"estimatedDurationInMillis\":-1,\"fullDisplayName\":\"IT/getBuildInfoJsonFiles/abort\",\"fullName\":\"it/getBuildInfoJsonFiles/abort\",\"latestRun\":{\"_class\":\"io.jenkins.blueocean.rest.impl.pipeline.PipelineImpl$PipelineRunSummary\",\"_links\":{\"parent\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/\"},\"tests\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/tests/\"},\"log\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/log/\"},\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/\"},\"blueTestSummary\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/blueTestSummary/\"},\"actions\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/actions/\"},\"changeSet\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/changeSet/\"},\"artifacts\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/artifacts/\"}},\"actions\":[],\"artifactsZipFile\":\"/job/it/job/getBuildInfoJsonFiles/job/abort/1/artifact/*zip*/archive.zip\",\"causeOfBlockage\":null,\"causes\":[{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.AbstractRunImpl$BlueCauseImpl\",\"shortDescription\":\"Started by user anonymous\",\"userId\":null,\"userName\":\"anonymous\"}],\"description\":null,\"durationInMillis\":35976,\"enQueueTime\":\"2020-04-30T11:38:39.269+0000\",\"endTime\":\"2020-04-30T11:39:15.251+0000\",\"estimatedDurationInMillis\":-1,\"id\":\"1\",\"name\":null,\"organization\":\"jenkins\",\"pipeline\":\"abort\",\"replayable\":true,\"result\":\"ABORTED\",\"runSummary\":\"aborted\",\"startTime\":\"2020-04-30T11:38:39.275+0000\",\"state\":\"FINISHED\",\"type\":\"WorkflowRun\",\"changeSet\":[{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.ChangeSetResource\",\"_links\":{\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/organizations/jenkins/pipelines/it/pipelines/getBuildInfoJsonFiles/pipelines/abort/runs/1/changeSet/null/\"}},\"affectedPaths\":[\"build-info.json\",\"vars/sendDataToElasticsearch.groovy\",\"vars/githubPrComment.txt\",\"vars/notifyBuildResult.txt\",\"vars/getBuildInfoJsonFiles.groovy\",\"vars/README.md\",\"vars/githubPrCheckApproved.groovy\",\"vars/notifyBuildResult.groovy\",\"vars/githubPrComment.groovy\",\"CHANGELOG.md\",\"pipeline-log-summary.txt\",\"resources/groovy-html-custom.template\",\"resources/scripts/generate-build-data.sh\",\"resources/github-comment-markdown.template\",\"job-info.json\",\"pom.xml\",\"local/local.pid\",\"local/local.log\",\"local/configs/jenkins.yaml\",\"steps-errors.json\",\"artifacts-info.json\",\"tests-summary.json\",\"pipeline-log.txt\",\"changeSet-info.json\",\"tests-info.json\",\"steps-info.json\",\"tests-errors.json\",\"build-report.json\",\"src/test/docker/generate-build-data/db.json\",\"src/test/docker/generate-build-data/success.routes\",\"src/test/docker/generate-build-data/success.json\",\"src/test/docker/generate-build-data/README.md\",\"src/test/docker/generate-build-data/all.sh\",\"src/test/resources/tests-errors.json\",\"src/test/groovy/GetGithubTokenStepTests.groovy\",\"src/test/groovy/GetBuildInfoJsonFilesStepTests.groovy\",\"src/test/groovy/GithubPrCommentStepTests.groovy\",\"src/test/groovy/GithubPrCheckApprovedStepTests.groovy\",\"src/test/groovy/EchoColorStepTests.groovy\",\"src/test/groovy/WhireTest.groovy\",\"src/test/groovy/co/elastic/mock/PullRequestMock.groovy\",\"src/test/groovy/co/elastic/TestUtils.groovy\",\"src/test/groovy/ApmBasePipelineTest.groovy\",\"src/test/groovy/NotifyBuildResultStepTests.groovy\",\"src/test/groovy/NotificationManagerStepTests.groovy\",\"src/test/groovy/GitCheckoutStepTests.groovy\",\"src/co/elastic/NotificationManager.groovy\",\"nohup.out\"],\"author\":{\"_class\":\"io.jenkins.blueocean.service.embedded.rest.UserImpl\",\"_links\":{\"favorites\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/users/unknown/favorites/\"},\"self\":{\"_class\":\"io.jenkins.blueocean.rest.hal.Link\",\"href\":\"/blue/rest/users/unknown/\"}},\"avatar\":null,\"email\":null,\"fullName\":\"unknown\",\"id\":\"unknown\",\"permission\":null},\"checkoutCount\":0,\"commitId\":null,\"issues\":[],\"msg\":\"20 new files, 27 files modified, 1 file deleted\",\"timestamp\":null,\"url\":null}]},\"name\":\"abort\",\"organization\":\"jenkins\",\"parameters\":[],\"permissions\":{\"create\":true,\"configure\":true,\"read\":true,\"start\":true,\"stop\":true},\"weatherScore\":100}",
"headers" : {
"Date" : "Thu, 30 Apr 2020 11:46:20 GMT",
"X-Content-Type-Options" : "nosniff",
"X-Blueocean-Refresher" : "7f9ea7cf",
"Cache-Control" : "no-cache, no-store, no-transform",
"X-Jenkins" : "2.230",
"X-Jenkins-Session" : "7f9ea7cf",
"Content-Type" : "application/json;charset=utf-8",
"Server" : "Jetty(9.4.27.v20200227)"
}
},
"uuid" : "d38e98f8-c876-4623-9320-b4ce5bd28a11",
"persistent" : true,
"insertionIndex" : 25
}
Loading