dashboard/cypress/jenkins/init.sh

276 lines
12 KiB
Bash
Executable File

#!/bin/bash
set -x
set -e
if cat /etc/os-release | grep -iq "Alpine Linux"; then
apk update && apk add --no-cache gcompat g++ make
fi
OS="$(uname -s)"
case "${OS}" in
Linux*) MACHINE=amd64;;
Darwin*) MACHINE=darwin-amd64;;
esac
case "${MACHINE}" in
amd64*) GOLANG_PGK_SUFFIX=linux-amd64 ;;
darwin-amd64*) GOLANG_PGK_SUFFIX=darwin-amd64 ;;
esac
GO_DL_URL="https://go.dev/dl"
GO_DL_VERSION="${GO_DL_VERSION:-1.20.5}"
GO_PKG_FILENAME="go${GO_DL_VERSION}.${GOLANG_PGK_SUFFIX}.tar.gz"
GO_DL_PACKAGE="${GO_DL_URL}/${GO_PKG_FILENAME}"
CORRAL_PATH="${WORKSPACE}/bin"
CORRAL="${CORRAL_PATH}/corral"
CORRAL_VERSION="${CORRAL_VERSION:-1.1.1}"
CORRAL_DOWNLOAD_URL="https://github.com/rancherlabs/corral/releases/download/"
CORRAL_DOWNLOAD_BIN="${CORRAL_DOWNLOAD_URL}v${CORRAL_VERSION}/corral-${CORRAL_VERSION}-${MACHINE}"
PATH="${CORRAL_PATH}:${PATH}"
CORRAL_PACKAGES_REPO="${CORRAL_PACKAGES_REPO:-rancherlabs/corral-packages.git}"
CORRAL_PACKAGES_BRANCH="${CORRAL_PACKAGES_BRANCH:-main}"
DASHBOARD_REPO="${DASHBOARD_REPO:-rancher/dashboard.git}"
DASHBOARD_BRANCH="${DASHBOARD_BRANCH:-master}"
GITHUB_URL="https://github.com/"
RANCHER_TYPE="${RANCHER_TYPE:-local}"
RANCHER_HELM_REPO="${RANCHER_HELM_REPO:-latest}"
HELM_VERSION="${HELM_VERSION:-3.13.2}"
NODEJS_VERSION="${NODEJS_VERSION:-14.19.1}"
CYPRESS_VERSION="${CYPRESS_VERSION:-13.2.0}"
YARN_VERSION="${YARN_VERSION:-1.22.19}"
KUBECTL_VERSION="${KUBECTL_VERSION:-v1.29.8}"
YQ_BIN="mikefarah/yq/releases/latest/download/yq_linux_amd64"
mkdir -p "${WORKSPACE}/bin"
wget "${GITHUB_URL}${YQ_BIN}" -O "${WORKSPACE}/bin/yq"
chmod +x "${WORKSPACE}/bin/yq"
if [ -f "${CORRAL}" ]; then rm "${CORRAL}"; fi
curl -L -o "${CORRAL}" "${CORRAL_DOWNLOAD_BIN}"
chmod +x "${CORRAL}"
curl -L -o "${GO_PKG_FILENAME}" "${GO_DL_PACKAGE}"
tar -C "${WORKSPACE}" -xzf "${GO_PKG_FILENAME}"
curl -sSL https://raw.githubusercontent.com/parleer/semver-bash/latest/semver -o semver
chmod +x semver
mv semver "${WORKSPACE}/bin"
ls -al "${WORKSPACE}"
export PATH=$PATH:"${WORKSPACE}/go/bin:${WORKSPACE}/bin"
export GOROOT="${WORKSPACE}/go"
echo "${PATH}"
ls -al "${WORKSPACE}/go"
go version
if [[ ! -d "${WORKSPACE}/.ssh" ]]; then mkdir -p "${WORKSPACE}/.ssh"; fi
export PRIV_KEY="${WORKSPACE}/.ssh/jenkins_ecdsa"
if [ -f "${PRIV_KEY}" ]; then rm "${PRIV_KEY}"; fi
ssh-keygen -t ecdsa -b 521 -N "" -f "${PRIV_KEY}"
ls -al "${WORKSPACE}/.ssh/"
corral config --public_key "${PRIV_KEY}.pub" --user_id jenkins
corral config vars set corral_user_public_key "$(cat ${PRIV_KEY}.pub)"
corral config vars set corral_user_id jenkins
corral config vars set aws_ssh_user "${AWS_SSH_USER}"
corral config vars set aws_access_key "${AWS_ACCESS_KEY_ID}"
corral config vars set aws_secret_key "${AWS_SECRET_ACCESS_KEY}"
corral config vars set aws_ami "${AWS_AMI}"
corral config vars set aws_region "${AWS_REGION}"
corral config vars set aws_security_group "${AWS_SECURITY_GROUP}"
corral config vars set aws_subnet "${AWS_SUBNET}"
corral config vars set aws_vpc "${AWS_VPC}"
corral config vars set aws_volume_size "${AWS_VOLUME_SIZE}"
corral config vars set aws_volume_type "${AWS_VOLUME_TYPE}"
corral config vars set volume_type "${AWS_VOLUME_TYPE}"
corral config vars set volume_iops "${AWS_VOLUME_IOPS}"
corral config vars set azure_subscription_id "${AZURE_AKS_SUBSCRIPTION_ID}"
corral config vars set azure_client_id "${AZURE_CLIENT_ID}"
corral config vars set azure_client_secret "${AZURE_CLIENT_SECRET}"
corral config vars set create_initial_clusters "${CREATE_INITIAL_CLUSTERS}"
corral config vars set gke_service_account "${GKE_SERVICE_ACCOUNT}"
corral config vars set percy_token "${PERCY_TOKEN}"
create_initial_clusters() {
shopt -u nocasematch
if [[ -n "${RANCHER_IMAGE_TAG}" ]]; then
TARFILE="helm-v${HELM_VERSION}-linux-amd64.tar.gz"
curl -L -o "${TARFILE}" "https://get.helm.sh/${TARFILE}"
tar -C "${WORKSPACE}/bin" --strip-components=1 -xzf "${TARFILE}"
if [[ -n "${RANCHER_HELM_REPO}" ]]; then
if [[ "${RANCHER_HELM_REPO}" == "prime" ]]; then
RANCHER_CHART_URL=https://charts.rancher.com/server-charts/prime
helm repo add rancher-prime "${RANCHER_CHART_URL}"
helm repo update
corral config vars set rancher_image "registry.suse.com/rancher/rancher"
corral config vars set env_var_map '["CATTLE_AGENT_IMAGE|registry.suse.com/rancher/rancher-agent:'${RANCHER_IMAGE_TAG}', RANCHER_PRIME|true, CATTLE_UI_BRAND|suse"]'
elif [[ "${RANCHER_HELM_REPO}" == "optimus_prime" ]]; then
RANCHER_HELM_REPO=optimus
RANCHER_CHART_URL=https://charts.optimus.rancher.io/server-charts/latest
helm repo add rancher-optimus "${RANCHER_CHART_URL}"
helm repo update
corral config vars set rancher_image "stgregistry.suse.com/rancher/rancher"
corral config vars set env_var_map '["CATTLE_AGENT_IMAGE|stgregistry.suse.com/rancher/rancher-agent:'${RANCHER_IMAGE_TAG}', RANCHER_PRIME|true, CATTLE_UI_BRAND|suse"]'
elif [[ "${RANCHER_HELM_REPO}" == "alpha" ]]; then
RANCHER_CHART_URL=https://releases.rancher.com/server-charts/alpha
helm repo add rancher-alpha "${RANCHER_CHART_URL}"
helm repo update
elif [[ "${RANCHER_HELM_REPO}" == "stable" ]]; then
RANCHER_CHART_URL=https://releases.rancher.com/server-charts/stable
helm repo add rancher-stable "${RANCHER_CHART_URL}"
helm repo update
else
RANCHER_CHART_URL=https://releases.rancher.com/server-charts/latest
helm repo add rancher-latest "${RANCHER_CHART_URL}"
helm repo update
fi
corral config vars set rancher_chart_repo "${RANCHER_HELM_REPO}"
if [[ "${RANCHER_HELM_REPO}" == "optimus" ]]; then
corral config vars set rancher_chart_url "${RANCHER_CHART_URL}"
else
url_string=$(echo "${RANCHER_CHART_URL}" | grep -o '.*server-charts')
corral config vars set rancher_chart_url "${url_string}"
fi
fi
version_string=$(echo "${RANCHER_IMAGE_TAG}" | cut -f1 -d"-")
if [[ "${RANCHER_IMAGE_TAG}" == "head" ]]; then
RANCHER_VERSION=$(helm search repo "rancher-${RANCHER_HELM_REPO}" --devel --versions | sed -n '1!p' | head -1 | cut -f2 | tr -d '[:space:]')
else
RANCHER_VERSION=$(helm search repo "rancher-${RANCHER_HELM_REPO}" --devel --versions | grep "${version_string}" | head -n 1 | cut -f2 | tr -d '[:space:]')
fi
corral config vars set rancher_image_tag "${RANCHER_IMAGE_TAG}"
fi
cd "${WORKSPACE}/corral-packages"
yq -i e ".variables.rancher_version += [\"${RANCHER_VERSION}\"] | .variables.rancher_version style=\"literal\"" packages/aws/rancher-k3s.yaml
yq -i e ".variables.kubernetes_version += [\"${K3S_KUBERNETES_VERSION}\"] | .variables.kubernetes_version style=\"literal\"" packages/aws/rancher-k3s.yaml
yq -i e ".variables.cert_manager_version += [\"${CERT_MANAGER_VERSION}\"] | .variables.kubernetes_version style=\"literal\"" packages/aws/rancher-k3s.yaml
echo $'manifest:\n name: custom-node\ndescription: custom generated node\ntemplates:\n - aws/nodes\nvariables:\n instance_type:\n - t3a.xlarge' > packages/aws/custom-node.yaml
yq -i e ".variables.kubernetes_version += [\"${K3S_KUBERNETES_VERSION}\"] | .variables.kubernetes_version style=\"literal\"" packages/aws/k3s.yaml
cat packages/aws/rancher-k3s.yaml
ls -al packages/aws/
cat packages/aws/dashboard-tests.yaml
cat packages/aws/custom-node.yaml
prefix_random=$(cat /dev/urandom | env LC_ALL=C tr -dc 'a-z0-9' | fold -w 8 | head -n 1)
corral config vars set bootstrap_password "${BOOTSTRAP_PASSWORD:-password}"
corral config vars set aws_route53_zone "${AWS_ROUTE53_ZONE}"
corral config vars set server_count "${SERVER_COUNT:-3}"
corral config vars set agent_count "${AGENT_COUNT:-0}"
corral config vars delete rancher_host
if [[ "${JOB_TYPE}" == "recurring" ]]; then
RANCHER_HOST="jenkins-${prefix_random}.${AWS_ROUTE53_ZONE}"
fi
K3S_KUBERNETES_VERSION="${K3S_KUBERNETES_VERSION//+/-}"
make init
make build
ls -al dist
corral config vars set node_count 1
corral config vars set aws_hostname_prefix "jenkins-${prefix_random}-c"
corral config vars delete instance_type
corral config vars set bastion_ip ""
echo "Custom Node for RKE2 Cluster"
corral create --skip-cleanup --recreate --debug customnode \
"dist/aws-t3a.xlarge"
corral config vars set custom_node_ip "$(corral vars customnode first_node_ip)"
corral config vars set custom_node_key "$(corral vars customnode corral_private_key | base64 -w 0)"
echo "Custom Node for RKE1 Cluster"
corral create --skip-cleanup --recreate --debug customnoderke1 \
"dist/aws-t3a.xlarge"
corral config vars set custom_node_ip_rke1 "$(corral vars customnoderke1 first_node_ip)"
corral config vars set custom_node_key_rke1 "$(corral vars customnoderke1 corral_private_key | base64 -w 0)"
corral config vars set instance_type "${AWS_INSTANCE_TYPE}"
corral config vars set aws_hostname_prefix "jenkins-${prefix_random}"
echo "Corral Package string: ${K3S_KUBERNETES_VERSION}-${RANCHER_VERSION//v}-${CERT_MANAGER_VERSION}"
corral config vars set aws_hostname_prefix "jenkins-${prefix_random}-i"
corral config vars set server_count 1
corral create --skip-cleanup --recreate --debug importcluster \
"dist/aws-k3s-${K3S_KUBERNETES_VERSION}"
corral config vars set imported_kubeconfig $(corral vars importcluster kubeconfig)
corral config vars set aws_hostname_prefix "jenkins-${prefix_random}"
corral config vars set server_count "${SERVER_COUNT:-3}"
if [[ "${JOB_TYPE}" == "recurring" ]]; then
corral create --skip-cleanup --recreate --debug rancher \
"dist/aws-k3s-rancher-${K3S_KUBERNETES_VERSION}-${RANCHER_VERSION//v}-${CERT_MANAGER_VERSION}"
fi
}
if [[ "${JOB_TYPE}" == "recurring" ]]; then
RANCHER_TYPE="recurring"
create_initial_clusters
fi
if [[ "${JOB_TYPE}" == "existing" ]]; then
RANCHER_TYPE="existing"
shopt -s nocasematch
if [[ "${CREATE_INITIAL_CLUSTERS}" == "yes" ]]; then
create_initial_clusters
fi
shopt -u nocasematch
fi
echo "Rancher type: ${RANCHER_TYPE}"
if semver lt "${RANCHER_VERSION}" "2.9.99" && [[ "${RANCHER_IMAGE_TAG}" != "head" ]]; then NODEJS_VERSION="16.20.2"; fi
corral config vars set rancher_type "${RANCHER_TYPE}"
corral config vars set nodejs_version "${NODEJS_VERSION}"
corral config vars set dashboard_repo "${DASHBOARD_REPO}"
corral config vars set dashboard_branch "${DASHBOARD_BRANCH}"
# Disable vai where it doesn't exist or is turn off by default
case "${RANCHER_IMAGE_TAG}" in
"v2.7-head" | "v2.8-head" | "v2.9-head" )
CYPRESS_TAGS="${CYPRESS_TAGS}+-@vai"
;;
*)
esac
corral config vars set cypress_tags "${CYPRESS_TAGS}"
corral config vars set cypress_version "${CYPRESS_VERSION}"
corral config vars set yarn_version "${YARN_VERSION}"
corral config vars set kubectl_version "${KUBECTL_VERSION}"
if [[ -n "${RANCHER_USERNAME}" ]]; then
corral config vars set rancher_username "${RANCHER_USERNAME}"
fi
if [[ -n "${RANCHER_PASSWORD}" ]]; then
corral config vars set rancher_password "${RANCHER_PASSWORD}"
fi
if [[ -n "${RANCHER_HOST}" ]]; then
corral config vars set rancher_host "${RANCHER_HOST}"
fi
if [[ -n "${CHROME_VERSION}" ]]; then
corral config vars set chrome_version "${CHROME_VERSION}"
fi
cd "${WORKSPACE}/corral-packages"
make init
make build
echo "${PWD}"
chmod -R 766 "${WORKSPACE}/corral-packages"
corral config vars set node_count 1
corral config vars set bastion_ip ""
corral config vars delete instance_type
corral config vars set aws_hostname_prefix "jenkins-${prefix_random}-ci"
corral create --skip-cleanup --recreate --debug ci dist/aws-dashboard-tests-t3a.xlarge
corral config vars -o yaml
corral vars ci corral_private_key -o yaml
NODE_EXTERNAL_IP="$(corral vars ci first_node_ip)"
cd "${WORKSPACE}"
echo "${PWD}"