Docker+Jenkins+Git+Maven自动化构建部署

前言:

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的构建日志代替了其文档作用,构建步骤详细记录在日志当中。

总而言之,自动化部署极大的提高了产品开发效率,保证了产品迭代更新的稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦社社长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值