[admin@pd-common-jenkins deployment-document]$ cat santak_dev_deploy_web_en.sh#! /bin/bashJNEKINS_HOME=/var/lib/jenkinsPROJECT_NAME=santakDEPLOY_HOME=$JNEKINS_HOME/k8s-app-serviceDOCKER_BUILD_HOME=$JNEKINS_HOME/docker_images_buildDOCKER_REGISTRY=harbor.wicrenet.comDOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/santakDOCKER_REGISTRY_USER=adminDOCKER_REGISTRY_PASSWD=Harbor_12NAMESPACE=santakMICRO_SERVICE=$1IMAGE_NAME=$2#IMAGE_TAG=$3#################################################### 部署脚本所在目录SCRIPT_DIR=$JENKINS_HOME/jenkins-deployment# 获取当前最新部署的commit idIMAGE_TAG=v`git rev-parse --short HEAD`################################################### 判断$PORJECT_NAME是否存在,不存则创建if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICEelse echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"firm -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_SERVICEcat > Dockerfile<< EOF# Dockerfile for service manage of Byton Project# Build with:# docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG .FROM node:8-alpineMAINTAINER Jordan WORKDIR /data/webCOPY . /data/webRUN npm installEXPOSE 8080CMD ["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_REGISTRYdocker push $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG########################################### 部署最新镜像到k8s上cd $DEPLOY_HOMEkubectl --kubeconfig /mnt/nfs/jenkins/.kube/config delete -f $PROJECT_NAME-$MICRO_SERVICE.yamlsleep 2 rm $PROJECT_NAME-$MICRO_SERVICE.yamlcp sample-micro-service-deployment.sample $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<IMAGE_NAME>#$IMAGE_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<PROJECT_NAME>#$PROJECT_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<MICRO_SERVICE>#$MICRO_SERVICE#g" $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<IMAGE_TAG>#$IMAGE_TAG#g" $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<NAME_SPACE>#$NAMESPACE#g" $PROJECT_NAME-$MICRO_SERVICE.yamlsed -i "s#<DOCKER_REGISTRY_HOME>#$DOCKER_REGISTRY_HOME#g" $PROJECT_NAME-$MICRO_SERVICE.yamlkubectl --kubeconfig /mnt/nfs/jenkins/.kube/config apply -f $DEPLOY_HOME/$PROJECT_NAME-$MICRO_SERVICE.yaml --recordsleep 10kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config get po -n $NAMESPACE
#! /bin/bashsource /var/lib/jenkins/deployment-document/build_script/env_variable.shPROJECT_NAME=$1MICRO_SERVICE=$2NAMESPACE=$3packagePath=$4ENV=$5#################################################### 获取当前最新部署的commit idCURRENT_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_SERVICEelse 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_SERVICEcase $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 ;;esacfunction 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_SERVICEelse echo "$DEPLOY_HOME/$MICRO_SERVICE has exist"fi# 部署最新镜像到k8s上cp -r $JENKINS_HOME/deployment-document/build_script/0helm-java-template/* $DEPLOY_HOME/$MICRO_SERVICEcd $DEPLOY_HOMEsed -i "s#name:.*#name: $MICRO_SERVICE#g" $MICRO_SERVICE/Chart.yaml sed -i "s#tag:.*#tag: $CURRENT_IMAGE_TAG#g" $MICRO_SERVICE/values.yamlsed -i "s#namespace:.*#namespace: $NAMESPACE#g" $MICRO_SERVICE/values.yamlsed -i "s#name:.*#name: $NAMESPACE-pullimages-secret#g" $MICRO_SERVICE/values.yamlsed -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_SERVICEsleep 10kubectl get po -n $NAMESPACEll