Jenkins + maven + git 实现持续集成

前言

小编最近开发的项目 采用的是 : 前后台分离,后台只需要提供rest 风格 返回具有规则的json 数据即可,考虑到开发人员不能面对面的碰接口,想到用 jenkins 去 搭建一个 可 热部署的 架构,这样前台只需要接收到通知 外网对接口即可,后台这块也只需要通过简单的命令去部署,对开发带来了便捷。

Jenkins其实就是一个工具,这个工具的作用就是调用各种其他的工具来达成你的目的。
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins可以做到持续编译和发布软件项目,这使得开发者很容易把他们的改动集成到项目中,还让用户能更加便利的获取编译和测试版本;

一、什么是持续集成(Continuous Integration)?
持续集成(CI)是一种软件开发实践,它倡导团队开发成员协同工作,有需要的时候就对代码进行集成,不必要等到软件开发后期才开始集成。通常,每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
三、持续集成系统的组成
一个自动构建过程,包括自动编译、分发、部署和测试等。
一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器

地址http://mirrors.jenkins-ci.org/下载适合的Jenkins版本。
把得到的war包直接扔到tomcat下,启动tomcat,Jenkins就安装完毕
Global Tool Configuration配置环境
配置JDK、配置GIT、配置MAVEN
创建MAVEN项目
安装MAVEN插件:Maven Integration plugin
自动部署插件:
Deploy to container Plugin

安装和配置

Jenkins官方网址: 或者 http://mirrors.jenkins-ci.org/war/

下载 : 通用java包(.war)

到war 所在的目录下,运行: java -jar jenkins.war 或者 放到 web 容器里,tomcat jetty 都行。启动容器

访问地址 : http://localhost:8080/jenkins/ 打开后,回事一个安装页面,按照页面提示顺次安装插件即可, 之后会提示一个 注册帐号密码的页面,注册完成之后点击 注册&完成 就到了我们的主页面,后续的jdk maven 配置就是在这里进行。

如果你想删除jenkins 的话,你只需要去 root/ 找到隐藏文件 .jenkins 文件夹删除就行了,然后从启linux 服务器,想要重新安装继续上面的步骤。

这里写图片描述

如果上面这个操作你没有进行,服务器关闭了,那么当你在启动服务时他会直接让你输入帐号密码,默认:admin 密码需要你去上图中的红色 磁盘路径去vim 打开,粘贴复制即可。

这里写图片描述

选择 : 系统管理 --> 插件管理 --> 安装如下插件 :

  1. 安装MAVEN插件:Maven Integration plugin
  2. 自动部署插件: Deploy to container Plugin

**/以上那些是 小编 写着玩的,踩了很多坑,写不下了 如今终于搞出来了/

部署完成

根据上面的操作,部署一个jenkins 还是没有问题,我们先不急着继续操作,小编就是太着急,配置走了很多坑,还急着写博客,利用jenkins 我们配置持续集成,那么你就要选择了 :

jenkins + Svn + maven + tomcat
jenkins + Git+ maven + tomcat

选一个吧,要是你选择 Svn : 这篇博文会对你有帮助

要是选择 Git : 这篇博文对你有帮助

还一个这个:

不急着打开上面的链接就看,最好你有一个全局的认识在开始搞,小编最后成功了,借助了三篇博文加一个视频,结合着操作的。

重要 :

jenkins 持续集成 ,什么是持续集成?,哦 , 原来它 把 git maven jdk tomcat 都 集成到了它自己身上,说白了,就是配置进去,当然这是你自己安装的要配置,你也可以用 它 提供的功能去安装,我这里面是自己配置的。所以搞jenkins 希望你玩的透 git maven ,他俩都不懂,你也不会理解 jenkins 是怎么运作的,当然你可以照葫芦画瓢,一样能用 。只是不懂原理而已。

