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 "\033[32m[  可以正常构建  ]\033[0m"
else
  echo -e "\033[31m[ 服务包含SNAPSHOT,打包失败 !  ]\033[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 "\033[32m 容器的tag是: ${con_tag}\033[0m" sudo docker build -t docker得仓库/laso-admin:$con_tag . sudo docker push docker得仓库/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 "$@"

 

posted @ 2021-09-15 14:55  木木霖  阅读(324)  评论(0)    收藏  举报