[admin@pd-common-jenkins deployment-document]$ cat santak_dev_deploy_web_en.sh
#! /bin/bash
JNEKINS_HOME=/var/lib/jenkins
PROJECT_NAME=santak
DEPLOY_HOME=$JNEKINS_HOME/k8s-app-service
DOCKER_BUILD_HOME=$JNEKINS_HOME/docker_images_build
DOCKER_REGISTRY=harbor.wicrenet.com
DOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/santak
DOCKER_REGISTRY_USER=admin
DOCKER_REGISTRY_PASSWD=Harbor_12
NAMESPACE=santak
MICRO_SERVICE=$1
IMAGE_NAME=$2
#IMAGE_TAG=$3
###################################################
# 部署脚本所在目录
SCRIPT_DIR=$JENKINS_HOME/jenkins-deployment
# 获取当前最新部署的commit id
IMAGE_TAG=v`git rev-parse --short HEAD`
##################################################
# 判断$PORJECT_NAME是否存在,不存则创建
if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then
mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICE
else
echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"
fi
rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/*
cp -r .nuxt env.js static server nuxt.config.js package.json $DOCKER_BUILD_HOME/$MICRO_SERVICE/
#写入dockerfile文件
cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
cat > Dockerfile<< EOF
# Dockerfile for service manage of Byton Project
# Build with:
# docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG .
FROM node:8-alpine
MAINTAINER Jordan
WORKDIR /data/web
COPY . /data/web
RUN npm install
EXPOSE 8080
CMD ["npm","run","start-en"]
EOF
#bulid项目镜像
docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG .
#把构建好的项目镜像上传到仓库
docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
docker push $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG
##########################################
# 部署最新镜像到k8s上
cd $DEPLOY_HOME
kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config delete -f $PROJECT_NAME-$MICRO_SERVICE.yaml
sleep 2
rm $PROJECT_NAME-$MICRO_SERVICE.yaml
cp sample-micro-service-deployment.sample $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<IMAGE_NAME>#$IMAGE_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<PROJECT_NAME>#$PROJECT_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<MICRO_SERVICE>#$MICRO_SERVICE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<IMAGE_TAG>#$IMAGE_TAG#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<NAME_SPACE>#$NAMESPACE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
sed -i "s#<DOCKER_REGISTRY_HOME>#$DOCKER_REGISTRY_HOME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config apply -f $DEPLOY_HOME/$PROJECT_NAME-$MICRO_SERVICE.yaml --record
sleep 10
kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config get po -n $NAMESPACE
#! /bin/bash
source /var/lib/jenkins/deployment-document/build_script/env_variable.sh
PROJECT_NAME=$1
MICRO_SERVICE=$2
NAMESPACE=$3
packagePath=$4
ENV=$5
###################################################
# 获取当前最新部署的commit id
CURRENT_IMAGE_TAG=`date +%Y-%m-%d-%H-%M-%S`-`git rev-parse --short HEAD`
echo "current commit id: $CURRENT_IMAGE_TAG"
##################################################
#判断项目目录是否存在,不存在则创建
if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then
mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICE
else
echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"
fi
#把打包好的代码包拷贝到项目文件夹下
case $packagePath in
"vue-web")
rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/*
rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/.nuxt
cd $JENKINS_HOME/workspace/$JOB_NAME
cp -r .nuxt env.js static server nuxt.config.js package.json $DOCKER_BUILD_HOME/$MICRO_SERVICE/
;;
"maven")
echo "maven"
;;
esac
#写入dockerfile文件
cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
case $ENV in
"zh")
cat > Dockerfile<< EOF
FROM node:13.14.0-alpine
MAINTAINER Jordan
WORKDIR /data/web
COPY . /data/web
RUN npm install
EXPOSE 8080
CMD ["npm","start"]
EOF
;;
"en")
cat > Dockerfile<< EOF
FROM node:13.14.0-alpine
MAINTAINER Jordan
WORKDIR /data/web
COPY . /data/web
RUN npm install
EXPOSE 8080
CMD ["npm","run","start-en"]
EOF
;;
esac
function buildDockerImages() {
#bulid项目镜像
docker build -t $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG .
#把构建好的项目镜像上传到镜像仓库
docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
docker push $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG
echo "the images has been pushed"
}
buildDockerImages
##########################################
#判断域名空间是否存在
function nsIsExist() {
NAMESPACE=`kubectl get ns|grep $NAMESPACE|awk '{print $1}'`
if [[ ! -n "$NAMESPACE" ]]; then
echo "$NAMESPACE 不存在,需要创建。"
kubectl create ns $NAMESPACE
echo "$NAMESPACE 创建完成。"
fi
echo "$NAMESPACE 已存在。"
}
nsIsExist
# 判断要项目helm chart文件目录是否存在
if [ ! -d "$DEPLOY_HOME/$MICRO_SERVICE" ];then
mkdir -p $DEPLOY_HOME/$MICRO_SERVICE
else
echo "$DEPLOY_HOME/$MICRO_SERVICE has exist"
fi
# 部署最新镜像到k8s上
cp -r $JENKINS_HOME/deployment-document/build_script/0helm-java-template/* $DEPLOY_HOME/$MICRO_SERVICE
cd $DEPLOY_HOME
sed -i "s#name:.*#name: $MICRO_SERVICE#g" $MICRO_SERVICE/Chart.yaml
sed -i "s#tag:.*#tag: $CURRENT_IMAGE_TAG#g" $MICRO_SERVICE/values.yaml
sed -i "s#namespace:.*#namespace: $NAMESPACE#g" $MICRO_SERVICE/values.yaml
sed -i "s#name:.*#name: $NAMESPACE-pullimages-secret#g" $MICRO_SERVICE/values.yaml
sed -i "s#repository:.*#repository: $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE#g" $MICRO_SERVICE/values.yaml
#helm install $MICRO_SERVICE
/usr/local/bin/helm upgrade --install $MICRO_SERVICE -n $NAMESPACE ./$MICRO_SERVICE
sleep 10
kubectl get po -n $NAMESPACEll