详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成

一:前言

1. Jenkins

jenkins版本大全http://mirrors.jenkins-ci.org/

1.1 Jenkins持续集成简介

持续集成(Continuous Integration)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。本文正是从持续集成的基本概念入手,通过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境。

Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。

1.2持续集成意义

1) 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;

2) 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;

3)  持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

1.3持续集成组件

1)  一个自动构建过程,包括自动编译、分发、部署和测试;

2)  一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库;

3)  一个jenkins持续集成服务器。如下123.57.11.203服务器就是一个配置简单和使用方便的持续集成服务器。

2.Maven

1)Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件.

2)Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。能够很方便的帮你管理项目报告,生成站点,管理JAR文件等。

3.Tomcat

1)Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

2)配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

4.SVN

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

要注意的是SVN设计的时候只考虑了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。

5.Apache

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

apache与Tomcat的区别

Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet)。Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp及java的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等等。Apache和Tomcat是独立的,在通一台服务器上可以集成。Apache只支持静态网页,但像asp,php,cgi,jsp等动态网页就需要Tomcat来处理。
打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。
Apache和Tomcat整合使用:如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求;因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销 。

二:下载网址及安装环境

1.下载网址

https://jenkins.io/download/      jenkins.war(WAR包)

https://pkg.jenkins.io/redhat/     Jenkins (RPM包)

https://pkg.jenkins.io/debian-stable/   Jenkins (DEB包)

http://maven.apache.org/download.cgi   Maven下载

https://tomcat.apache.org/download-80.cgi  Tomcat下载

http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK下载

2.本案例安装环境

OS:Ubunutu 17.04

IP:192.168.44.132 (Tomcat+JDK+Jenkins+Maven)

IP:192.168.44.133 (SVN+Apache)

jenkins.war                         本案例是结合Tomcat使用,使用war包,未使用deb包

apache-maven-3.5.2-bin.tar.gz

apache-tomcat-8.5.24.tar.gz

jdk-8u151-linux-x64.tar.gz

SVN和Apache                    SVN源码非常麻烦,建议apt-get安装,Apache也用apt-get安装

三:安装软件

IP:192.168.44.132

tar zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/

tar zxvf apache-tomcat-8.5.24.tar.gz -C /usr/local/

tar zxvf apache-maven-3.5.2-bin.tar.gz -C /usr/local/

vi /etc/profile

设置Java变量

export JAVA_HOME=/usr/local/jdk1.8.0_151

export JRE_HOME=/usr/local/jdk1.8.0_151/jre

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/jdk1.8.0_151/bin

export CLASSPATH=./:/usr/local/jdk1.8.0_151/lib:/usr/local/jdk1.8.0_151/jre/lib

设置maven变量

export MAVEN_HOME=/usr/local/apache-maven-3.5.2
export PATH=${MAVEN_HOME}/bin:${PATH}

刷新变量

. /etc/profile

查看Java信息

root@ubuntu:/usr/local# java -version

java version "1.8.0_151"

Java(TM) SE Runtime Environment (build 1.8.0_151-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

查看maven版本

root@ubuntu:/usr/local# mvn -v

Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)

Maven home: /usr/local/apache-maven-3.5.2

Java version: 1.8.0_151, vendor: Oracle Corporation

Java home: /usr/local/jdk1.8.0_151/jre

Default locale: en_HK, platform encoding: UTF-8

OS name: "linux", version: "4.10.0-19-generic", arch: "amd64", family: "unix"

测试Tomcat是否正常

/usr/local/apache-tomcat-8.5.24/bin/startup.sh

浏览器窗口输入: http://192.168.44.132:8080/

关闭Tomcat

/usr/local/apache-tomcat-8.5.24/bin/shutdown.sh

jenkins的配置

mkdir -p /data/postmall/tomcat/webapps

mv /usr/local/jenkins.war /data/postmall/tomcat/webapps/

本例是更改了Tomcat默认端口为8888,然后把appBase路径更改为/data/postmall/tomcat/webapps,如下图,更改后重新启动Tomcat即可,在/data/postmall/tomcat/webapps下可看到多了一个jenkins的目录,war包已被解开。

Tomcat中appBase,这个目录表示:
1 这个目录下面的子目录将自动被部署为应用。
2 这个目录下面的.war文件将被自动解压缩并部署为应用

