背景
很多开发同学都忙于写代码,但是对项目发布的整个流程不是很清楚,本文基于CI/CD的思想,结合Jenkins,docker,maven搭建一个自动化的发布流程,并加入代码质量检测,希望通过这个流程,能给开发小伙伴一个大概的CI/CD概览,同时也反过来思考怎么去写好代码。
目标
本次demo的目标输出结果为
- 本地推送代码后自动触发jenkins构建流程
- Jenkins展示javadoc, jxr, projectinfo等site阶段常规文档
- Jenkins展示测试结果
- Jenkins展示测试覆盖率
- Jenkins展示 Checkstyle结果
- Sonar server展示结果
- 服务在docker 容器中自动启动
大家可以对着这些目标验证自己是否成功。
前期准备
知识准备
- 基本了解docker的基本操作,用于搭建环境,我会把所有代码都贴出来,但是为了方便排查问题,至少过一遍官网的quick start.
- 熟悉maven,包括pom标签,lifecycle, dependency机制等,这部分对于理解整个流程是最重要的
- jenkins界面操作,这个可以等搭建完成后自己先点点看
如果没有上面的知识储备,理论上只要照着做,也能成功,但出了问题可能无法解决,可以在下方留言寻求帮助
硬件要求
实验环境为2台2核2G linux centos,SonarQube 和Jenkins对系统负载有点要求,所以将这俩分开来搭建。即现有2核2G server-a, server-b两服务器,下面以此代称。
注:如果选择都装在同一台服务器上,后面执行sonar分析的时候会遇到容器内网络访问问题,下面也会进行补充说明,但是对于docker不熟悉的同学还是建议分开来,避免学习成本。
软件安装
- docker(server-a, server-b 都需安装)
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
此部分为单纯安装docker,和官网上是一样的,有问题可以看下官网。
service docker start
启动守护线程
2.Jenkins(server-a安装,可以和下面的SonarQube搭建同时进行,节省时间)
docker run -p 9010:8080 -p 50000:50000 -u root -d \
-v $(which docker):/usr/bin/docker \
-v /opt/data/jenkins-data/home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
设置web访问端口9010,-v volume挂载命令,将容器内资源映射到host。第1个v和第3个v的目的是将host docker映射到容器内部,这样在jenkins内