52ef35d1bf
Extends the build tools to add support to Kubernetes. For kubernetes, it supports single node cluster and host path for the volumes. New environment variables: - PROJECT: build project name - STX_PLATFORM: minikube or kubernetes - STX_BUILD_CPUS: replaces MINIKUBECPUS - STX_K8S_NAMESPACE: kubernetes namespace name * Default values are set to minikube, more details added in import-stx.README. To deploy stx on k8s you need to follow the below steps: - create k8s namespace - export PROJECT, included to support multiproject environments it is used by the new default build home and also for docker tagging. - export STX_BUILD_HOME, e.g: /localdisk/user/$PROJECT - export STX_K8S_NAMESPACE="namespace_name" - export STX_PLATFORM="kubernetes" - export KUBECONFIG to your kubernetes config file - STX_BUILD_CPUS replaces MINIKUBECPUS, this variable is used by build-pkgs parallel jobs ($MAX_CPUS) - Create your build home $STX_BUILD_HOME - Init repo & repo sync - source import-stx, check the env variables - stx-init-env - stx control status/start/stop/enter Test Plan: Pass: Create env on minikube Pass: Create env on Kubernetes Pass: Apply patch on current minikube env and continue to work on the environment without issues Pass: build package on Debian Pass: build Debian image Story: 2009812 Task: 44391 Signed-off-by: Luis Sampaio <luis.sampaio@windriver.com> Change-Id: I7b760fbf1454f6aa90dd93dd9ff3a61d5fbd1b5c
161 lines
4.7 KiB
Plaintext
161 lines
4.7 KiB
Plaintext
# bash
|
|
|
|
notice_warn () {
|
|
local tty_on tty_off
|
|
if [[ -t 2 ]] ; then
|
|
tty_on=$'\033[1;33m'
|
|
tty_off=$'\033[0m'
|
|
fi
|
|
echo >&2 "${tty_on}$*${tty_off}"
|
|
}
|
|
|
|
number_of_users () {
|
|
local count
|
|
|
|
count=$(users | tr ' ' '\n' | sort --uniq | wc -l)
|
|
|
|
# Add in non-login users that might trigger a parallel build
|
|
# based on a timer, or other trigger.
|
|
if getent passwd | grep -q jenkins; then
|
|
count=$((count+1))
|
|
fi
|
|
|
|
# Always return at least one. i.e. someone is
|
|
# running this script.
|
|
if [ $count -le 0 ]; then
|
|
count=1
|
|
fi
|
|
|
|
echo $count
|
|
}
|
|
|
|
number_of_cpus () {
|
|
/usr/bin/nproc
|
|
}
|
|
|
|
sqrt () {
|
|
echo -e "sqrt($1)" | bc -q -i | head -2 | tail -1
|
|
}
|
|
|
|
|
|
if [ -z "$PROJECT" ]; then
|
|
notice_warn "\$PROJECT needs to be defined, this will be your project name."
|
|
notice_warn "It will be used on the docker image tagging to support multiusers."
|
|
return 1
|
|
fi
|
|
|
|
# Host side path, exports STX lib to user's PATH
|
|
export PRJDIR=$(pwd)
|
|
export PATH=$PRJDIR/stx/bin:$PATH
|
|
# Used by helm/stx-init to tag the user images
|
|
DOCKER_TAG_VERSION="v0.1.0"
|
|
export DOCKER_TAG_LOCAL="${USER}-${PROJECT}-${DOCKER_TAG_VERSION}"
|
|
# Platform 'minikube' or 'kubernetes'
|
|
export STX_PLATFORM="${STX_PLATFORM:-minikube}"
|
|
# Max cpus for the build parallel jobs, replaces MINIKUBECPUS env var
|
|
export STX_BUILD_CPUS=${STX_BUILD_CPUS:-6}
|
|
|
|
STX_BUILD_HOME_DEFAULT_v1="/localdisk/$USER"
|
|
STX_BUILD_HOME_DEFAULT_v2="/localdisk/designer/$USER/$PROJECT"
|
|
|
|
if [ ! -f "stx.conf" ]; then
|
|
cp stx.conf.sample stx.conf
|
|
fi
|
|
|
|
# Platform specifics
|
|
if [ "$STX_PLATFORM" = "minikube" ]; then
|
|
# MINIKUBE Settings
|
|
if [ -z "$STX_BUILD_HOME" ]; then
|
|
# Verify default build home
|
|
if [ -d "${STX_BUILD_HOME_DEFAULT_v1}/localdisk/designer/$USER" ]; then
|
|
STX_BUILD_HOME="${STX_BUILD_HOME_DEFAULT_v1}"
|
|
else
|
|
STX_BUILD_HOME="${STX_BUILD_HOME_DEFAULT_v2}"
|
|
fi
|
|
export STX_BUILD_HOME
|
|
fi
|
|
|
|
if [ -z "$MINIKUBE_HOME" ]; then
|
|
MINIKUBE_HOME=$HOME
|
|
else
|
|
if [ ! -d "$MINIKUBE_HOME" ]; then
|
|
echo "The directory defined by \$MINIKUBE_HOME doesn't exist"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
FSTYPE=$(stat -f -L -c %T $MINIKUBE_HOME)
|
|
if [ x"$FSTYPE" == x"nfs" ]; then
|
|
echo ""
|
|
echo "Warning: stx minikube doesn't allow \$MINIKUBE_HOME or \$HOME directory as nfs mount point!!!"
|
|
echo " Please set non-nfs MINIKUBE_HOME with the command 'export MINIKUBE_HOME=XXX/YYY'"
|
|
echo ""
|
|
unset MINIKUBE_HOME
|
|
return 1
|
|
fi
|
|
|
|
export MINIKUBEMEMORY=${MINIKUBEMEMORY:-16000}
|
|
export MINIKUBENAME=${MINIKUBENAME:-minikube-$USER-upstream}
|
|
export KUBECONFIG=$MINIKUBE_HOME/.kube/config
|
|
|
|
# Consider many users are just working with code and not actually building.
|
|
NUM_USERS=$(sqrt $(number_of_users))
|
|
ABSOLUTE_MAX_CPUS=$(($(number_of_cpus)/$NUM_USERS))
|
|
MAX_CPUS=$(number_of_cpus)
|
|
if [ "$MAX_CPUS" == "" ] || [ "$MAX_CPUS" == "0" ]; then
|
|
MAX_CPUS=1
|
|
fi
|
|
|
|
if [ $MAX_CPUS -gt $ABSOLUTE_MAX_CPUS ]; then
|
|
MAX_CPUS=$ABSOLUTE_MAX_CPUS
|
|
fi
|
|
|
|
if [ $STX_BUILD_CPUS -gt $MAX_CPUS ]; then
|
|
notice_warn "\$STX_BUILD_CPUS setting:$STX_BUILD_CPUS is more than MAX_CPUS: $MAX_CPUS."
|
|
notice_warn "Limit the minikube cluster with MAX_CPUS."
|
|
|
|
export STX_BUILD_CPUS=$MAX_CPUS
|
|
fi
|
|
|
|
MAX_MEMORY=`expr $(cat /proc/meminfo |grep MemTotal | awk '{print $2}') / 1024`
|
|
if [ "$MAX_MEMORY" == "" ] || [ "$MAX_MEMORY" == "0" ]; then
|
|
MAX_MEMORY=2048
|
|
fi
|
|
|
|
if [ $MINIKUBEMEMORY -gt $MAX_MEMORY ]; then
|
|
|
|
notice_warn "MINIKUBEMEMORY setting:$MINIKUBEMEMORY is more than system MAX_MEMORY: $MAX_MEMORY M."
|
|
notice_warn "Limit the minikube cluster with MAX_MEMORY."
|
|
|
|
export MINIKUBEMEMORY=$MAX_MEMORY
|
|
fi
|
|
|
|
elif [ "$STX_PLATFORM" = "kubernetes" ]; then
|
|
# Host side path STX_BUILD_HOME
|
|
export STX_BUILD_HOME="${STX_BUILD_HOME:-${STX_BUILD_HOME_DEFAULT_v2}}"
|
|
|
|
if [ -z "$STX_K8S_NAMESPACE" ]; then
|
|
notice_warn "\$STX_K8S_NAMESPACE needs to be defined, this will be your namespace name"
|
|
return 1
|
|
fi
|
|
|
|
if ! kubectl get namespace 2>/dev/null | grep -q $STX_K8S_NAMESPACE; then
|
|
notice_warn "namespace $STX_K8S_NAMESPACE not found"
|
|
return 1
|
|
fi
|
|
|
|
if [ -z "$KUBECONFIG" ]; then
|
|
# Kubeconfig default location inside STX_BUILD_HOME
|
|
export KUBECONFIG=$STX_BUILD_HOME/.kube/config
|
|
fi
|
|
|
|
if [ ! -f "$KUBECONFIG" ]; then
|
|
notice_warn "KUBECONFIG: $KUBECONFIG not found"
|
|
notice_warn "Fix the kube config and try again."
|
|
return 1
|
|
fi
|
|
|
|
else
|
|
notice_warn "\$STX_PLATFORM not specified, valid options are: 'minikube' or 'kubernetes'"
|
|
return 1
|
|
fi |