`
kavy
  • 浏览: 887957 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)

 
阅读更多

前言

    但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端。A和B都习惯使用SVN作为代码管理工具,他们分别开始工作,一个功能完成后会提交到SVN,以便对方能够使用。一天B告诉A,我的某个功能完成了,提交到SVN,你更新下来试一下。A便从SVN更新下来代码,结果一试,我檫报错,于是告诉B你的代码有问题,B检查了一下确实有问题,然后B经过1个小时修改后,重新上传到SVN,A更新下来可以使用了。又过了几个小时,A发现B的代码仍然有问题,B检查了半天,没找到问题所在,后来开发组长检查他们的代码发现是两个人使用不同版本的jar包导致的,这个问题确认难以发现,A把jar包的版本弄得和B一样,A和B又开始继续工作。终于有一天项目完成了,需要发布程序,这时A从自己的开发环境上编译一个版本,把他上传到服务器上,程序运行的前几天比较稳定,后来A有点急事请假了,但服务器上的程序这时好像出现了问题,这时B只能使用自己的电脑调试、解决问题并试着发一个版本,但因为他平时做后端,对版本发布不是很熟悉,又搞了半天终于弄好了。项目上线了,稳定运行了半年,后来A、B先后离职了,新来的C负责维护这个项目,尽管A、B在离职前做了一些工作交接,但当C真正接手的时候才发现头大,我檫居然注释都没写,有没有这么坑的,由于C开始硬着头皮看代码,发现代码中各种飘逸写法,各种为了临时需求而打的补丁,C几乎抓狂。

    以上的例子有点夸大,但或多或少都可能遇到过,我们需要一种规范来约束这个开发过程,使开发过程严格有序的进行。

从问题出发

就以上面这个例子,我们看其中暴露出了哪些问题:

1、团队彼此协作不流畅,出现彼此阻塞的情况;

2、使用的类库版本不统一,造成难以估计的风险;

3、代码未经严格测试就上传,造成不断的返工;

4、版本发布规范欠缺,版本质量不能保证;

5、代码质量低,其他人难以接手。

    团队开发时,我们常常约定好彼此之间的接口规范,然后开始各自开发,开发完成后,按照接口规范对接起来,这是一个理想的流程,但现实往往不那么顺利,问题常常在于,接口规范可能根据需求变化而经常变更,而且在实际对接时经常发现诸多问题。我们无法通过工具来解决这些问题,只能要求开发人员在制定接口规范时,为可能变更的需求多一些扩展,在开发时多考虑诸多素质,尽量将减少对接过程中的问题。下面将讲述如何使用Maven和Nexus保证开发人员引用统一的类库版本,以及如何将自己开发的模块上传至Nexus服务器,以提供给其他模块引用。

关于Maven和Nexus的搭建在Maven实战(Maven+Nexus建立私服【Linux系统】)中已经介绍过,在此介绍下主要步骤:

1、下载maven(读:妹吻)和nexus(读:耐克色儿丝):

http://maven.apache.org/download.cgi

http://nexus.sonatype.org/downloads/

2、将下载的nexus放置到linux服务器解压并启动:

 

cd /data/program/nexus-2.3.1-01/bin/jswll

image

选择自己的系统并进入:

image

启动nexus

./nexus start

image

nexus启动成功,访问:http://192.168.6.204:8081/nexus/

image

3、将下载的maven解压放置在开发机上(windows),并配置conf目录下的setting.xml文件:

(1)在<settings><profiles></profiles></settings>节点之间添加配置:

<profile> <id>dev</id> <repositories> <repository> <id>local-nexus</id><url>http://192.168.6.204:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots><enabled>true</enabled> </snapshots> </repository> </repositories> </profile>

接着在<settings></settings>节点之间添加配置:

<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>

以上配置好了连接Nexus私服。

(2)安装eclipse的m2eclipse插件,并配置maven。

m2eclipse的安装地址:http://m2eclipse.sonatype.org/sites/m2e(安装过程略)

安装完成后配置maven:

image

image

配置eclipse的maven为本地下载的maven地址。主要为了方便配置和版本管理。

至此,nexus和maven就搭建配置完成了,下面我们要利用这个环境解决两个问题:

1、不同的模块项目都使用统一的类库版本;如spring都使用3.1.2.RELEASE,log4j都使用1.2.17。这样避免因为jar包版本的不同,引发的诸多问题。

2、模块开发完毕后,将编译的库文件发布到nexus私服上,以便其他模块引用。

这里说一下maven的一个特性,继承。简单来说继承就是先建立一个父项目,其他项目如果继承这个父项目,就可以继承这个项目定义的库文件及版本。利用这个特性,我们可以让多个模块都继承一个父项目,而在父项目中定义好类库的版本,这样所有模块都使用统一的类库文件。例如:

建立名为maven-parent的父项目,pom配置为:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cnblogs.leefreeman</groupId>
    <artifactId>maven-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <!-- junit -->
        <junit.version>4.10</junit.version>
        <!-- servlet -->
        <servlet-api.version>2.5 </servlet-api.version>
        <!-- log4j -->
        <log4j.version>1.2.17 </log4j.version>
        <!-- commons.codec -->
        <commons.codec.version>1.7</commons.codec.version>
        <!-- maven-support -->
        <maven-support.version>0.0.1-SNAPSHOT</maven-support.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- commons包 -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons.codec.version}</version>
            </dependency>
            <!-- servlet -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>${servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

这个pom定义了一些类库以及它的版本。

然后再建立模块项目:maven-sample(web项目)、maven-support(支撑模块,包括一些工具类以及业务封装,提供给maven-sample引用)。

maven-sample的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.cnblogs.leefreeman</groupId>
        <artifactId>maven-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>maven-sample</artifactId>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </dependency>
    </dependencies>
    <build>
        <finalName>maven-sample</finalName>
    </build>
</project>

maven-support的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.cnblogs.leefreeman</groupId>
        <artifactId>maven-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>maven-support</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
    </dependencies>
</project>

通过以上配置,maven-sample和maven-support引用的jar包,都会使用相同的版本:

image

接下来我们解决协作开发的问题,maven-support开发完毕之后,将之发布到nexus服务器,以便maven-sample可以引用。我们需要3步:

1、本地maven的conf目录下的setting.xml,在<servers></servers>节点之间添加:

<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>

2、在maven-support项目的pom.xml中,<project></project>节点之间添加:

<!-- 构件部署仓库 -->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>发布版本仓库</name>
            <url>http://192.168.0.109:8081/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>快照版本仓库</name>
            <url>http://192.168.0.109:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

3、对maven-support项目进行编译,并执行发布命令:

image

image

可以看到maven-support已经成功发布到nexus私服中:

image

image

这样maven-sample就可以引用maven-support模块,而开发maven-support的人则可以继续开发,持续发布新版本。

image

小结

    本文主要介绍maven和nexus的环境搭建,以及怎么使用maven和nexus统一管理库文件和版本,怎么讲自己的模块上传至nexus私服,供其他模块引用。这样我们基本解决了两个问题:

1、团队彼此协作不流畅,出现彼此阻塞的情况;

2、使用的类库版本不统一,造成难以估计的风险;

下一篇将使用jenkins、svn、tomcat以及sonar解决自动化测试、自动化版本发布、代码质量检查等问题。

 

http://www.cnblogs.com/leefreeman/p/4211530.html

 

分享到:
评论

相关推荐

    持续集成环境maven+nexus+jenkins+svn搭建

    "持续集成环境搭建" ...搭建一个完整的持续集成环境需要使用多种工具和技术,例如 Maven、Nexus、Jenkins 和 SVN 等。通过使用这些工具和技术,我们可以自动化构建、测试和部署软件,从而提高软件的质量和开发效率。

    使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境

    本篇将详细介绍如何利用Maven、Nexus、Jenkins、Svn、Tomcat和Sonar搭建一个完整的持续集成环境。 首先,Maven是Java项目管理和构建工具,通过POM(Project Object Model)文件管理项目依赖关系,提供了一种标准化...

    Jenkins+Maven+Windows+svn+sonarqube持续集成平台搭建图文指南

    Jenkins+Maven+Windows+svn+sonarqube持续集成平台搭建图文指南

    Jenkins+sonar+maven+svn+tomcat集成

    搭建一个持续集成的环境,并且能够检测代码的质量,使你的Java开发更加便捷与智能,大大地提高开发效率,你值得拥有

    基于Jenkins-sonar-maven-svn-tomcat的集成部署

    通过以上步骤,我们成功地搭建了一个基于 Jenkins、SonarQube、Maven、SVN 和 Tomcat 的集成部署环境。这不仅有助于自动化软件构建和测试过程,还能够提升代码质量,并实现快速、稳定的软件发布。

    Windows环境Tomcat+Jenkins+SVN+SonarQube.pdf

    本文将详细介绍如何在Windows操作系统上搭建一套完整的集成开发环境,包括Tomcat服务器、Jenkins持续集成工具、Subversion(SVN)版本控制系统以及SonarQube代码质量管理平台。这套环境对于持续集成、代码质量管理...

    Jenkins+svn+maven+SonarQube+MySQL配置文档

    持续集成,代码审查配置

    jenkins持续集成环境搭建步骤

    ### Jenkins 持续集成环境搭建详解 #### Jenkins 概述 Jenkins 是一款非常流行的开源持续集成(CI)和持续部署(CD)工具,它能够帮助开发团队自动化完成软件的构建、测试以及部署过程。借助于其强大的插件生态系统...

    sonar与maven的集成使用说明

    #### 一、Sonar简介与本地环境搭建 Sonar是一款开源的代码质量管理工具,它支持多种语言,并且能够帮助开发团队进行持续的代码质量检查。Sonar可以自动地对源代码进行分析,提供诸如代码复杂度、重复率、bug数量等...

    Jenkins-sonar持续集成使用文档

    ### Jenkins-SonarQube 持续集成使用文档 #### 一、Jenkins与SonarQube简介 - **Jenkins**:是一款开源的持续集成工具,支持自动化构建、测试和部署等流程,适用于各种编程语言和构建环境。通过插件机制,Jenkins...

    jenkins详细使用文档

    jenkins 持续集成自动部署可以使用 Sonar 任务来实现。Sonar 任务可以对代码进行分析和检查,提供了代码质量和安全性报告。 八、jenkins 执行 Sonar 任务 jenkins 执行 Sonar 任务可以使用 Sonar 插件来实现。...

    sonar+Jenkins 构建代码质量自动化分析平台.doc

    Sonar与DevOps工具链的深度整合使得它可以无缝对接Jenkins、TFS/VSTS、TeamCity、Bamboo等持续集成引擎,以及git、svn、cvs等源代码管理工具。 在搭建Sonar和Jenkins的自动化分析平台时,首先需要确保满足一定的...

    jenkins 持续集成

    Jenkins是一款开源的持续集成(CI)服务器,用于自动化各种软件开发过程,包括构建、测试和部署。它支持多种版本控制系统,如Git,SVN等,并可以与其他工具,如Maven、Ant配合使用。通过定时或者触发事件自动执行...

    jenkins入门指导资料

    9. Jenkins插件管理:Jenkins的插件管理功能强大,支持Jenkins与Maven、Git、SVN、Sonar、Gerrit、Email-ext等工具的集成。通过插件管理可以扩展Jenkins的功能,支持更多复杂的项目构建和管理需求。 10. Jenkins...

    jenkins使用入门

    它拥有超过一千个插件,支持几乎所有版本控制系统和构建工具,包括Git、SVN、Maven、Ant、Gerrit和Sonar等。 ### Jenkins环境搭建 Jenkins可以在不同操作系统上运行,包括Windows、Linux、Mac OS X等。在Windows...

    jenkins入门讲解

    Jenkins是一个开源软件项目,是全球最受欢迎的持续集成(CI)工具之一。它的前身是Hudson,并且随着时间的发展,它不仅成为了CI领域的领头羊,还在持续交付(CD)方面有着广泛的应用。Jenkins支持多种编程语言,包括Java...

    sonar-scanner-2.8

    3. **持续集成**:与各种构建工具(如Maven、Gradle、Jenkins等)无缝集成,可以在每次构建过程中执行代码分析,确保新添加的代码符合质量标准。 4. **报告生成**:分析完成后,SonarScanner会生成详细的报告,展示...

    离线手动安装kenkins的常用插件

    本文将详细介绍如何在Linux环境下离线安装Jenkins,并关注于支持Subversion (svn)、SonarQube (sonar)、Ant等工具的插件安装。 首先,你需要下载Jenkins的war包,这是Jenkins服务器的基础。然后,你需要在有网络的...

    plugins包.zip

    【标题】"plugins包.zip" 是一个专门为Jenkins系统准备的离线插件集合,它包含了一系列常用的Jenkins插件,方便用户在无网络或网络条件受限的情况下安装和升级Jenkins的插件。 【描述】指出,这个压缩包里的内容是...

Global site tag (gtag.js) - Google Analytics