diff --git a/.ci/Jenkinsfile_coverage b/.ci/Jenkinsfile_coverage index d9ec1861c9979..01c18b10d0804 100644 --- a/.ci/Jenkinsfile_coverage +++ b/.ci/Jenkinsfile_coverage @@ -16,14 +16,14 @@ stage("Kibana Pipeline") { // This stage is just here to help the BlueOcean UI a withEnv([ 'NODE_ENV=test' // Needed for jest tests only ]) { - kibanaPipeline.legacyJobRunner('kibana-intake')() + kibanaPipeline.intakeWorker('kibana-intake', './test/scripts/jenkins_unit.sh')() } }, 'x-pack-intake-agent': { withEnv([ 'NODE_ENV=test' // Needed for jest tests only ]) { - kibanaPipeline.legacyJobRunner('x-pack-intake')() + kibanaPipeline.intakeWorker('x-pack-intake', './test/scripts/jenkins_xpack.sh')() } }, 'kibana-oss-agent': kibanaPipeline.withWorkers('kibana-oss-tests', { kibanaPipeline.buildOss() }, [ diff --git a/.ci/es-snapshots/Jenkinsfile_verify_es b/.ci/es-snapshots/Jenkinsfile_verify_es index 3d5ec75fa0e72..30d52a56547bd 100644 --- a/.ci/es-snapshots/Jenkinsfile_verify_es +++ b/.ci/es-snapshots/Jenkinsfile_verify_es @@ -26,8 +26,8 @@ timeout(time: 120, unit: 'MINUTES') { withEnv(["ES_SNAPSHOT_MANIFEST=${SNAPSHOT_MANIFEST}"]) { parallel([ // TODO we just need to run integration tests from intake? - 'kibana-intake-agent': kibanaPipeline.legacyJobRunner('kibana-intake'), - 'x-pack-intake-agent': kibanaPipeline.legacyJobRunner('x-pack-intake'), + 'kibana-intake-agent': kibanaPipeline.intakeWorker('kibana-intake', './test/scripts/jenkins_unit.sh'), + 'x-pack-intake-agent': kibanaPipeline.intakeWorker('x-pack-intake', './test/scripts/jenkins_xpack.sh'), 'kibana-oss-agent': kibanaPipeline.withWorkers('kibana-oss-tests', { kibanaPipeline.buildOss() }, [ 'oss-ciGroup1': kibanaPipeline.getOssCiGroupWorker(1), 'oss-ciGroup2': kibanaPipeline.getOssCiGroupWorker(2), diff --git a/.ci/jobs.yml b/.ci/jobs.yml index a2d8100f78efd..3add92aadd256 100644 --- a/.ci/jobs.yml +++ b/.ci/jobs.yml @@ -1,3 +1,5 @@ +# This file is needed by functionalTests:ensureAllTestsInCiGroup for the list of ciGroups. That must be changed before this file can be removed + JOB: - kibana-intake - x-pack-intake diff --git a/.ci/run.sh b/.ci/run.sh deleted file mode 100755 index 9f77438be62d0..0000000000000 --- a/.ci/run.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -set -e - -# move to Kibana root -cd "$(dirname "$0")/.." - -source src/dev/ci_setup/load_env_keys.sh -source src/dev/ci_setup/extract_bootstrap_cache.sh -source src/dev/ci_setup/setup.sh -source src/dev/ci_setup/checkout_sibling_es.sh - -case "$JOB" in -kibana-intake) - ./test/scripts/jenkins_unit.sh - ;; -kibana-ciGroup*) - export CI_GROUP="${JOB##kibana-ciGroup}" - ./test/scripts/jenkins_ci_group.sh - ;; -kibana-visualRegression*) - ./test/scripts/jenkins_visual_regression.sh - ;; -kibana-accessibility*) - ./test/scripts/jenkins_accessibility.sh - ;; -kibana-firefoxSmoke*) - ./test/scripts/jenkins_firefox_smoke.sh - ;; -x-pack-intake) - ./test/scripts/jenkins_xpack.sh - ;; -x-pack-ciGroup*) - export CI_GROUP="${JOB##x-pack-ciGroup}" - ./test/scripts/jenkins_xpack_ci_group.sh - ;; -x-pack-visualRegression*) - ./test/scripts/jenkins_xpack_visual_regression.sh - ;; -x-pack-accessibility*) - ./test/scripts/jenkins_xpack_accessibility.sh - ;; -x-pack-firefoxSmoke*) - ./test/scripts/jenkins_xpack_firefox_smoke.sh - ;; -*) - echo "JOB '$JOB' is not implemented." - exit 1 - ;; -esac diff --git a/Jenkinsfile b/Jenkinsfile index 4695004cd010a..4e6f3141a12e7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,8 +11,8 @@ stage("Kibana Pipeline") { // This stage is just here to help the BlueOcean UI a catchError { retryable.enable() parallel([ - 'kibana-intake-agent': kibanaPipeline.legacyJobRunner('kibana-intake'), - 'x-pack-intake-agent': kibanaPipeline.legacyJobRunner('x-pack-intake'), + 'kibana-intake-agent': kibanaPipeline.intakeWorker('kibana-intake', './test/scripts/jenkins_unit.sh'), + 'x-pack-intake-agent': kibanaPipeline.intakeWorker('x-pack-intake', './test/scripts/jenkins_xpack.sh'), 'kibana-oss-agent': kibanaPipeline.withWorkers('kibana-oss-tests', { kibanaPipeline.buildOss() }, [ 'oss-firefoxSmoke': kibanaPipeline.getPostBuildWorker('firefoxSmoke', { retryable('kibana-firefoxSmoke') { diff --git a/test/scripts/jenkins_accessibility.sh b/test/scripts/jenkins_accessibility.sh index 0b3d8dc3f85c2..c122d71b58edb 100755 --- a/test/scripts/jenkins_accessibility.sh +++ b/test/scripts/jenkins_accessibility.sh @@ -1,23 +1,6 @@ #!/usr/bin/env bash -set -e - -if [[ -n "$IS_PIPELINE_JOB" ]] ; then - source src/dev/ci_setup/setup_env.sh -fi - -export TEST_BROWSER_HEADLESS=1 - -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - yarn run grunt functionalTests:ensureAllTestsInCiGroup; - node scripts/build --debug --oss; -else - installDir="$(realpath $PARENT_DIR/kibana/build/oss/kibana-*-SNAPSHOT-linux-x86_64)" - destDir=${installDir}-${CI_WORKER_NUMBER} - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi +source test/scripts/jenkins_test_setup_oss.sh checks-reporter-with-killswitch "Kibana accessibility tests" \ node scripts/functional_tests \ diff --git a/test/scripts/jenkins_ci_group.sh b/test/scripts/jenkins_ci_group.sh index fccdb29ff512b..bef6b518b1999 100755 --- a/test/scripts/jenkins_ci_group.sh +++ b/test/scripts/jenkins_ci_group.sh @@ -1,19 +1,8 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$CODE_COVERAGE" ]] ; then - if [[ -z "$IS_PIPELINE_JOB" ]] ; then - yarn run grunt functionalTests:ensureAllTestsInCiGroup; - node scripts/build --debug --oss; - else - installDir="$(realpath $PARENT_DIR/kibana/build/oss/kibana-*-SNAPSHOT-linux-x86_64)" - destDir=${installDir}-${CI_WORKER_NUMBER} - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" - fi +source test/scripts/jenkins_test_setup_oss.sh +if [[ -z "$CODE_COVERAGE" ]]; then checks-reporter-with-killswitch "Functional tests / Group ${CI_GROUP}" yarn run grunt "run:functionalTests_ciGroup${CI_GROUP}"; if [ "$CI_GROUP" == "1" ]; then @@ -24,8 +13,6 @@ if [[ -z "$CODE_COVERAGE" ]] ; then fi else echo " -> Running Functional tests with code coverage" - export NODE_OPTIONS=--max_old_space_size=8192 - yarn run grunt "run:functionalTests_ciGroup${CI_GROUP}"; fi diff --git a/test/scripts/jenkins_firefox_smoke.sh b/test/scripts/jenkins_firefox_smoke.sh index 9a31f5f43d224..0129d4f1bce9f 100755 --- a/test/scripts/jenkins_firefox_smoke.sh +++ b/test/scripts/jenkins_firefox_smoke.sh @@ -1,22 +1,6 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - node scripts/build --debug --oss; - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-oss-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 -else - installDir="$(realpath $PARENT_DIR/kibana/build/oss/kibana-*-SNAPSHOT-linux-x86_64)" - destDir=${installDir}-${CI_WORKER_NUMBER} - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi - -export TEST_BROWSER_HEADLESS=1 +source test/scripts/jenkins_test_setup_oss.sh checks-reporter-with-killswitch "Firefox smoke test" \ node scripts/functional_tests \ diff --git a/test/scripts/jenkins_test_setup.sh b/test/scripts/jenkins_test_setup.sh index e2dd0bc276bb6..49ee8a6b526ca 100644 --- a/test/scripts/jenkins_test_setup.sh +++ b/test/scripts/jenkins_test_setup.sh @@ -1,11 +1,9 @@ +#!/usr/bin/env bash + set -e function post_work() { set +e - if [[ -z "$IS_PIPELINE_JOB" ]] ; then - node "$KIBANA_DIR/scripts/report_failed_tests" - fi - if [[ -z "$REMOVE_KIBANA_INSTALL_DIR" && -z "$KIBANA_INSTALL_DIR" && -d "$KIBANA_INSTALL_DIR" ]]; then rm -rf "$REMOVE_KIBANA_INSTALL_DIR" fi @@ -15,6 +13,4 @@ trap 'post_work' EXIT export TEST_BROWSER_HEADLESS=1 -if [[ -n "$IS_PIPELINE_JOB" ]] ; then - source src/dev/ci_setup/setup_env.sh -fi +source src/dev/ci_setup/setup_env.sh diff --git a/test/scripts/jenkins_test_setup_oss.sh b/test/scripts/jenkins_test_setup_oss.sh new file mode 100644 index 0000000000000..9e68272053221 --- /dev/null +++ b/test/scripts/jenkins_test_setup_oss.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +source test/scripts/jenkins_test_setup.sh + +if [[ -z "$CODE_COVERAGE" ]] ; then + installDir="$(realpath $PARENT_DIR/kibana/build/oss/kibana-*-SNAPSHOT-linux-x86_64)" + destDir=${installDir}-${CI_WORKER_NUMBER} + cp -R "$installDir" "$destDir" + + export KIBANA_INSTALL_DIR="$destDir" +fi diff --git a/test/scripts/jenkins_test_setup_xpack.sh b/test/scripts/jenkins_test_setup_xpack.sh new file mode 100644 index 0000000000000..76fc7cfe6c876 --- /dev/null +++ b/test/scripts/jenkins_test_setup_xpack.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +source test/scripts/jenkins_test_setup.sh + +if [[ -z "$CODE_COVERAGE" ]]; then + installDir="$PARENT_DIR/install/kibana" + destDir="${installDir}-${CI_WORKER_NUMBER}" + cp -R "$installDir" "$destDir" + + export KIBANA_INSTALL_DIR="$destDir" + + cd "$XPACK_DIR" +fi diff --git a/test/scripts/jenkins_unit.sh b/test/scripts/jenkins_unit.sh index a8b5e8e4fdf97..fe67594ad8ac2 100755 --- a/test/scripts/jenkins_unit.sh +++ b/test/scripts/jenkins_unit.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash -set -e - -export TEST_BROWSER_HEADLESS=1 +source test/scripts/jenkins_test_setup.sh if [[ -z "$CODE_COVERAGE" ]] ; then "$(FORCE_COLOR=0 yarn bin)/grunt" jenkins:unit --dev; diff --git a/test/scripts/jenkins_visual_regression.sh b/test/scripts/jenkins_visual_regression.sh index 9ca1c0f08d2c9..dda966dea98d0 100755 --- a/test/scripts/jenkins_visual_regression.sh +++ b/test/scripts/jenkins_visual_regression.sh @@ -1,22 +1,8 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh +source test/scripts/jenkins_test_setup_xpack.sh source "$KIBANA_DIR/src/dev/ci_setup/setup_percy.sh" -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - node scripts/build --debug --oss; - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-oss-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 -else - installDir="$(realpath $PARENT_DIR/kibana/build/oss/kibana-*-SNAPSHOT-linux-x86_64)" - destDir=${installDir}-${CI_WORKER_NUMBER} - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi - checks-reporter-with-killswitch "Kibana visual regression tests" \ yarn run percy exec -t 500 \ node scripts/functional_tests \ diff --git a/test/scripts/jenkins_xpack.sh b/test/scripts/jenkins_xpack.sh index e0055085d9b37..e076bd43e1c6e 100755 --- a/test/scripts/jenkins_xpack.sh +++ b/test/scripts/jenkins_xpack.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash -set -e - -export TEST_BROWSER_HEADLESS=1 +source test/scripts/jenkins_test_setup.sh if [[ -z "$CODE_COVERAGE" ]] ; then echo " -> Running mocha tests" @@ -10,26 +8,26 @@ if [[ -z "$CODE_COVERAGE" ]] ; then checks-reporter-with-killswitch "X-Pack Karma Tests" yarn test:browser echo "" echo "" - + echo " -> Running jest tests" cd "$XPACK_DIR" checks-reporter-with-killswitch "X-Pack Jest" node scripts/jest --ci --verbose echo "" echo "" - + echo " -> Running SIEM cyclic dependency test" cd "$XPACK_DIR" checks-reporter-with-killswitch "X-Pack SIEM cyclic dependency test" node legacy/plugins/siem/scripts/check_circular_deps echo "" echo "" - + # FAILING: https://github.com/elastic/kibana/issues/44250 # echo " -> Running jest contracts tests" # cd "$XPACK_DIR" # SLAPSHOT_ONLINE=true CONTRACT_ONLINE=true node scripts/jest_contract.js --ci --verbose # echo "" # echo "" - + # echo " -> Running jest integration tests" # cd "$XPACK_DIR" # node scripts/jest_integration --ci --verbose @@ -48,4 +46,4 @@ else ../target/kibana-coverage/jest/xpack-coverage-final.json echo "" echo "" -fi \ No newline at end of file +fi diff --git a/test/scripts/jenkins_xpack_accessibility.sh b/test/scripts/jenkins_xpack_accessibility.sh index af813c3c40f84..a3c03dd780886 100755 --- a/test/scripts/jenkins_xpack_accessibility.sh +++ b/test/scripts/jenkins_xpack_accessibility.sh @@ -1,32 +1,6 @@ #!/usr/bin/env bash -set -e - -if [[ -n "$IS_PIPELINE_JOB" ]] ; then - source src/dev/ci_setup/setup_env.sh -fi - -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - echo " -> building and extracting default Kibana distributable for use in functional tests" - node scripts/build --debug --no-oss - - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - - export KIBANA_INSTALL_DIR="$installDir" -else - installDir="$PARENT_DIR/install/kibana" - destDir="${installDir}-${CI_WORKER_NUMBER}" - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi - -export TEST_BROWSER_HEADLESS=1 -cd "$XPACK_DIR" +source test/scripts/jenkins_test_setup_xpack.sh checks-reporter-with-killswitch "X-Pack accessibility tests" \ node scripts/functional_tests \ diff --git a/test/scripts/jenkins_xpack_ci_group.sh b/test/scripts/jenkins_xpack_ci_group.sh index 58c407a848ae3..b599dc73005ec 100755 --- a/test/scripts/jenkins_xpack_ci_group.sh +++ b/test/scripts/jenkins_xpack_ci_group.sh @@ -1,47 +1,9 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$CODE_COVERAGE" ]] ; then - if [[ -z "$IS_PIPELINE_JOB" ]] ; then - echo " -> Ensuring all functional tests are in a ciGroup" - cd "$XPACK_DIR" - node scripts/functional_tests --assert-none-excluded \ - --include-tag ciGroup1 \ - --include-tag ciGroup2 \ - --include-tag ciGroup3 \ - --include-tag ciGroup4 \ - --include-tag ciGroup5 \ - --include-tag ciGroup6 \ - --include-tag ciGroup7 \ - --include-tag ciGroup8 \ - --include-tag ciGroup9 \ - --include-tag ciGroup10 - fi - - cd "$KIBANA_DIR" - - if [[ -z "$IS_PIPELINE_JOB" ]] ; then - echo " -> building and extracting default Kibana distributable for use in functional tests" - node scripts/build --debug --no-oss - - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - - export KIBANA_INSTALL_DIR="$installDir" - else - installDir="$PARENT_DIR/install/kibana" - destDir="${installDir}-${CI_WORKER_NUMBER}" - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" - fi +source test/scripts/jenkins_test_setup_xpack.sh +if [[ -z "$CODE_COVERAGE" ]]; then echo " -> Running functional and api tests" - cd "$XPACK_DIR" checks-reporter-with-killswitch "X-Pack Chrome Functional tests / Group ${CI_GROUP}" \ node scripts/functional_tests \ @@ -53,9 +15,6 @@ if [[ -z "$CODE_COVERAGE" ]] ; then echo "" else echo " -> Running X-Pack functional tests with code coverage" - cd "$XPACK_DIR" - export NODE_OPTIONS=--max_old_space_size=8192 - node scripts/functional_tests --debug --include-tag "ciGroup$CI_GROUP" fi diff --git a/test/scripts/jenkins_xpack_firefox_smoke.sh b/test/scripts/jenkins_xpack_firefox_smoke.sh index 43220459bcb97..5fe8b41cc0010 100755 --- a/test/scripts/jenkins_xpack_firefox_smoke.sh +++ b/test/scripts/jenkins_xpack_firefox_smoke.sh @@ -1,23 +1,6 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh - -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - node scripts/build --debug --no-oss; - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - export KIBANA_INSTALL_DIR="$installDir" -else - installDir="$PARENT_DIR/install/kibana" - destDir="${installDir}-${CI_WORKER_NUMBER}" - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi - -cd "$XPACK_DIR" +source test/scripts/jenkins_test_setup_xpack.sh checks-reporter-with-killswitch "X-Pack firefox smoke test" \ node scripts/functional_tests \ diff --git a/test/scripts/jenkins_xpack_visual_regression.sh b/test/scripts/jenkins_xpack_visual_regression.sh index 5699f9e5ee7c1..6e3d4dd7c249b 100755 --- a/test/scripts/jenkins_xpack_visual_regression.sh +++ b/test/scripts/jenkins_xpack_visual_regression.sh @@ -1,25 +1,8 @@ #!/usr/bin/env bash -source test/scripts/jenkins_test_setup.sh +source test/scripts/jenkins_test_setup_xpack.sh source "$KIBANA_DIR/src/dev/ci_setup/setup_percy.sh" -if [[ -z "$IS_PIPELINE_JOB" ]] ; then - node scripts/build --debug --no-oss; - linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')" - installDir="$PARENT_DIR/install/kibana" - mkdir -p "$installDir" - tar -xzf "$linuxBuild" -C "$installDir" --strip=1 - export KIBANA_INSTALL_DIR="$installDir" -else - installDir="$PARENT_DIR/install/kibana" - destDir="${installDir}-${CI_WORKER_NUMBER}" - cp -R "$installDir" "$destDir" - - export KIBANA_INSTALL_DIR="$destDir" -fi - -cd "$XPACK_DIR" - checks-reporter-with-killswitch "X-Pack visual regression tests" \ yarn run percy exec -t 500 \ node scripts/functional_tests \ diff --git a/vars/kibanaPipeline.groovy b/vars/kibanaPipeline.groovy index 346bcf77b96b1..dd66586e912d6 100644 --- a/vars/kibanaPipeline.groovy +++ b/vars/kibanaPipeline.groovy @@ -2,7 +2,7 @@ def withWorkers(machineName, preWorkerClosure = {}, workerClosures = [:]) { return { jobRunner('tests-xl', true) { withGcsArtifactUpload(machineName, { - try { + withPostBuildReporting { doSetup() preWorkerClosure() @@ -26,24 +26,53 @@ def withWorkers(machineName, preWorkerClosure = {}, workerClosures = [:]) { } parallel(workers) - } finally { - catchError { - runErrorReporter() - } - - catchError { - runbld.junit() - } - - catchError { - publishJunit() - } } }) } } } +def withWorker(machineName, label, Closure closure) { + return { + jobRunner(label, false) { + withGcsArtifactUpload(machineName) { + withPostBuildReporting { + doSetup() + closure() + } + } + } + } +} + +def intakeWorker(jobName, String script) { + return withWorker(jobName, 'linux && immutable') { + withEnv([ + "JOB=${jobName}", + ]) { + runbld(script, "Execute ${jobName}") + } + } +} + +def withPostBuildReporting(Closure closure) { + try { + closure() + } finally { + catchError { + runErrorReporter() + } + + catchError { + runbld.junit() + } + + catchError { + publishJunit() + } + } +} + def getPostBuildWorker(name, closure) { return { workerNumber -> def kibanaPort = "61${workerNumber}1" @@ -90,34 +119,6 @@ def getXpackCiGroupWorker(ciGroup) { }) } -def legacyJobRunner(name) { - return { - parallel([ - "${name}": { - withEnv([ - "JOB=${name}", - ]) { - jobRunner('linux && immutable', false) { - withGcsArtifactUpload(name, { - try { - runbld('.ci/run.sh', "Execute ${name}", true) - } finally { - catchError { - runErrorReporter() - } - - catchError { - publishJunit() - } - } - }) - } - } - } - ]) - } -} - def jobRunner(label, useRamDisk, closure) { node(label) { agentInfo.print() @@ -168,8 +169,6 @@ def jobRunner(label, useRamDisk, closure) { } } -// TODO what should happen if GCS, Junit, or email publishing fails? Unstable build? Failed build? - def uploadGcsArtifact(uploadPrefix, pattern) { googleStorageUpload( credentialsId: 'kibana-ci-gcs-plugin',