一、背景
最近需要进行服务环境治理项目,于是我把公司jenkins相关的部署流程给总结了一下。
二、jenkins操作架构图
三、详细流程
拉代码–>打包–>构建镜像–>升级pod镜像
1. 以go语言jenkins的流程梳理,以dev-bizops-svr为例
1.丢弃旧的构建
2.参数化构建-GIT-TAG
3.git拉取代码--用tag号命名${GIT-TAG}构建新的分支
4.当前分支与master分支进行比较,看是否已经合并代码
5.执行shell:
5.1:定义变量PROJECT、BUILD_PATH(构建路径)、IMAGE_ENV、IMAGE_NAME、PATH_NUM
5.2:如果BUILD_PATH下的pactket目录下不为空,说明其他项目在构建,复制BUILD_PATH下所有,到一个新目录,新路径赋值给BUILD_PATH,删除新路径packet里的所有内容。
5.3:go语言打包-->运行打包命令-->构建成功后,拷贝程序至BUILD_PATH目录。
5.4:构建docker镜像--先cd到BUILD_PATH目录,再运行docker build命令--命令行方式添加环境变量 --build-arg server_name=${PROJECT}。
5.5:将镜像push到镜像仓库
5.6:更新k8s中的镜像--kubectl set image deployment/deployment 容器名=镜像名 -n 命名空间
四、具体shell
PROJECT=bizops-svr
BUILD_PATH=/xdfapp/data/build/go
IMAGE_ENV=dev
IMAGE_NAME=re******.cn/application/${PROJECT}:TAG-${BUILD_TIMESTAMP}
PATH_NUM=0
if [ $(ls ${BUILD_PATH}/packet/ | wc -l) -ne 0 ];then
echo "其它项目在构建,正尝试新建目录构建。"
cp -a ${BUILD_PATH} /xdfapp/data/build/${PROJECT}-${BUILD_TIMESTAMP}
BUILD_PATH=/xdfapp/data/build/${PROJECT}-${BUILD_TIMESTAMP}
rm -rf ${BUILD_PATH}/packet/*
PATH_NUM=$(expr ${PATH_NUM} + 1)
fi
cd ${WORKSPACE}
export GOROOT=/xdfapp/server/go
go build -o release/bin/bizops-svr main.go
if [ $? -eq 0 ];then
echo "构建成功。"
cp -a ${WORKSPACE}/release/* ${BUILD_PATH}/packet/
else
echo "构建失败。"
exit 1
fi
cd ${BUILD_PATH}
sudo docker build --build-arg server_name=${PROJECT} -t $IMAGE_NAME .
sudo docker push $IMAGE_NAME
kubectl set image deployment/${PROJECT} $PROJECT=$IMAGE_NAME -n ${IMAGE_ENV}
if [ "${PATH_NUM}" -eq 0 ];then
rm -rf packet/*
else
rm -rf ${BUILD_PATH}
fi
|