现如今SpringBoot、Jenkins、Docker这些技术已经非常流行,SpringBoot提高了JavaEE应用的开发效率,Jenkins实现了项目的持续集成,Docker使应用的部署变得灵活。本系列文章将通过这些技术实现SpringBoot的自动化构建和部署。具体流程模拟工作中常见的场景,将代码提交至SVN,去Jenkins(部署于公司内网以访问公司的SVN服务器)触发构建项目,Jenkins拉取SVN的代码构建成Docker镜像并将镜像推送至harbor镜像仓库(部署于外网以被线上应用服务器进行镜像拉取),最后Jenkins再远程调用线上应用服务器的shell命令,使应用服务器拉取刚构建好的镜像进行部署。整个过程人工参与的部分仅有代码提交和点击Jenkins构建按钮(甚至可以让Jenkins自动检测SVN代码提交自动触发构建)。本文先介绍Docker服务、Harbor镜像仓库和Jenkins服务的部署。
一、 部署docker环境
要运行Docker容器需要先部署docker,我们使用免费的Docker CE(社区版)。这里根据需要在1到2台服务器(或虚拟机)上部署Docker,如果只是用于学习测试,可以将所有服务部署在一台服务器或虚拟机上,如果是生产环境,通常需要在Jenkins服务器和应用服务器都部署Docker服务。
有能力的建议直接看官方文档并跳过本节
https://docs.docker.com/install/linux/docker-ce/centos/
我使用的是操作系统是CentOS,对于CentOS系统,Docker官方要求使用CentOS 7.x的版本。
1. 配置yum仓库
$ 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
如果在下一步下载速度不佳,可以考虑使用阿里的Docker CE 镜像源来节约时间:
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 安装Docker
$ sudo yum -y install docker-ce docker-ce-cli containerd.io
3. 启动Docker
$ sudo systemctl start docker
4. 验证Docker
$ sudo docker run hello-world
看到以下输出,证明刚安装的Docker可以正确地拉取镜像并运行容器了。
Hello from Docker!
二、 部署Jenkins
Jenkins支持Linux包管理器安装(如yum)、war包部署和Docker容器部署。我选择使用Jenkins的官方Docker镜像部署Jenkins,不过为了在官方镜像的基础上多做两件事情,这里需要写一个Dockerfile重新打包Jenkins镜像。这里需要保证部署Jenkins的服务器上已经安装了Docker服务。
1. 编写Dockerfile
vim Dockerfile
#使用Jenkins官方镜像作为基础镜像
FROM jenkins/jenkins:lts
#将账户改为root
USER root
#安装jenkins调用容器外部docker命令时需要的依赖
RUN apt update && apt install -y libltdl-dev
2. 打包镜像
sudo docker build -t myimg/jenkins .
3. 启动Jenkins容器
run -d -p 8080:8080 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --name jenkins-container03 mkimg/jenkins
这里将Jenkins的主目录挂载到宿主机,并挂载Docker相关路径以供Jenkins调用宿主机的Docker。访问ip:8080,看到Jenkins的登录页面证明Jenkins的部署已经成功。Jenkins的配置和使用会放到下一篇文章。
三、 部署Harbor
Docker官方提供了公共仓库Docker hub,但是企业不希望公开的应用需要通过搭建私有镜像仓库来存放,Docker官方提供的registry私有仓库缺少UI界面需要额外安装,我们更愿意选择流行的Harbor来作为私有镜像仓库,它提供了易用的UI界面和管理功能。有能力的可以参照官方文档完成部署。https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
1. 安装Docker Compose
Harbor使用Docker Compose进行部署,所以需要先安装Docker Compose。可以参照GitHub https://github.com/docker/compose/releases
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
验证
docker-compose --version
2. 下载harbor联网安装版,参照https://github.com/goharbor/harbor/releases
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.4.tgz
tar -zxvf harbor-online-installer-v1.7.4.tgz
进入解压后的目录
cd harbor/
修改配置文件harbor.cfg的主机配置为实际的IP或域名
hostname = myhost
执行安装脚本
./install.sh
在浏览器中打开刚才设置的hostname,harbor后台默认使用80端口,看到登陆界面的话即为安装成功。
四、总结
至此实现自动化构建和部署所需的服务环境已经搭建完毕,下片文章将介绍具体的配置和使用,将整个流程打通。