#! /bin/bash
JENKINS_HOME=/var/lib/jenkins
PROJECT_NAME=sant
DEPLOY_HOME=$JENKINS_HOME/k8s-app-service
DOCKER_BUILD_HOME=$JENKINS_HOME/docker_images_build
DOCKER_REGISTRY=harbor.com
DOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/sant
DOCKER_REGISTRY_USER=admin
DOCKER_REGISTRY_PASSWD=Harbo
NAMESPACE=santak
MICRO_SERVICE=$1
IMAGE_NAME=$2
###################################################
# 部署脚本所在目录
SCRIPT_DIR=$JENKINS_HOME/jenkins-deployment
# 获取当前最新部署的commit id
CURRENT_IMAGE_TAG=`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
#把打包好的JAR包拷贝到项目文件夹下
cd $JENKINS_HOME/workspace/$JOB_NAME/app-boot/build/libs
cp *.jar $DOCKER_BUILD_HOME/$MICRO_SERVICE
#写入run.sh启动文件
cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
cat > Dockerfile<< EOF
# Dockerfile for Eureka of Byton Project
# Build with:
# docker build -t $DOCKER_REGISTRY_HOME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG .
FROM $DOCKER_REGISTRY/jianwei/apollo-base-centos7:jdk8
RUN \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
ENV JAVA_HOME /jdk1.8.0_181
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG C.UTF-8
RUN mkdir -p /app
ADD *.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["/jdk1.8.0_181/bin/java","-Xms256m","-Xmx2000m","-jar","-Denv=dev","-Dspring.profiles.active=dev","/app/app.jar","--app.project.prefix=santak-"]
EOF
#bulid项目镜像
docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$CURRENT_IMAGE_TAG .
#把构建好的项目镜像上传到镜像仓库
docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
docker push $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$CURRENT_IMAGE_TAG
echo "the images has been pushed"
##########################################
# 部署最新镜像到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>#$CURRENT_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
cat env_variable.sh
#! /bin/bash
JENKINS_HOME=/var/lib/jenkins
DEPLOY_HOME=$JENKINS_HOME/deployment-document/k8s-app-service
DOCKER_BUILD_HOME=$JENKINS_HOME/deployment-document/docker_images_build
DOCKER_REGISTRY=harbor.wicrenet.com
DOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/$PROJECT_NAME
DOCKER_REGISTRY_USER=admin
DOCKER_REGISTRY_PASSWD=Harbor_12
#! /bin/bash
source /var/lib/jenkins/deployment-document/build_script/env_variable.sh
PROJECT_NAME=$1
MICRO_SERVICE=$2
NAMESPACE=$3
jarPath=$4
###################################################
# 获取当前最新部署的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
#把打包好的JAR包拷贝到项目文件夹下
case $jarPath in
"gradle")
cd $JENKINS_HOME/workspace/$JOB_NAME/app-boot/build/libs/
rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/*.jar
cp *.jar $DOCKER_BUILD_HOME/$MICRO_SERVICE
;;
"maven")
echo "maven"
;;
esac
#写入dockerfile文件
cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
cat > Dockerfile<< EOF
FROM $DOCKER_REGISTRY/jianwei/apollo-base-centos7:jdk8
RUN \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
ENV JAVA_HOME /jdk1.8.0_181
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG C.UTF-8
RUN mkdir -p /app
ADD *.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["/jdk1.8.0_181/bin/java","-Xms256m","-Xmx2000m","-jar","-Denv=dev","-Dspring.profiles.active=dev","/app/app.jar","--app.project.prefix=santak-"]
EOF
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 $NAMESPACE