mirror of https://github.com/rancher/dashboard.git
276 lines
12 KiB
Bash
Executable File
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}"
|