上面说到了配置,怎么配置 ? 在哪里配置?配置什么? 都是通过 jenkins 的插件, 我们 需要去 系统管理–》插件管理–》 已安装里面看看是否有 :

  1. Maven Integration plugin
  2. Deploy to container Plugin
  3. Git Plugin

没有的话,就去可安装的 tab 里面去搜索安装就行了,等待一会,下载很慢。

上面也说到了,我是在自己的服务器安装的maven git jdk 所以,我要在页面配置 他们三个的地址, 就是 你linux 环境变量中 : /etc/profile 里面的配置 :

系统配置–》全局工具配置–》 如下图 :

这里写图片描述

需要说明的是 : 配置的 git 目录 要指向 git 安装目录中bin/git 启动项 。

用yum 配置git 也行,命令 :yum install -y git 。 下载完了,上图中git 路径配置成:/usr/bin/git 即可。

在服务器安装git , maven jdk 等,就不说了,可以参考上面 的 哪两个博文。

说明 :

进行到了这一步,我建议各位看官先不要着急动手, 再来说道说道, git 用来干什么的?maven 用来干什么的? jdk ? tomcat?

我们需求就一个 : 利用jenkins 完成部署, 好听点叫 “自动化部署” 。

所以 : jenkins 要 从git 拉取项目, 要用 maven 去 下载jar包, 要用maven 去 打jar 或者war 包, 要配置tomcat webapps 路径 去把 打包好的war 传承传输到 webapps 里面,还要控制命令删除老版本,重启tomcat(还涉及到读写权限)。我一通乱搞出现了没有权限的异常之后,我就 又安装了个ssh 插件到 jenkins 里面,配置了 tomcat所在服务器的 ssh 登录信息,单纯的讲,这个插件应该可有可无。

继续搞起 :

创建一个maven 项目,点击首页的 构建item :

这里写图片描述

源码管理

这里写图片描述

构建触发器

这里写图片描述

构建Email 通知,其他的看你需求了,我没有配置 。

构建完以上 所有操作,可以保存了,然后点击 :

这里写图片描述

点击 : 立即构建,会在 图中左下角 有一个加载的过程,可以点击加载处有一个 select 选项,点击控制台 可以看到加载 日志信息 :

这里写图片描述

Maven 控制台日志 :

这里写图片描述

Jenkins 控制台日志 :

这里写图片描述

到了这里如果 你的日志 最后是 SUCCESS 的话,那么要恭喜你了,你 的项目用jenkins 构建完了,可以继续配置tomcat 信息,让项目发布到远程的tomcat 中,如果没有,根据日志异常信息解决你 构建的问题,

**部署到远程tomcat **

我们点击 该项目的 左侧tab 里面的配置 ,滑倒最下面 :

这里写图片描述

配置 : 构建后操作如上图。 说明的是 : 你要给tomcat 配置角色和权限 :
这里需要进行设置的是远程Tomcat的管理员信息,修改远程Tomcat容器下的conf–tomcat-users.xml文件,在内添加下边的内容:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager,manager-script,manager-gui"/>

// 采坑 : 我用的是 tomcat 8 .45.x 配置还是 403 配置的用户名没有写权限,配置了 jenkins 的ssh , 一顿搜索,最后换成了 tomcat 8.0.x 版本, 配置上面的角色和权限,好用 ,mmp 。(跟 ssh 插件无关) , 第二点: 你的tomcat 要处于 启动状态。 
// 异常信息
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:704)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.list(TomcatManager.java:876)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.getStatus(TomcatManager.java:889)
	at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:173)
	... 17 more
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://47.95.200.10:80//manager/text/list
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
	at org.codehaus.cargo.container.tomcat.internal.TomcatManager.invoke(TomcatManager.java:571)
	... 20 more 

配置完成之后,保存,继续回到上一面选择 “立即构建” ,控制台最后的结果要是有 :

部署到tomcat成功日志

这里写图片描述

Deploying /root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war to container Tomcat 8.x Remote with context znf4-web-boss
  Redeploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
  Undeploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
  Deploying [/root/.jenkins/workspace/znf4/znf4-web-boss/target/znf4-web-boss.war]
