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 "$@"
浙公网安备 33010602011771号