-
Notifications
You must be signed in to change notification settings - Fork 82
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update GitHub Actions PR workflow to use the install.sh script for in…
…stalling the KubePlus operator and kubectl plugin; modularized into distinct steps
- Loading branch information
1 parent
72bdcd6
commit a7892d1
Showing
1 changed file
with
97 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,124 +1,157 @@ | ||
name: CI | ||
on: | ||
- pull_request | ||
pull_request: | ||
push: | ||
branches: | ||
- master | ||
env: | ||
ACTIONS_RUNNER_DEBUG: true | ||
KUBEPLUS_TEST_OUTPUT: yes | ||
KUBEPLUS_CI: true | ||
jobs: | ||
job1: | ||
runs-on: ubuntu-20.04 | ||
name: Deploy to minikube | ||
name: Test kubeplus deployment on kind | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Start minikube | ||
uses: medyagh/setup-minikube@master | ||
- name: Try the cluster ! | ||
run: kubectl get pods -A | ||
- name: Deploy KubePlus and application to minikube | ||
run: | | ||
export SHELL=/bin/bash | ||
eval $(minikube -p minikube docker-env) | ||
echo "Glibc version" | ||
ldd --version | ||
- name: Checkout Code | ||
uses: actions/checkout@v4 | ||
|
||
- name: Create k8s Kind Cluster | ||
uses: helm/kind-action@v1 | ||
|
||
- name: Verify Cluster | ||
run: | | ||
kubectl get pods -A | ||
echo "CLUSTER_NAME=chart-testing" >> $GITHUB_ENV | ||
- name: Install Helm, Python3 LXML and Golang | ||
run: | | ||
sudo apt-get install python3-lxml | ||
echo "Installing helm..." | ||
echo "Installing Helm..." | ||
wget https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz | ||
gunzip helm-v3.12.1-linux-amd64.tar.gz | ||
tar -xvf helm-v3.12.1-linux-amd64.tar | ||
sudo mv linux-amd64/helm /usr/local/bin/. | ||
echo "Installing golang..." | ||
rm -rf /usr/local/go | ||
echo "Installing Golang..." | ||
rm -rf /usr/local/go | ||
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz | ||
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz | ||
export PATH=$PATH:/usr/local/go/bin | ||
go version | ||
- name: Prepare KubePlus Environment | ||
run: | | ||
echo "Setting up KubePlus environment..." | ||
echo "Current directory:`pwd`" | ||
echo "Folders:`ls`" | ||
kubeplus_folder="$(basename `pwd`)" | ||
echo "KubePlus folder name:$kubeplus_folder" | ||
mkdir -p $HOME/go/src/github.com/cloud-ark | ||
cd .. | ||
runner_dir=`pwd` | ||
echo "Current directory:`pwd`" | ||
mv $kubeplus_folder $HOME/go/src/github.com/cloud-ark/kubeplus | ||
kubeplus_folder="$(basename `pwd`)" | ||
echo "KubePlus folder name:$kubeplus_folder" | ||
cp -R $kubeplus_folder $HOME/go/src/github.com/cloud-ark/kubeplus | ||
cd $HOME/go/src/github.com/cloud-ark/kubeplus | ||
export KUBEPLUS_NS=default | ||
echo "KUBEPLUS_NS=default" >> $GITHUB_ENV | ||
export KUBEPLUS_HOME=`pwd` | ||
echo "KUBEPLUS_HOME=$KUBEPLUS_HOME" >> $GITHUB_ENV | ||
export PATH=$KUBEPLUS_HOME/plugins:$PATH | ||
echo "PATH:$PATH" | ||
echo "KUBEPLUS_HOME:$KUBEPLUS_HOME" | ||
kubectl kubeplus commands | ||
export KUBEPLUS_NS=default | ||
python3 -m venv venv | ||
source venv/bin/activate | ||
pip3 install -r requirements.txt | ||
apiserver=`kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'` | ||
echo "API_SERVER_URL:$apiserver" | ||
python3 provider-kubeconfig.py -s $apiserver create $KUBEPLUS_NS | ||
deactivate | ||
echo "PATH=$PATH" >> $GITHUB_ENV | ||
echo "Building mutating-webhook..." | ||
- name: Build Mutating Webhook | ||
run: | | ||
echo "KUBEPLUS_HOME:$KUBEPLUS_HOME" | ||
cd $KUBEPLUS_HOME/mutating-webhook | ||
export GO111MODULE=on; go get github.com/googleapis/[email protected] | ||
export GO111MODULE=on | ||
go get github.com/googleapis/[email protected] | ||
./build-artifact.sh latest | ||
echo "Building helmer..." | ||
- name: Build Helmer | ||
run: | | ||
cd $KUBEPLUS_HOME/platform-operator/helm-pod/ | ||
go mod vendor | ||
./build-artifact.sh latest | ||
echo "Building platform-operator..." | ||
- name: Build Platform Operator | ||
run: | | ||
cd $KUBEPLUS_HOME/platform-operator | ||
./build-artifact.sh latest | ||
echo "Building kubeconfiggenerator..." | ||
- name: Build KubeConfig Generator | ||
run: | | ||
cd $KUBEPLUS_HOME/deploy | ||
./build-artifact-kubeconfiggenerator.sh latest | ||
#echo "Building webhook_init_container..." | ||
#./build-artifact.sh latest | ||
#echo "Building resource cleaner..." | ||
#./build-artifact-clean.sh latest | ||
#cd $KUBEPLUS_HOME/consumerui | ||
#echo "Building consumer ui..." | ||
#./build-artifact.sh latest | ||
cd $KUBEPLUS_HOME | ||
ls | ||
docker images | ||
- name: Load Docker Images to Kind cluster | ||
run: | | ||
for image in $(docker images --format '{{.Repository}}:{{.Tag}}' | grep '^gcr.io/cloudark-kubeplus'); do | ||
kind load docker-image "$image" --name $CLUSTER_NAME | ||
done | ||
docker exec $CLUSTER_NAME-control-plane crictl images | ||
echo "Installing KubePlus..." | ||
helm install kubeplus ./deploy/kubeplus-chart --kubeconfig=kubeplus-saas-provider.json --set MUTATING_WEBHOOK=gcr.io/cloudark-kubeplus/pac-mutating-admission-webhook:latest --set PLATFORM_OPERATOR=gcr.io/cloudark-kubeplus/platform-operator:latest --set HELMER=gcr.io/cloudark-kubeplus/helm-pod:latest --set CRD_REGISTRATION_HELPER=gcr.io/cloudark-kubeplus/kubeconfiggenerator:latest -n $KUBEPLUS_NS | ||
- name: Deploy KubePlus and Kubeplus plugin | ||
run: | | ||
./install.sh --kubeplus-plugin --kubeplus $KUBEPLUS_NS | ||
kubectl get pods -A | ||
- name: Verify KubePlus Installation | ||
run: | | ||
echo "Verifying KubePlus installation..." | ||
kubectl get pods -n $KUBEPLUS_NS | grep kubeplus | ||
until kubectl get pods -A | grep kubeplus | grep -i Running; do echo "Waiting for KubePlus to start.."; sleep 1; kubeplus_pod=`kubectl get pods | grep kubeplus | awk '{print $1}'`; kubectl get pods $kubeplus_pod; done | ||
- name: Retrieve KubePlus Pod Logs | ||
run: | | ||
kubeplus_pod=`kubectl get pods | grep kubeplus | awk '{print $1}'` | ||
echo "helmer logs..." | ||
echo "Helmer logs..." | ||
kubectl logs $kubeplus_pod -c helmer | ||
echo "platform-operator logs..." | ||
echo "Platform Operator logs..." | ||
kubectl logs $kubeplus_pod -c platform-operator | ||
echo "crd-hook logs..." | ||
echo "CRD Hook logs..." | ||
kubectl logs $kubeplus_pod -c crd-hook | ||
kubectl upload chart ./examples/multitenancy/application-hosting/wordpress/wordpress-chart-0.0.3.tgz kubeplus-saas-provider.json | ||
echo "Sleeping for 10 seconds before continuing..." | ||
sleep 10 | ||
- name: Upload Example Chart | ||
run: kubectl upload chart ./examples/multitenancy/application-hosting/wordpress/wordpress-chart-0.0.3.tgz kubeplus-saas-provider.json | ||
|
||
- name: Sleep Before Continuing | ||
run: sleep 10 | ||
|
||
- name: Deploy WordPress Service Composition | ||
run: | | ||
kubectl create -f ./examples/multitenancy/application-hosting/wordpress/wordpress-service-composition-localchart.yaml --kubeconfig=kubeplus-saas-provider.json | ||
until kubectl get crds | grep wordpressservices.platformapi.kubeplus; do echo "Waiting for CRD to be registered.."; sleep 1; done | ||
- name: Wait for CRD Registration | ||
run: | | ||
until kubectl get crds | grep wordpressservices.platformapi.kubeplus; do | ||
echo "Waiting for CRD to be registered..." | ||
sleep 1 | ||
done | ||
- name: Deploy Tenant Example | ||
run: | | ||
kubectl create -f ./examples/multitenancy/application-hosting/wordpress/tenant1.yaml --kubeconfig=kubeplus-saas-provider.json | ||
kubectl get resourcecompositions | ||
kubectl describe resourcecomposition wordpress-service-composition | ||
until kubectl get pods -n wp-tenant1 | grep Running; do echo "Waiting for Application Pods to start.."; sleep 1; done | ||
- name: Wait for Application Pods to Start | ||
run: | | ||
until kubectl get pods -n wp-tenant1 | grep Running; do | ||
echo "Waiting for Application Pods to start..." | ||
sleep 1 | ||
done | ||
- name: Interact with Deployed Application | ||
run: | | ||
kubectl appresources WordpressService wp-tenant1 –k kubeplus-saas-provider.json | ||
kubectl metrics WordpressService wp-tenant1 $KUBEPLUS_NS -k kubeplus-saas-provider.json | ||
- name: Cleanup Deployed Resources | ||
run: | | ||
kubectl delete wordpressservice wp-tenant1 --kubeconfig=kubeplus-saas-provider.json | ||
kubectl delete resourcecomposition wordpress-service-composition --kubeconfig=kubeplus-saas-provider.json | ||
echo "Running tests..starting in 5 seconds" | ||
sleep 5 | ||
- name: Run Unit Tests | ||
run: | | ||
cd tests | ||
python3 -m venv venv | ||
source venv/bin/activate | ||
pip3 install -r requirements.txt | ||
python3 -m unittest -v tests | ||
deactivate | ||
cd ../.. | ||
mv kubeplus $runner_dir |