zoukankan      html  css  js  c++  java
  • Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建

    详解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包)

    blob.png

    blob.png

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

    blob.png

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

    blob.png

    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/

    blob.png

    关闭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包已被解开。

    blob.png

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

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

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

    blob.png

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

    blob.png

    在web页面访问

    http://192.168.44.132:8888/jenkins

    弹出的对话框

    用户名:admin

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

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

    blob.png

    生产环境建议更改至其他目录,请参考我的另一篇文档 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

    blob.png

    关于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,在弹出的窗口中输入用户名和密码

    blob.png

    blob.png

    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就可以。

    blob.png

    至此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

  • 相关阅读:
    c/c++中两颗璀璨的明珠
    deepin软件中心打不开
    shell之rm -rf的别名设置
    历史命令脚本
    mysql之7xtrabackup
    python之3内置容器
    python之第一个例子hello world
    python之安装
    shell脚本练习(autocert)
    【转】nginx之逻辑运算
  • 原文地址:https://www.cnblogs.com/zgq123456/p/9862059.html
Copyright © 2011-2022 走看看