mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-30 21:30:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			205 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Copyright 2016 The Kubernetes Authors.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| # Make bucket and a folder for e2e-node test logs.
 | |
| # Populate the folder from the logs stored in /tmp/_artifacts/ in the same way as a
 | |
| # jenkins build would, and then print the URL to view the test results on Gubernator
 | |
| 
 | |
| set -o errexit
 | |
| set -o nounset
 | |
| set -o pipefail
 | |
| 
 | |
| source cluster/lib/logging.sh
 | |
| 
 | |
| 
 | |
| if [[ $# -eq 0 || ! $1 =~ ^[Yy]$ ]]; then
 | |
|   read -p "Do you want to run gubernator.sh and upload logs publicly to GCS? [y/n]" yn
 | |
|   echo
 | |
|   if [[ ! $yn =~ ^[Yy]$ ]]; then
 | |
|       exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # Check that user has gsutil
 | |
| if [[ $(which gsutil) == "" ]]; then
 | |
|   echo "Could not find gsutil when running \`which gsutil\`"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Check that user has gcloud
 | |
| if [[ $(which gcloud) == "" ]]; then
 | |
|   echo "Could not find gcloud when running: \`which gcloud\`"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Check that user has Credentialed Active account
 | |
| if ! gcloud auth list | grep -q "ACTIVE"; then
 | |
|   echo "Could not find active account when running: \`gcloud auth list\`"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| readonly gcs_acl="public-read"
 | |
| bucket_name="${USER}-g8r-logs"
 | |
| echo ""
 | |
| V=2 kube::log::status "Using bucket ${bucket_name}"
 | |
| 
 | |
| # Check if the bucket exists
 | |
| if ! gsutil ls gs:// | grep -q "gs://${bucket_name}/"; then
 | |
|   V=2 kube::log::status "Creating public bucket ${bucket_name}"
 | |
|   gsutil mb gs://${bucket_name}/
 | |
|   # Make all files in the bucket publicly readable
 | |
|   gsutil acl ch -u AllUsers:R gs://${bucket_name}
 | |
| else
 | |
|   V=2 kube::log::status "Bucket already exists"
 | |
| fi
 | |
| 
 | |
| # Path for e2e-node test results
 | |
| GCS_JOBS_PATH="gs://${bucket_name}/logs/e2e-node"
 | |
| 
 | |
| ARTIFACTS=${ARTIFACTS:-"/tmp/_artifacts"}
 | |
| BUILD_LOG_PATH="${ARTIFACTS}/build-log.txt"
 | |
| 
 | |
| if [[ ! -e $BUILD_LOG_PATH ]]; then
 | |
|   echo "Could not find build-log.txt at ${BUILD_LOG_PATH}"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # Get start and end timestamps based on build-log.txt file contents
 | |
| # Line where the actual tests start
 | |
| start_line=$(grep -n -m 1 "^=" ${BUILD_LOG_PATH} | sed 's/\([0-9]*\).*/\1/')
 | |
| # Create text file starting where the tests start
 | |
| after_start=$(tail -n +${start_line} ${BUILD_LOG_PATH})
 | |
| echo "${after_start}" >> build-log-cut.txt
 | |
| # Match the first timestamp
 | |
| start_time_raw=$(grep -m 1 -o '[0-9][0-9][0-9][0-9][[:blank:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9]*' build-log-cut.txt)
 | |
| rm build-log-cut.txt
 | |
| # Make the date readable by date command (ex: 0101 00:00:00.000 -> 01/01 00:00:00.000)
 | |
| start_time=$(echo ${start_time_raw} | sed 's/^.\{2\}/&\//')
 | |
| V=2 kube::log::status "Started at ${start_time}"
 | |
| # Match the last timestamp in the build-log file
 | |
| end_time=$(grep -o '[0-9][0-9][0-9][0-9][[:blank:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9]*' ${BUILD_LOG_PATH} | tail -1 | sed 's/^.\{2\}/&\//')
 | |
| # Convert to epoch time for Gubernator
 | |
| start_time_epoch=$(date -d "${start_time}" +%s)
 | |
| end_time_epoch=$(date -d "${end_time}" +%s)
 | |
| 
 | |
| # Make folder name for build from timestamp
 | |
| BUILD_STAMP=$(echo $start_time | sed 's/\///' | sed 's/ /_/')
 | |
| 
 | |
| GCS_LOGS_PATH="${GCS_JOBS_PATH}/${BUILD_STAMP}"
 | |
| 
 | |
| # Check if folder for same logs already exists
 | |
| if gsutil ls "${GCS_JOBS_PATH}" | grep -q "${BUILD_STAMP}"; then
 | |
|   V=2 kube::log::status "Log files already uploaded"
 | |
|   echo "Gubernator linked below:"
 | |
|   echo "k8s-gubernator.appspot.com/build/${GCS_LOGS_PATH}?local=on"
 | |
|   exit
 | |
| fi
 | |
| 
 | |
| for result in $(find ${ARTIFACTS} -type d -name "results"); do
 | |
|   if [[ $result != "" && $result != "${ARTIFACTS}/results" && $result != $ARTIFACTS ]]; then
 | |
|     mv $result/* $ARTIFACTS
 | |
|   fi
 | |
| done
 | |
| 
 | |
| # Upload log files
 | |
| for upload_attempt in $(seq 3); do
 | |
|   if [[ -d "${ARTIFACTS}" && -n $(ls -A "${ARTIFACTS}") ]]; then
 | |
|     V=2 kube::log::status "Uploading artifacts"
 | |
|     gsutil -m -q -o "GSUtil:use_magicfile=True" cp -a "${gcs_acl}" -r -c \
 | |
|       -z log,xml,xml "${ARTIFACTS}" "${GCS_LOGS_PATH}/artifacts" || continue
 | |
|   fi
 | |
|   break
 | |
| done
 | |
| for upload_attempt in $(seq 3); do
 | |
|   if [[ -e "${BUILD_LOG_PATH}" ]]; then
 | |
|     V=2 kube::log::status "Uploading build log"
 | |
|     gsutil -q cp -Z -a "${gcs_acl}" "${BUILD_LOG_PATH}" "${GCS_LOGS_PATH}" || continue
 | |
|   fi
 | |
|   break
 | |
| done
 | |
| 
 | |
| 
 | |
| # Find the k8s version for started.json
 | |
| version=""
 | |
| if [[ -e "version" ]]; then
 | |
|   version=$(cat "version")
 | |
| elif [[ -e "hack/lib/version.sh" ]]; then
 | |
|   export KUBE_ROOT="."
 | |
|   source "hack/lib/version.sh"
 | |
|   kube::version::get_version_vars
 | |
|   version="${KUBE_GIT_VERSION-}"
 | |
| fi
 | |
| if [[ -n "${version}" ]]; then
 | |
|   V=2 kube::log::status "Found Kubernetes version: ${version}"
 | |
| else
 | |
|   V=2 kube::log::status "Could not find Kubernetes version"
 | |
| fi
 | |
| 
 | |
| #Find build result from build-log.txt
 | |
| if grep -Fxq "Test Suite Passed" "${BUILD_LOG_PATH}"
 | |
|   then
 | |
|     build_result="SUCCESS"
 | |
| else
 | |
|     build_result="FAILURE"
 | |
| fi
 | |
| 
 | |
| V=4 kube::log::status "Build result is ${build_result}"
 | |
| 
 | |
| if [[ -e "${ARTIFACTS}/started.json" ]]; then
 | |
|   rm "${ARTIFACTS}/started.json"
 | |
| fi
 | |
| 
 | |
| if [[ -e "${ARTIFACTS}/finished.json" ]]; then
 | |
|   rm "${ARTIFACTS}/finished.json"
 | |
| fi
 | |
| 
 | |
| V=2 kube::log::status "Constructing started.json and finished.json files"
 | |
| echo "{" >> "${ARTIFACTS}/started.json"
 | |
| echo "    \"version\": \"${version}\"," >> "${ARTIFACTS}/started.json"
 | |
| echo "    \"timestamp\": ${start_time_epoch}," >> "${ARTIFACTS}/started.json"
 | |
| echo "    \"jenkins-node\": \"${NODE_NAME:-}\"" >> "${ARTIFACTS}/started.json"
 | |
| echo "}" >> "${ARTIFACTS}/started.json"
 | |
| 
 | |
| echo "{" >> "${ARTIFACTS}/finished.json"
 | |
| echo "    \"result\": \"${build_result}\"," >> "${ARTIFACTS}/finished.json"
 | |
| echo "    \"timestamp\": ${end_time_epoch}" >> "${ARTIFACTS}/finished.json"
 | |
| echo "}" >> "${ARTIFACTS}/finished.json"
 | |
| 
 | |
| 
 | |
| # Upload started.json
 | |
| V=2 kube::log::status "Uploading started.json and finished.json"
 | |
| V=2 kube::log::status "Run started at ${start_time}"
 | |
| json_file="${GCS_LOGS_PATH}/started.json"
 | |
| 
 | |
| for upload_attempt in $(seq 3); do
 | |
|   V=2 kube::log::status "Uploading started.json to ${json_file} (attempt ${upload_attempt})"
 | |
|   gsutil -q -h "Content-Type:application/json" cp -a "${gcs_acl}" "${ARTIFACTS}/started.json" \
 | |
|     "${json_file}" || continue
 | |
|   break
 | |
| done
 | |
| 
 | |
| # Upload finished.json
 | |
| for upload_attempt in $(seq 3); do
 | |
|   V=2 kube::log::status "Uploading finished.json to ${GCS_LOGS_PATH} (attempt ${upload_attempt})"
 | |
|   gsutil -q -h "Content-Type:application/json" cp -a "${gcs_acl}" "${ARTIFACTS}/finished.json" \
 | |
|     "${GCS_LOGS_PATH}/finished.json" || continue
 | |
|   break
 | |
| done
 | |
| 
 | |
| 
 | |
| echo "Gubernator linked below:"
 | |
| echo "k8s-gubernator.appspot.com/build/${bucket_name}/logs/e2e-node/${BUILD_STAMP}"
 |