1. #! /bin/bash
    2. JENKINS_HOME=/var/lib/jenkins
    3. PROJECT_NAME=sant
    4. DEPLOY_HOME=$JENKINS_HOME/k8s-app-service
    5. DOCKER_BUILD_HOME=$JENKINS_HOME/docker_images_build
    6. DOCKER_REGISTRY=harbor.com
    7. DOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/sant
    8. DOCKER_REGISTRY_USER=admin
    9. DOCKER_REGISTRY_PASSWD=Harbo
    10. NAMESPACE=santak
    11. MICRO_SERVICE=$1
    12. IMAGE_NAME=$2
    13. ###################################################
    14. # 部署脚本所在目录
    15. SCRIPT_DIR=$JENKINS_HOME/jenkins-deployment
    16. # 获取当前最新部署的commit id
    17. CURRENT_IMAGE_TAG=`git rev-parse --short HEAD`
    18. echo "current commit id: $CURRENT_IMAGE_TAG"
    19. ###################################################
    20. #判断项目目录是否存在,不存在则创建
    21. if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then
    22. mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICE
    23. else
    24. echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"
    25. fi
    26. #把打包好的JAR包拷贝到项目文件夹下
    27. cd $JENKINS_HOME/workspace/$JOB_NAME/app-boot/build/libs
    28. cp *.jar $DOCKER_BUILD_HOME/$MICRO_SERVICE
    29. #写入run.sh启动文件
    30. cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
    31. cat > Dockerfile<< EOF
    32. # Dockerfile for Eureka of Byton Project
    33. # Build with:
    34. # docker build -t $DOCKER_REGISTRY_HOME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG .
    35. FROM $DOCKER_REGISTRY/jianwei/apollo-base-centos7:jdk8
    36. RUN \
    37. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    38. echo "Asia/Shanghai" > /etc/timezone
    39. ENV JAVA_HOME /jdk1.8.0_181
    40. ENV LANG en_US.UTF-8
    41. ENV LANGUAGE en_US:en
    42. ENV LC_ALL en_US.UTF-8
    43. ENV LANG C.UTF-8
    44. RUN mkdir -p /app
    45. ADD *.jar /app/app.jar
    46. EXPOSE 8080
    47. ENTRYPOINT ["/jdk1.8.0_181/bin/java","-Xms256m","-Xmx2000m","-jar","-Denv=dev","-Dspring.profiles.active=dev","/app/app.jar","--app.project.prefix=santak-"]
    48. EOF
    49. #bulid项目镜像
    50. docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$CURRENT_IMAGE_TAG .
    51. #把构建好的项目镜像上传到镜像仓库
    52. docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
    53. docker push $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$CURRENT_IMAGE_TAG
    54. echo "the images has been pushed"
    55. ##########################################
    56. # 部署最新镜像到k8s上
    57. cd $DEPLOY_HOME
    58. kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config delete -f $PROJECT_NAME-$MICRO_SERVICE.yaml
    59. sleep 2
    60. rm $PROJECT_NAME-$MICRO_SERVICE.yaml
    61. cp sample-micro-service-deployment.sample $PROJECT_NAME-$MICRO_SERVICE.yaml
    62. sed -i "s#<IMAGE_NAME>#$IMAGE_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    63. sed -i "s#<PROJECT_NAME>#$PROJECT_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    64. sed -i "s#<MICRO_SERVICE>#$MICRO_SERVICE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    65. sed -i "s#<IMAGE_TAG>#$CURRENT_IMAGE_TAG#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    66. sed -i "s#<NAME_SPACE>#$NAMESPACE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    67. sed -i "s#<DOCKER_REGISTRY_HOME>#$DOCKER_REGISTRY_HOME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    68. kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config apply -f $DEPLOY_HOME/$PROJECT_NAME-$MICRO_SERVICE.yaml --record
    69. sleep 10
    70. 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