前言:
1.传统的开发、测试、部署方式,是由开发人员本机或打包机进行打包,将jar包提交给测试人员部署,测试通过后,再由实施人员负责部署到预发、生产环境中。中间的衔接不连贯,容易出错,而且打包、部署存在重复的工作量。自动化构建部署(CICD)就是解决该问题,将从开发到部署的一系列流程变成自动化,衔接连贯,在构建失败时能够告知开发,构建成功后能够告知测试和实施人员。
2.我们公司的自动化构建部署的具体流程则是:
开发人员将更新提交至git仓库后,Jenkins检测到仓库代码有改动,则将仓库代码拉取下来进行构建,将springboot项目构建成jar包,然后把jar包构建入基础镜像成为新镜像,并把镜像push至Docker远程仓库,构建完成后执行Shell脚本,使阿里云服务器将Docker远程私有仓库中的新镜像pull下来部署运行。
目的:
使用的是ubuntu系统,使用jenkins拉取git中的工程,构建jar包,再在已有镜像的基础上将jar包构建进去,构成新镜像,推送到Docker远程私有registry中,构建完成后执行shell脚本,将推送的最新镜像pull至阿里服务器上部署运行。如果构建失败,则通过邮件形式告知开发人员,开发人员可通过查看日志检查构建失败的原因。
实现技术:
1.Docker(解决环境变量的配置问题)
2.Jenkins(负责jar包以及docker镜像自动化构建)
3.Git(提供代码)
4.Maven(用于构建Jar包)
本地虚拟机下的准备工作
安装虚拟机
为虚拟机选择的系统为Ubuntu 18(64位),详细教程见企业文档《Ubuntu后台开发环境搭建》。
安装JDK
安装完Ubuntu系统后打开终端,使用命令安装JDK1.8
1.使用" sudo passwd root "命令创建管理员账号
2.使用" su "命令切换管理员身份
3.使用" yum search java|grep jdk "命令搜索JDK安装包,找到项目对应JDK版本
4.使用" yum install java-1.8.0-openjdk "命令安装JDK1.8
5.通过查看JDK版本以及运行状态检测是否安装成功" java -version "
安装Docker
安装完JDK1.8后,使用命令行安装Docker:
1.检查安装命令apt-get是否为最新的" sudo apt-get update "
2.使用apt-get安装命令安装Docker" sudo apt install docker.io "
3.通过查看Docker版本以及运行状态检测是否安装成功" docker version "
安装Jenkins
安装完Docker后,继续安装Jenkins:
1.使用" yum -y install jenkins "命令安装Jenkins并运行
2.打开浏览器,通过127.0.0.1:8080访问Jenkins
3.新建用户,安装默认插件
配置Jenkins
在创建Jenkins Job之前,还需要对Jenkins做一些配置才能用于构建
1.安装Jenkins后还需要手动安装的插件如下:
3.1 Maven Integration plugin:只有安装此插件,在新建Job时才能构建Maven项目
3.2 Publish Over SSH:通过ssh推送文件,并可以执行shell命令
3.3 Gitee: 用于主分支提交代码时触发构建
3.4 手动安装插件流程:
(1)首先要将插件下载站点改为国内镜像站点(否则会插件下载失败)
<1>Manage Jenkins——>Manage Puligins——>Advanced——>Update Site——>将"https://updates.jenkins.io/update-center.json"改为"http://mirror.xmission.com/jenkins/updates/update-center.json"
(2)然后下载上述所需的三个插件
<1>Manage Jenkins——>Manage Puligins——>Advanced——>Available——>在搜索框搜索三个插件选中后,点击"install without restart"——>进入安装界面后勾选"RestartJenkins when installation is complete and no jobs are running"
2.配置构建所需的maven环境:
2.1 配置maven
<1>Manage Jenkins——>Global Tool Configuration——>Maven——>Maven installations——>点击Add Maven——>填写Maven name——>勾选Install automatically选择项目对应的Maven版本
3.设置git连接
3.1 配置Gitee
3.1.2 Manage Jenkins——>Configure System——>Gitee 配置——>填写链接名——>填写Gitee域名URL:http://gitee.com——>选择证书令牌:
(1)前往https://gitee.com/profile/personal_access_tokens生成私人令牌
(2)生成新令牌
(3)填写私人令牌描述并选择权限
(4)复制密钥回Jenkins
(5)点击Add
(6)点击Jenkins
(7)选择Kind栏选中Gitee API 令牌
(8)将复制的密钥填入Gitee APIV5 私人令牌栏——>点击Add
4.设置邮件发送
4.1配置E-mail
(1) Manage Jenkins——>Configure System——>Jenkins Location——>在System Admin e-mail address栏输入发送人的邮件地址
(2) Manage Jenkins——>Configure System——>Extended E-mail Notification,配置如下:
<1>在SMTP server栏输入SMTP邮箱服务站点例如:smtp.qq.com
<2>在Default user E-mail suffix栏输入发送人邮箱后缀例如:@qq.com
<3>点击Advanced勾选Use SMTP Authentication
<4>在User Name栏填写发送人邮箱,不需要填写后缀
<5>邮件发送人进入邮箱设置,开通SMTP服务,将SMTP密钥复制至粘贴板,回到Jenkins,将密钥粘贴至Password栏
<6>在SMTP port栏填写端口25
<7>在Default Content Type栏选择默认邮箱发送格式,选择HTML,更为美观
<8>在Default Recipients栏填写默认接收邮件人的邮箱地址
(3) Manage Jenkins——>Configure System——>E-mail Notification,配置依照Extended E-mail Notification填写即可
5.连接阿里云服务器
5.1配置SSH
(1) Manage Jenkins——>Configure System——>SSH remote hosts点击Add,配置如下:
<1> 在Hostname填写阿里云服务器主机地址,例如:47.104.18.120
<2> 在Port栏填写接入端口,一般为22
<3> 在Credentials栏选择连接阿里云服务器的凭证,如果没有点击Add创建凭证
<4> 点击Check connection测试连接能否成功
(2) Manage Jenkins——>Configure System——>Publish over SSH,配置如下:
<1> 在SSH Servers栏点击Add
<2> 在Name栏填写连接用户的用户名
<3> 在Hostname栏填写阿里云服务器主机地址,例如:47.104.18.120
<4> 在Username栏填写阿里云服务器登录的用户名,例如:root
<5> 点击Advanced,勾选Use password authentication, or use a different key
<6> 在Passphrase / Password栏填写阿里云服务器登录所需的用户密码
<7> 在Port栏填写连接端口,一般为22
<8> 点击Test Configuration,测试能否成功连接
阿里云ESC服务器下的准备工作
安装Docker
阿里云安装Docker是用于将构建完成的镜像从远程私有镜像仓库pull下来运行,安装流程与上述虚拟机安装Docker一致
创建Jenkins Job
New Item——>输入Item名称,勾选构建一个Maven项目——>OK
连接git仓库获取需要构建的代码
1.General
1.1 勾选Git项目
填写项目URL——>在Gitee链接栏选中Configure System对应链接
2.Source Code Management
2.1 源代码管理
在gitRepository URL栏填写仓库地址——>在Credentials栏选择或是添加对应凭证——>点击Advanced..——>Name栏填写origin——>Refspec栏填写+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE——>Branch Specifier (blank for 'any')栏填写需要构建的对应分支
3.Build Triggers
3.1构建触发器
默认勾选Build whenever a SNAPSHOT dependency is built——>配置gitee代码提交触发构建:
(1) 勾选Gitee webhook 触发构建,需要在 Gitee webhook 中填写 URL: http://127.0.0.1:8080/gitee-project/auieo
(2) Gitee 触发构建策略栏中勾选所需的触发条件
(3) 在Gitee WebHook 密码栏点击生成将所生成的密码复制在粘贴板
(4) 进入gitee仓库点击管理找到WebHooks 设置点击添加——>在url栏输入:http://127.0.0.1:8080/gitee-project/auieo ——>在密码栏将刚刚复制的密码粘贴进去——>点击添加
(5) 点击测试,并回到Jenkins配置面板查看是否触发构建
4.Post Steps
4.1发布步骤
4.1.1点击Add post-build step选择Execute shell(用于执行shell脚本构建对应docker镜像),在Command栏输入如下命令:
(1) cd ./auieo-manage/src/main/docker (cd至用于构建docker镜像的Dockerfile文件所在的文件夹)
(2) cp ../../../target/auieo.jar ./ (将构建完成的jar包复制在Dockerfile文件所在的文件夹)
(3) sudo docker login --username=苏喔信息科技 --password=sworld0799 registry.cn-hangzhou.aliyuncs.com (登录阿里云Docker私有镜像仓库)
(4) sudo docker build -t apiproject:api . (开始构建镜像,命名为apiproject,打上api标签)
(5) sudo docker tag apiproject:api registry.cn-hangzhou.aliyuncs.com/api_auieo/api_auieo:auieo (重命名docker镜像,打上auieo标签)
(6) sudo docker push registry.cn-hangzhou.aliyuncs.com/api_auieo/api_auieo:auieo (上传标签为auieo的镜像至阿里云Docker私有镜像仓库)
4.1.2点击Add post-build step选择Execute shell script on remote host using shell(用于执行shell脚本使阿里云服务器pull下对应的Docker镜像并运行)
(1) 在SSH site栏选择相应的阿里云主机
(2) 在Command栏输入如下命令:
<1>systemctl daemon-reload (重载系统配置,防止docker服务启动失败)
<2>sudo service docker restart (重启docker服务)
<3>sudo docker login --username=苏喔信息科技 --password=sworld0799 registry.cn-hangzhou.aliyuncs.com (登录阿里云Docker私有镜像仓库)
<4>sudo docker pull registry.cn-hangzhou.aliyuncs.com/api_auieo/api_auieo:auieo (pull下最新构建的docker镜像)
<5>sudo docker run -p 443:443 -d registry.cn-shenzhen.aliyuncs.com/wilson-lao/dockerbuildmirror:auieoproject -f (运行最新构建的docker镜像)
5.构建设置
5.1 默认勾选E-mail Notification,在Recipients栏输入构建完成后所需发送构建结果的邮箱
6.Post-build Actions
6.1 构建后操作,配置发送邮箱信息
6.1.1 点击Add post-build action选择Editable Email Notification,进行如下配置:
(1) 点击Advanced setting,在Triggers栏点击Add Triggers选择发送邮件的条件,选择Always
(2) 点击Advanced,在Recipient List栏输入需要发送构建结果的邮箱
(3) 在Content Type栏选择邮件格式类型,选择Html格式,更美观
(4) 在Content栏编写邮件内容模板
(5) 在Attachments栏输入reprot\test_${BUILD_NUMBER}.html,重命名构建日志,作为发送邮件的附件
7.点击save,回到Job面板,点击Build Now进行构建,测试构建是否能够顺利完成
8.查看构建日志
8.1 鼠标移至#*(*为构建次数)上,点击下箭头,选择Console Output,查看对应的构建日志
后记
通过本次搭建Docker+Jenkins+Git+Maven自动化构建部署流程,本人对项目整体的整体部署流程理解更为透彻,也对Linux加深了解。Docker解决了项目部署时环境不一致导致的环境冲突问题,Jenkins则是实现了自动化构建的特点,将Docker等几项技术的优点相结合搭建出适合公司的自动化部署机制。手动部署容易出现错误,而自动化错误概率很低,即使出错也可通过查看构建日志轻松找到出错点。手动部署的流程往往需要记录在文档中,这个构建文档需要额外的维护时间,而Jenkins的构建日志代替了其文档作用,构建步骤详细记录在日志当中。
总而言之,自动化部署极大的提高了产品开发效率,保证了产品迭代更新的稳定。