#ident "%W%"
ENV=${1:-dev}
APP_SEQ=${2:-1}
ROOT_FOLDER=$(pwd)
function prop {
grep "${1}" $ROOT_FOLDER/$ENV.properties|cut -d'=' -f2
}
APP_NAME=$(sed -n ${APP_SEQ}p deploy.lst)
echo "Mvn build for app [$(prop 'app.name')]..."
cd $ROOT_FOLDER/$APP_NAME
mvn clean package -Dmaven.test.skip=true
docker build -t $APP_NAME:$ENV-build --build-arg WORK_PATH=$(prop 'root.path') --build-arg SERVICE_NAME=${APP_NAME} --build-arg PORT=$(prop ${APP_NAME}'.service.port') $ROOT_FOLDER
docker tag $APP_NAME:$ENV-build $(prop 'docker.repo')/$APP_NAME:$(prop 'image.tag')
docker login $(prop 'docker.repo') -u xd20319 -p Asdf56jkl@?
docker push $(prop 'docker.repo')/$APP_NAME:$(prop 'image.tag')
docker rmi -f $(docker images | grep $APP_NAME | awk '{print $3;}')
echo "Deploy application [$APP_NAME]..."
echo "PROJECT_NAME=$(prop 'project.name')"
echo "APP_NAME=${APP_NAME}"
echo "TAG=$(prop 'image.tag')"
echo "SERVICE_PORT=$(prop ${APP_NAME}'.service.port')"
echo "REPLICA_COUNT=$(prop 'replica.count')"
echo "HOSTNAME=$(prop 'hostname')"
echo "DOCKER_REPOSITORY=$(prop 'docker.repo')"
echo "ROOT_PATH=$(prop 'root.path')"
echo "ENV_NAME=${ENV}"
echo "APP_ID=${APP_SEQ}"
echo "VOLUME_NAME=$(prop 'volume.name')"
echo "VOLUME_CAPCITY=$(prop 'volume.capcity')"
oc login -u $(prop 'openshift.user') -p $(prop 'openshift.pass')
oc project $(prop 'project.name')
oc process -f $ROOT_FOLDER/deploy.json \
-l app=$APP_NAME \
-l project=$(prop 'project.name') \
-p PROJECT_NAME=$(prop 'project.name') \
-p APP_NAME=${APP_NAME} \
-p TAG=$(prop 'image.tag') \
-p SERVICE_PORT=$(prop ${APP_NAME}'.service.port') \
-p HOSTNAME=$(prop 'hostname') \
-p DOCKER_REPOSITORY=$(prop 'docker.repo') \
-p ROOT_PATH=$(prop 'root.path') \
-p ENV_NAME=${ENV} \
-p APP_ID=${APP_SEQ} \
-p VOLUME_NAME=$(prop 'volume.name') \
-p VOLUME_CAPCITY=$(prop 'volume.capcity') > $ROOT_FOLDER/deploy.json.temp
sed -i s/1116/$(prop ${APP_NAME}'.service.port')/g $ROOT_FOLDER/deploy.json.temp
cat $ROOT_FOLDER/deploy.json.temp | oc apply -f -
rm -f $ROOT_FOLDER/deploy.json.temp
{
"kind": "Template",
"apiVersion": "v1",
"parameters": [
{
"name": "PROJECT_NAME",
"displayName": "Project Name",
"description": "The name for the project."
},
{
"name": "APP_NAME",
"displayName": "App Name",
"description": "The name for the project."
},
{
"name": "TAG",
"displayName": "project Name",
"description": "The name for the project."
},
{
"name": "SERVICE_PORT",
"displayName": "Service Port",
"description": "Service Port"
},
{
"name": "HOSTNAME",
"displayName": "Host Name",
"description": "The host name for the project."
},
{
"name": "REPLICA_COUNT",
"displayName": "Replica Count",
"description": "Number of replicas to run.",
"value": "2",
"required": true
},
{
"name": "SSH_SECRET",
"displayName": "SSH Secret",
"description": "Openshift Secret for Git SSH.",
"value": "repo-at-bitbucket",
"required": true
},
{
"name": "DOCKER_REPOSITORY",
"displayName": "Docker Artifactory Repository",
"description": "Docker Artifactory Repository."
},
{
"name": "ROOT_PATH",
"displayName": "Path of volume",
"description": "Path of volume"
}
,
{
"name": "ENV_NAME",
"displayName": "Env Name",
"description": "Env Name"
},
{
"name": "APP_ID",
"displayName": "App ID",
"description": "App ID"
},
{
"name": "VOLUME_NAME",
"displayName": "NFS Volume Name",
"description": "NFS Volume Name"
},
{
"name": "VOLUME_CAPCITY",
"displayName": "NFS Volume Capcity",
"description": "NFS Volume Capcity"
}
],
"objects": [
{
"apiVersion": "v1",
"kind": "PersistentVolumeClaim",
"metadata": {
"name": "claim1"
},
"spec": {
"accessModes": [ "ReadWriteOnce" ],
"resources": {
"requests": {
"storage": "${VOLUME_CAPCITY}"
},
"volumeName": "${VOLUME_NAME}"
}
}
},
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "${APP_NAME}",
"labels": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
}
},
"spec": {
"replicas": "${{REPLICA_COUNT}}",
"selector": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
},
"strategy": {
"type": "Rolling"
},
"template": {
"metadata": {
"name": "${APP_NAME}",
"labels": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
}
},
"spec": {
"containers": [
{
"name": "${APP_NAME}",
"image": "${DOCKER_REPOSITORY}/${APP_NAME}:${TAG}",
"imagePullPolicy": "Always",
"env": [
],
"ports": [
{
"containerPort": "${SERVICE_PORT}",
"protocol": "TCP"
}
],
"volumeMounts": [
{
"name": "${APP_NAME}-vo",
"mountPath": "${ROOT_PATH}"
}
]
}
],
"volumes": [
{
"name": "${APP_NAME}-vo",
"persistentVolumeClaim": {
"claimName": "claim1"
}
}
],
"restartPolicy": "Always"
}
}
}
},
{
"kind": "Route",
"apiVersion": "v1",
"metadata": {
"name": "${APP_NAME}",
"labels": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
}
},
"spec": {
"host": "${APP_NAME}.${HOSTNAME}",
"to": {
"kind": "Service",
"name": "${APP_NAME}"
}
}
},
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "${APP_NAME}",
"labels": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
}
},
"spec": {
"ports": [
{
"name": "${APP_NAME}-port",
"port": "${SERVICE_PORT}",
"protocol": "TCP",
"targetPort": "${{SERVICE_PORT}}"
}
],
"selector": {
"app": "${APP_NAME}",
"project": "${PROJECT_NAME}"
}
}
}
]
}