1. #! /bin/bash
    2. JNEKINS_HOME=/var/lib/jenkins
    3. PROJECT_NAME=sant
    4. BUILD_HOME=$JNEKINS_HOME/workspace/$PROJECT_NAME/service-manage
    5. DEPLOY_HOME=$JNEKINS_HOME/k8s-app-service
    6. DOCKER_BUILD_HOME=$JNEKINS_HOME/docker_images_build
    7. DOCKER_REGISTRY=harbor.com
    8. DOCKER_REGISTRY_HOME=$DOCKER_REGISTRY/sant
    9. DOCKER_REGISTRY_USER=admin
    10. DOCKER_REGISTRY_PASSWD=Harbo
    11. NAMESPACE=santak
    12. MICRO_SERVICE=$1
    13. IMAGE_NAME=$2
    14. #IMAGE_TAG=$3
    15. ###################################################
    16. # 部署脚本所在目录
    17. SCRIPT_DIR=$JENKINS_HOME/jenkins-deployment
    18. # 获取当前最新部署的commit id
    19. IMAGE_TAG=v`git rev-parse --short HEAD`
    20. ##################################################
    21. # 判断$PORJECT_NAME是否存在,不存则创建
    22. if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then
    23. mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICE
    24. else
    25. echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"
    26. fi
    27. rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/*
    28. cp -r dist/* $DOCKER_BUILD_HOME/$MICRO_SERVICE/
    29. #写入dockerfile文件
    30. cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
    31. cat > Dockerfile<< EOF
    32. # Dockerfile for service manage of Byton Project
    33. # Build with:
    34. # docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG .
    35. FROM nginx:1.15.7
    36. ADD . /usr/share/nginx/html
    37. EXPOSE 80
    38. EOF
    39. #bulid项目镜像
    40. docker build -t $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG .
    41. #把构建好的项目镜像上传到仓库
    42. docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
    43. docker push $DOCKER_REGISTRY_HOME/$IMAGE_NAME:$IMAGE_TAG
    44. # 部署最新镜像到k8s上
    45. cd $DEPLOY_HOME
    46. kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config delete -f $PROJECT_NAME-$MICRO_SERVICE.yaml
    47. sleep 2
    48. rm $PROJECT_NAME-$MICRO_SERVICE.yaml
    49. cp sample-service-manage.sample $PROJECT_NAME-$MICRO_SERVICE.yaml
    50. sed -i "s#<IMAGE_NAME>#$IMAGE_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    51. sed -i "s#<PROJECT_NAME>#$PROJECT_NAME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    52. sed -i "s#<MICRO_SERVICE>#$MICRO_SERVICE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    53. sed -i "s#<IMAGE_TAG>#$IMAGE_TAG#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    54. sed -i "s#<NAME_SPACE>#$NAMESPACE#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    55. sed -i "s#<DOCKER_REGISTRY_HOME>#$DOCKER_REGISTRY_HOME#g" $PROJECT_NAME-$MICRO_SERVICE.yaml
    56. kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config apply -f $PROJECT_NAME-$MICRO_SERVICE.yaml --record
    57. kubectl --kubeconfig /mnt/nfs/jenkins/.kube/config get po -n $NAMESPACE
    1. #! /bin/bash
    2. source /var/lib/jenkins/deployment-document/build_script/env_variable.sh
    3. PROJECT_NAME=$1
    4. MICRO_SERVICE=$2
    5. NAMESPACE=$3
    6. packagePath=$4
    7. ###################################################
    8. # 获取当前最新部署的commit id
    9. CURRENT_IMAGE_TAG=`date +%Y-%m-%d-%H-%M-%S`-`git rev-parse --short HEAD`
    10. echo "current commit id: $CURRENT_IMAGE_TAG"
    11. ##################################################
    12. # 判断$PORJECT_NAME是否存在,不存则创建
    13. if [ ! -d "$DOCKER_BUILD_HOME/$MICRO_SERVICE/" ];then
    14. mkdir -p $DOCKER_BUILD_HOME/$MICRO_SERVICE
    15. else
    16. echo "$DOCKER_BUILD_HOME/$MICRO_SERVICE/ has exist"
    17. fi
    18. #把打包好的代码包拷贝到项目文件夹下
    19. case $packagePath in
    20. "vue-web")
    21. rm -rf $DOCKER_BUILD_HOME/$MICRO_SERVICE/*
    22. cp -r dist/* $DOCKER_BUILD_HOME/$MICRO_SERVICE/
    23. ;;
    24. "maven")
    25. echo "maven"
    26. ;;
    27. esac
    28. #写入dockerfile文件
    29. cd $DOCKER_BUILD_HOME/$MICRO_SERVICE
    30. cat > Dockerfile<< EOF
    31. FROM nginx:1.15.7
    32. ADD . /usr/share/nginx/html
    33. EXPOSE 80
    34. EOF
    35. function buildDockerImages() {
    36. #bulid项目镜像
    37. docker build -t $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG .
    38. #把构建好的项目镜像上传到镜像仓库
    39. docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWD $DOCKER_REGISTRY
    40. docker push $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE:$CURRENT_IMAGE_TAG
    41. echo "the images has been pushed"
    42. }
    43. buildDockerImages
    44. ##########################################
    45. #判断域名空间是否存在
    46. function nsIsExist() {
    47. NAMESPACE=`kubectl get ns|grep $NAMESPACE|awk '{print $1}'`
    48. if [[ ! -n "$NAMESPACE" ]]; then
    49. echo "$NAMESPACE 不存在,需要创建。"
    50. kubectl create ns $NAMESPACE
    51. echo "$NAMESPACE 创建完成。"
    52. fi
    53. echo "$NAMESPACE 已存在。"
    54. }
    55. nsIsExist
    56. # 判断要项目helm chart文件目录是否存在
    57. if [ ! -d "$DEPLOY_HOME/$MICRO_SERVICE" ];then
    58. mkdir -p $DEPLOY_HOME/$MICRO_SERVICE
    59. else
    60. echo "$DEPLOY_HOME/$MICRO_SERVICE has exist"
    61. fi
    62. # 部署最新镜像到k8s上
    63. cp -r $JENKINS_HOME/deployment-document/build_script/0helm-front-template/* $DEPLOY_HOME/$MICRO_SERVICE
    64. cd $DEPLOY_HOME
    65. sed -i "s#name:.*#name: $MICRO_SERVICE#g" $MICRO_SERVICE/Chart.yaml
    66. sed -i "s#tag:.*#tag: $CURRENT_IMAGE_TAG#g" $MICRO_SERVICE/values.yaml
    67. sed -i "s#namespace:.*#namespace: $NAMESPACE#g" $MICRO_SERVICE/values.yaml
    68. sed -i "s#name:.*#name: $NAMESPACE-pullimages-secret#g" $MICRO_SERVICE/values.yaml
    69. sed -i "s#repository:.*#repository: $DOCKER_REGISTRY/$PROJECT_NAME/$MICRO_SERVICE#g" $MICRO_SERVICE/values.yaml
    70. /usr/local/bin/helm upgrade --install $MICRO_SERVICE -n $NAMESPACE ./$MICRO_SERVICE
    71. sleep 10
    72. kubectl get po -n $NAMESPACE