上一篇:jenkins使用自定义方式结合k8s实现ci/cd-后端实战https://blog.csdn.net/fsjwin/article/details/110736945
上一篇对后端代后端流水线部署k8s做了实战记录,本文对前端vue代码做个实战记录
1. 前端代码打包的特殊点
前端需要把代码打包进nginx中,但是在nginx中测nginx.conf文件中有网关的配置。dev和prod的不一样需要单独打包。
这里有个特别重要的地方,对于dockerfile和nginx.conf文件需要做个环境的区分,在各个环境单独去打包,而不是使用dev环境打的image
新建的文件,对原有代码无入侵。
2. jenkens的配置流程
2.1 一般配置
2.2 代码下载
2.3 打包,并通知k8s去拉取,部署镜像
# docker暴露的端口 EXPOSE 7002
EXPOSEPORT='80'
# k8s 编排service 端口
NODEPORT='30002'
# 工作空间,如:/data/jenkins/workspace/blade-saber-prod
cd ${WORKSPACE}
source /etc/profile
#配置资源中心
yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global
#系统安装包
yarn install
#开始构建项目
echo '----->yarn build构建项目开始'
yarn build
echo '----->yarn build构建项目结束'
#仓库地址
registryUrl='10.1.8.151:8082'
#项目名:
projectName=blade
#服务名
serviceName=saber
#服务名
serviceTag=${BUILD_NUMBER}
#端口地址
#servicePort=8002
#环境标签
SPRING_PROFILES_ACTIVE=prod
#Dockerfile文件名
dockerfile=Dockerfile-$SPRING_PROFILES_ACTIVE
#pod的名字,如:blade-saber-prod
deploymentName=$projectName-$serviceName-$SPRING_PROFILES_ACTIVE
# 容器名字, 如blade-saber-vue
containerName=$projectName-$serviceName-$SPRING_PROFILES_ACTIVE
#镜像名字,如:10.1.8.151:8082/blade/blade-saber-vue:59
imageName=$registryUrl/$projectName/$containerName:$serviceTag
#获取容器id
echo '============删除旧容器==============='
containerid=`docker ps -a|grep -i $containerName|awk '{print $1}'`
#判断容器是否存在如果存在则删除,否则不删除
if [ ! -n "$containerid" ];then
echo "container is null"
else
docker rm -f $containerid
fi
#获取镜像id
echo '============删除旧镜像==============='
imagesid=`docker images|grep -i $containerName|awk '{print $3}'| sort | uniq`
#判断镜像是否存在如果存在则删除,否则不删除
if [ ! -n "$imagesid" ];then
echo "images is null"
else
docker rmi -f $imagesid
fi
echo '============开始打包镜像==============='
#构建docker镜像
docker build -f $dockerfile -t $imageName .
echo '============打包镜像完毕==============='
echo '============推送最新镜像开始==============='
docker login --username=admin --password=admin123 $registryUrl
docker push $imageName
echo '============推送最新镜像完毕==============='
echo '============通知k8s拉取镜像开始==============='
#k8s master ip
MASTER='10.1.33.61'
# k8s 服务器上用于存放配置的目录 推动deploy_k8s.sh和*.yaml去的目录需要推送到k8smaster上
CONF_DIR='/data/kube-conf'
# 登录k8s username
K8S_USERNAME='root'
# jenkins服务器用于存放和k8s相关文件的目录
LOCAL_CON_DIR="/data/k8s"
SH_NAME='deploy_k8s.sh'
# file name of yaml 如:k8s-prod-deploy.yaml
YAML_NAME='deploy_k8s.yaml'
SH_NAME='deploy_k8s.sh'
# transfer yaml & sh to k8s
scp ${LOCAL_CON_DIR}/${YAML_NAME} ${MASTER}:${CONF_DIR} #远程传送yaml
scp ${LOCAL_CON_DIR}/${SH_NAME} ${MASTER}:${CONF_DIR} #远程传送sh
# run k8s script
echo "+x----->"
# k8s 服务器上/data/kube-conf/deploy_k8s.给执行权限
ssh -p '22' ${K8S_USERNAME}@${MASTER} chmod +x ${CONF_DIR}/${SH_NAME}
echo "sh----->"
# k8s 服务器上/data/kube-conf/deploy_k8s.执行
ssh -p '22' ${K8S_USERNAME}@${MASTER} sh ${CONF_DIR}/${SH_NAME} ${deploymentName} ${imageName} ${REPLICAS} ${NAMESPACE} ${YAML_NAME} ${SPRING_PROFILES_ACTIVE} ${EXPOSEPORT} ${NODEPORT}
echo '============通知k8s拉取镜像结束==============='
echo '============ THE END ==============='
3. 后面和后端一模一样
不在赘述!