在软件开发过程中,如果我们每一次提交的代码都能够进行一次完整的编译、测试、打包、发布,就能及早发现问题、及早修复,在保证代码质量的同时让产品快速迭代。这就是持续集成(CI)、持续部署(CD)的好处。
目前 CI/CD 的方案有很多,本文将展示一个用 Docker + Jenkins 实现的完整过程。
本文的 CI/CD 流程
开发人员提交代码到自己的分支并 push 到远程仓库 ==>
触发远程仓库(GitHub/GitLab)的 Webhooks ==>
Jenkins 接到通知自动执行之前准备好的一个流程(克隆代码,对代码进行编译、测试、打包,没有问题后会执行 docker 命令进行镜像构建)==>
最终发布到测试服务器中。
环境说明
- 本文选用的测试环境是阿里云的服务器,所以全程也是在服务器上操作的,
无需本地安装 docker
,当然在本地操作也是可以的。 - 本文选用的远程代码库是
Gitlab
仓库。 - 本文中所用的
Jenkins
也是用的 docker 版。
步骤1:
创建springboot项目
步骤2:
创建Jenkins项目maven类型
步骤3:
配置 Webhooks
步骤4:
编写自动任务脚本进行 CI/CD
#!/bin/bash
set fileformat=unix
APP_PATH="/usr/hj/apps/hmall-service-auth-jwt"
APP_NAME="hmall-service-auth-jwt"
IMAGE_NAME=${APP_NAME}
CONTAINER_NAME=${APP_NAME}
cp /var/lib/jenkins/workspace/${APP_NAME}/target/${APP_NAME}.jar ${APP_PATH}
echo "删除之前的镜像和容器"
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
docker rmi ${IMAGE_NAME}
echo "构建镜像"
cd ${APP_PATH}
docker build -t ${IMAGE_NAME} .
echo "发布应用"
docker run -d -p 9001:9001 -e "spring.profiles.active=test" ${APP_NAME} --name ${CONTAINER_NAME} ${IMAGE_NAME}