zoukankan      html  css  js  c++  java
  • 2 使用jenkins将项目部署到k8s中

    1 前提

     1.1 使用deployment 控制器管理pod

        1.2 项目每次发布前,需要使用git打tag

    2  使用jenkins将项目部署到k8s中

    以项目admin为例:

    admin是一个java项目

    创建一个admin的item

              

        

               

    c=`mvn dependency:list | grep -i snapshot | grep -v "0.0.1-SNAPSHOT"|| true`
    if [ ${c}==""  ];then
      echo -e "33[32m[  可以正常构建  ]33[0m"
    else
      echo -e "33[31m[ 服务包含SNAPSHOT,打包失败 !  ]33[0m"
      exit 2
    fi

              

     

    #/bin/bash
    regular="^v[0-9]+.[0-9]+.[0-9]*"
    echo "发布的分支是:$branch"
    
    # git提交的hash 
    hash=`git log --pretty=format:"%h" | head -n 1`
    
    if [[ $branch =~ $regular ]];then
    # 发布的是tag con_tag=$branch-$hash else # 发布的分支 git_tag=`git tag -l --points-at origin/stable | grep -oE '^v[0-9]+(.[0-9]+)+$'` con_tag=$git_tag-$hash fi echo -e "33[32m 容器的tag是: ${con_tag}33[0m" sudo docker build -t registry-vpc.cn-beijing.aliyuncs.com/cn_genebox/laso-admin:$con_tag . sudo docker push registry-vpc.cn-beijing.aliyuncs.com/cn_genebox/laso-admin:$con_tag # 利用ansible构建 172.17.209.36是k8中的master节点
    ansible 172.17.209.36 -m script -a "/home/jenkins/shell/prd_deploy_pod.sh laso-admin $con_tag laso-admin " -u root 
    # 发版发钉钉通知 python3
    /home/jenkins/python/dingding.py ${BUILD_USER} laso-admin ${branch} ${BUILD_NUMBER}
    # 判断依赖是不是最新版本的 #python3
    /home/jenkins/python/java_rely.py ${BUILD_USER} prd-laso-admin

     prd_deploy_pod.sh 脚本内容

    [jenkins@laso-elk laso_exchange]$ cat /home/jenkins/shell/prd_deploy_pod.sh
    #!/bin/sh 
    usage() {
      echo "Usage: deploy_pod project_name hash"
      echo
      echo "  project_name        项目名字如ms_userbox"
      echo "  hash                提交记录的hash值"
      echo "  deployment_name     控制器的名字"
      echo "  -h|--help           打印本帮助信息并退出"
    }
    
    
    parse_args() {
      local optspec='h-:'
      while getopts "$optspec" optchar; do
         case "${optchar}" in
          h)
            usage # 调用usage函数 -h
            exit 0
            ;;
          -) 
           local long_val=${OPTARG#*=}
           local long_opt=${OPTARG%=$long_val}
           if [[ ! "${OPTARG}" =~ "=" ]];then
               long_val=
               long_opt=${OPTARG}
           fi
              case "${long_opt}" in
              help)
                usage #调用usage函数
                exit 0
                ;;
              hotfix)
                is_hotfix=1
                hotfix_branch=$long_val  # hotfix_branch = hotfix
                ;;
              *)
                echo "$0: illegal long option -- $long_opt" >&2 
                exit 2
                ;;
            esac
            ;;
          *)
            exit 2
            ;;
    
          esac
      done
    
    }
    
    
    parse_args "$@"
    
    deply() {
       # 判断参数的个数 
       if [ $# != 3 ];then
           usage 
           exit 0
       fi 
    # 项目的名字
    project_name=$1
    # git的hash值
    hash=$2
    # deployment的名字
    deplyment=$3
    echo "部署的项目是: ${project_name}"
    echo "项目的hash是: ${hash}"
    echo "deplyment的名字是: ${deplyment}"
    project_yaml="/k8s/prd/${project_name}/deployment-${project_name}.yaml"
    if [ -f ${project_yaml} ];then
         sed -i s%cn_genebox/${project_name}:.*%cn_genebox/${project_name}:${hash}%  /k8s/prd/${project_name}/deployment-${project_name}.yaml
        echo $project_name $hash
    else
         echo "${project_yaml}文件不存在,请检查输入的项目名 是否正确"
         exit 1
    fi
    kubectl apply -f /k8s/prd/${project_name}/
    sleep 80
    pod_num=`cat /k8s/prd/${project_name}/deployment-${project_name}.yaml | grep replicas: | awk -F ": " '{print $NF}'`
    echo "部署pod的数量是: $pod_num"
    let sleep_time=$pod_num*51
    sleep $sleep_time
    # 查看pod的状态
    ret=`kubectl  get pod  -n laso-prd | grep  ${project_name} | awk -F ' ' '{print $2}' | awk -F '/' '{if ($1 == $2) print 0; else print 1}'`
    if [[ ${ret} == '' ]];then
       echo  "没有${project_name}pod 请登录服务器查看"
       exit 1
    fi
    for i in $ret;do
      if [ $i == 1 ];then
         echo "${hash} pod 启动失败,请查看日志"
         exit 1
      fi
    done
    echo "${hash} pod 启动成功"
    
    #echo "ret=$ret"
    #if [ "${ret}" != 0 ];then
    #   echo "${hash} pod 启动失败,请查看日志"
    #   exit 1
    #fi
    
    }
    
    deply "$@"
  • 相关阅读:
    占位 CP
    占位 LR
    占位 DL
    占位 SC
    Your name ?
    占位 RK
    Gson 关于SpringMVC和json格式问题
    JDBC
    Outlook2016 2019修改默认存储路径文件夹
    Windows Server 2016 任务管理器没有了远程控制 远程桌面,能够控制其它远程用户的会话
  • 原文地址:https://www.cnblogs.com/lulin9501/p/15272230.html
Copyright © 2011-2022 走看看