公司里的测试环境一般是一个容器下跑多个项目,生产环境是一个容器跑一个项目。

给大家截图看下我们公司的测试环境

给大家截图看下我们公司的生产环境

在web页面访问

http://192.168.44.132:8888/jenkins

弹出的对话框

用户名:admin

密码:复制initialAdminPassword中的加密字符串

文件默认在安装用户的/root/.jenkins/secrets/initialAdminPassword中,并且是加密的方式存放,本例用的是root用户。

生产环境建议更改至其他目录,请参考我的另一篇文档 http://blog.51cto.com/12943999/2054791

至此192.168.44.132软件安装完成。

IP:192.168.44.133

一:安装软件

apt-get install apache2

apt-get install subversion

apt-get install libapache2-svn

完成以上安装,可以直接访问apache的主页,如http://localhost/

命令行下curl -I -m 15 -o /dev/null -s -w %{http_code} localhost

关于curl的用法,请参考我的另一篇文档 http://blog.51cto.com/12943999/2057858

二:SVN的配置

1.建立svn仓库

1). 建立svn目录:mkdir -p /home/.svn/svnrepos/project (使用隐藏目录,更安全)

2). 创建仓库project:svnadmin create /home/.svn/svnrepos/project,执行完毕后project目录有svnadmin创建的目录和文件

2.配置和管理svn

1)仓库的配置文件在/home/.svn/svnrepos/project/conf/下,先备份配置文件。注意:下面配置项的行都要顶格,否则会报错。