Finished: SUCCESS

提示 :Finished: SUCCESS 去你 tomcat 安装目录下的webapps 看看是否有 maven打包好的 挖人 跟 解压缩之后 文件夹。去浏览器测试你的项目把。

所谓的自动化部署,持续集成 你们都理解了把?? 有定时任务当然可以自动化, 整个流程,都是jenkins 去 协调 git maven jdk , tomcat 我们只需要把指令告诉 jenkins 即可, jenkins 当然也就是所谓的 “持续集成”。

好人做到底 ,视频教程,永久连接,不嫌麻烦:
链接: https://pan.baidu.com/s/1boXDToj 密码: fdg9

追加 : 配置邮件服务

话不多说,直接粘贴出来配置 :

1). 肯定要先安装插件,虽然有默认,但是我用的2.9版本的jenkins 系统设置中有 相关配置,但是在项目的构建后操作里面并没有默认邮件插件的配置 。

系统配置–》插件管理 去下载插件: Email Extension Plugin

系统配置–》系统配置 --》找到 Extended E-mail Notification:

部分一

这里写图片描述

部分二

这里写图片描述

Default Subject	: 构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

Default Content : 
//文本
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
    offset="0">
    <table width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <tr>
            <td>
                <h2>
                    <font>Hi C M L , 以下是${PROJECT_NAME}项目在Jenkins异常情况邮件通知</br>
                             (本邮件是程序自动下发的,请勿回复!)</font>
                </h2>
            </td>
        </tr>
        <tr>
            <td>
                <br />
                <b><font color="#0B610B">构建信息</font></b>
               <hr size="2" width="100%" align="center" />
             </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>项目名称 : ${PROJECT_NAME}</li>
                    <li>构建编号 : ${BUILD_NUMBER}</li>
                    <li>构建状态 : ${BUILD_STATUS}</li>
                    <li>触发原因 :${CAUSE}</li>
                    <li>构建日志 : <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                   
                </ul>
            </td>
        </tr>
 <tr>
        <tr>
            <td><b><font color="#0B610B">构建日志:</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td><textarea cols="140" rows="30" readonly="readonly"
                    style="font-family: Courier New">${BUILD_LOG}</textarea>
            </td>
        </tr>
        <tr>
              <td><b><font color="#0B610B">变更集:</font></b>
              变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
        </tr>

    </table>
</body>
</html>


配置上面那基础即可, 要是想测试的话,可以用 默认插件进行测试 :

这里写图片描述

测试没问题的话,证明你上面配置 Extended E-mail Notification 基本设置也没问题,最后一件事去 项目里面配置上我们刚才系统里面配置的。

找到:项目–》配置–》构建后操作 --选择添加构建后的操作步骤 :

这里写图片描述

配置如下 :

接收列表配置接收人, cc: 开头,多个人之间 用 ,号隔开。除了这个列表所有信息都是默认信息,
这里写图片描述

需要配置的第二部分 :
这里写图片描述

注意事项:

  1. 设置发送端的邮箱要开启 smtp 等服务(一共那么几个,全都开开就完了),设置的密码不是你邮箱登录的密码,是开启服务后,会给你一个授权码。
  2. qq 邮箱作为 邮件的发送端,个人测试,默认的jenkins 插件测试好用,但是在项目里面也没有设置 默认插件的选项,所以 用默认测一下,配置的信息有没有错误可以,除了默认就是我上面用到的插件,可以配置,但是我配置的是我qq 邮箱发送到我的qq 邮箱,构建之后,提示发送成功,邮件根本没收到。 网上一顿查,说要用企业邮箱,我换成了我 腾讯企业邮箱(当然也需要开启服务,拿到授权码,自行百度),企业邮箱给 私人qq 邮箱发短信,成功。

猜你喜欢

转载自blog.csdn.net/qq_16681279/article/details/78590317