Newer
Older
Lluis Gifre Renom
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
########################################################################################################################
# Define your deployment settings here
########################################################################################################################
# Set the URL of your local Docker registry where the images will be uploaded to. Leave it blank if you do not want to
# use any Docker registry.
REGISTRY_IMAGE=""
#REGISTRY_IMAGE="http://my-container-registry.local/"
# Set the list of components you want to build images for, and deploy.
COMPONENTS="context device service compute monitoring centralizedattackdetector"
# Set the tag you want to use for your images.
IMAGE_TAG="tf-dev"
# Set the name of the Kubernetes namespace to deploy to.
K8S_NAMESPACE="tf-dev"
########################################################################################################################
# Automated steps start here
########################################################################################################################
# Constants
CLONE_URL="https://gitlab.com/teraflow-h2020/controller.git"
GITLAB_REPO_URL="registry.gitlab.com/teraflow-h2020/controller"
TMP_FOLDER="./tmp"
# Create a tmp folder for files modified during the deployment
TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
mkdir -p $TMP_MANIFESTS_FOLDER
TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
mkdir -p $TMP_LOGS_FOLDER
# Re-create the namespace to prevent being affected by garbage on it
kubectl delete namespace $K8S_NAMESPACE
kubectl create namespace $K8S_NAMESPACE
for COMPONENT in $COMPONENTS; do
echo "Processing '$COMPONENT' component..."
IMAGE_NAME="$COMPONENT:$IMAGE_TAG"
IMAGE_URL="$REGISTRY_IMAGE/$IMAGE_NAME"
echo " Building Docker image..."
BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log"
docker build -t "$IMAGE_NAME" -f ./src/$COMPONENT/Dockerfile ./src/ > $BUILD_LOG
if [ -n "$REGISTRY_IMAGE" ]; then
echo "Pushing Docker image to '$REGISTRY_IMAGE'..."
TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log"
docker tag "$IMAGE_NAME" "$IMAGE_URL" > $TAG_LOG
PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
docker push "$IMAGE_URL" > "$PUSH_LOG"
fi
echo " Adapting manifest file..."
MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml"
cp ./manifests/${COMPONENT}service.yaml $MANIFEST
if [ -n "$REGISTRY_IMAGE" ]; then
sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_URL#g" $MANIFEST
sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" $MANIFEST
else
sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_NAME#g" $MANIFEST
sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" $MANIFEST
fi
echo " Deploying to Kubernetes..."
DEPLOY_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
kubectl --namespace $K8S_NAMESPACE apply -f $MANIFEST > $DEPLOY_LOG
done
kubectl --namespace $K8S_NAMESPACE get all
echo "Done!"