cd /home/.svn/svnrepos/project/ && mkdir conf.bak && cp -rf conf/* conf.bak/ && vi conf/svnserve.conf

配置项在[general]下:

anon-access:匿名用户的权限,可以设置为read,write和none,默认值read。不允许匿名用户访问:anon-access = none

auth-access:认证用户的权限,可以为read,write和none,默认值write。

password-db:密码数据库的路径,去掉前边的#。

authz-db:认证规则库的路径,去掉前边的#。

realm = /home/.svn/svnrepos/project 仓库的目录,去掉前面的#,默认不修改也行。

2)配置passwd文件

这是每个用户的密码文件,比较简单,就是“用户名=密码”,采用的是明码。例如:

allen=111111

bllen=222222

ellen=333333

3)配置authz文件

[groups] section:为了便于管理,可以将一些用户放到一个组里边,比如:owner=allen,bllen

groups下边的sections表示对一个目录的认证规则,比如对根目录的认证规则的section为[/]。设置单用户的认证规则时一个用户一行,在末尾添加,例如:

[/]

allen=rw   #allen对根目录的权限为rw

bllen=rw       #bllen对根目录的权限为rw

ellen=r         #bllen对根目录的权限为r

如果使用group,需要在group名字前加@,在末尾添加

[/]

@owner=rw  #group owner中的用户均为rw,等价于上边的allen=rw,bllen=rw

*=r                    #除allen和bllen之外的所有用户为只读

3.启动和停止svn服务

1). 启动:

从svnrepos目录启动,svnserve -d -r /home/.svn/svnrepos/project,根目录[/]是project

2). 测试访问:

在浏览器输入svn://192.168.44.133,在弹出的窗口中输入用户名和密码

3). 停止:

killall svnserve

简言之,每个仓库的根目录(/)就是自己的起始目录; [/]适合于单仓库的方式 ,不能跨越仓库设置权限。

客户端SVN的使用请看我的另一篇文章 http://blog.51cto.com/12943999/2053553

如果启动SVN不能访问,检查配置文件里用户名密码是否正确,也可以尝试在设置-已保存数据里把已保存的记录全部删除,再尝试。

4). 修改端口

修改apache2端口

root@ubuntu:/etc/apache2# vi ports.conf

Listen 端口    #你想要的端口

<IfModule ssl_module>

Listen 443

</IfModule>

<IfModule mod_gnutls.c>

Listen 443

</IfModule>

如果你想修改SVN默认的端口

重新指定一个端口号(默认端口3690)比如修改为3691
svnserve -d –listen-port 3691 -r /home/.svn/svnrepos/project

配置完毕重启/etc/init.d/apache2 restart

例如:把333.txt放到test文件夹,尝试提交则提示验证失败,因为我们给ellen用户的是读取权限,不能写入,用allen和bllen就可以。

至此192.168.44.133软件安装完成。

提供几个写的不错的博客链接,大家可以看一下,互相学习,共同进步。

jenkins 安装与配置

http://blog.51cto.com/kaliarch/2050862

jenkins 用户权限配置

http://blog.csdn.net/ruisheng_412/article/details/8083035

jenkins 分布式配置

http://blog.sina.com.cn/s/blog_5d157a1d01017mut.html

Maven配置详解:那么请进

http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html

Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建的更多相关文章

  1. Jenkins+maven+Tomcat+SVN一键自动打包部署应用到服务器

    今天请教了大神,终于把jenkins给搞明白了 现在做下笔记,防止自己老年痴呆又忘了怎么配置 (截图可能不够清晰,有不清楚的随时评论打call) 机器配置: 安装配置规划 机器 192.168.169 ...

  2. Jenkins+Maven+SVN快速搭建持续集成环境(转)

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...

  3. Jenkins+MSbuild+SVN实现dotnet持续集成 快速搭建持续集成环境

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建dotnet持续集成环境 一.准备工作 1.系统管理-->管理插件-->可选插件中找到MS ...

  4. Framework项目持续集成(jenkins)及集合SonarQube

    目录 Framework项目持续集成及集合SonarQube - 前言 CI/CD是什么 -- jenkins 什么是sonarqube?什么是CodeReview? 什么是sonarqube? 什么 ...

  5. Jenkins构建Android项目持续集成之findbugs的使用

    Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...

  6. Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

    目前公司开发的项目已经部署到服务器上,部署项目的测试环境和生产环境,加上每个项目n个服务,于是我就 , 骚就是骚,但是就是太累了,于是花点时间研究了一下Jenkins. Jenkins的作用和它的lo ...

  7. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  8. Jenkins在Windows系统dotnet平台持续集成

            之前写过一篇文章是在CentOS上构建.net自动化编译环境, 今天这篇是针对于Windows平台的环境.        Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平 ...

  9. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

随机推荐

  1. android开发 MyEclipse下测试连接MySQL数据库

    1.首先要加载MySQL驱动包. 步骤:右击项目找到build path->configure build path->libraries——>add External JARs添加 ...

  2. 【转】 Pro Android学习笔记(四九):ActionBar(2):Action图标区

    目录(?)[-] ActionBar的隐藏和现实 ActionBar的action图标区 ActionBar的隐藏和现实 ActionBar bar = getActionBar();bar.hide ...

  3. binlog之二:怎么样安全删除mysql下的binlog日志

    删除binlog方法 第一种方法: mysql> show binary logs; 查看mysql bin-log日志,除了这个以外的,其它都可以使用删除.mysql> purge bi ...

  4. get and set

    (function () { function Student(name, age, gender) { this._name = name; this._age = age; this._gende ...

  5. Lua常用API

    转自:http://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 1.  建一个新表 void lua_createtable (lua ...

  6. C语言 mmap()函数(建立内存映射) 与 munmap()函数(解除内存映射)

    mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和, 最后一个页不被使用的空间将会清零.mmap在用户空间映射调用系统中作用很大. 条件 mmap()必 ...

  7. ABP源码学习目录

    ABP源码理解笔记 之前看过abp源码,但是时间久了很多也不记得了,所以近期打算重新看一遍,顺便做下笔记. 目录如下: Abp 框架启动流程分析 模块系统 依赖注入 模块配置 系统设置 工作单元的实现 ...

  8. BLUETOOTH_DEVICE_INFO 函数

    typedef struct _BLUETOOTH_DEVICE_INFO { DWORD dwSize; BLUETOOTH_ADDRESS Address; ULONG ulClassofDevi ...

  9. Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder

    1.数组线性表ArrayList 数组一旦定义则不可改变大小.ArrayList可以不限定个数的存储对象.添加,插入,删除,查找比较数组更加容易.可以直接使用引用类型变量名输出,相当于toString ...

  10. ansible一键部署LAMP

    一.实现ansible跟节点间无密码访问,不会配置的请看 文章 . 二.创建目录 $ mkdir -p playbooks/{files,templates}   三.创建php测试文件index.p ...