色婷五一,精品亚洲欧美一区二区三区日产 ,精选国产AV剧情,无码丰满少妇2在线观看

18600329666

咨詢技術(shù)專家

掃一掃
與技術(shù)專家在線溝通

Menu
使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持續(xù)集成環(huán)

      持續(xù)集成環(huán)境和持續(xù)化構(gòu)建技術(shù)是比較新的IT技術(shù),主要借助于第三方開源組件,持續(xù)化構(gòu)建技術(shù)主要解決了大型團(tuán)開發(fā)的協(xié)作問題,例如,代碼的沖突,代碼合并,重復(fù)的代碼調(diào)試與發(fā)布,甚至基本的代碼測(cè)試,通過將重復(fù)的工作利用程序處理以降低開發(fā)成本,解放勞動(dòng)力
一、持續(xù)化構(gòu)建能解決如下問題

1、團(tuán)隊(duì)彼此協(xié)作不流暢,出現(xiàn)彼此阻塞的情況;

2、使用的類庫版本不統(tǒng)一,造成難以估計(jì)的風(fēng)險(xiǎn);

3、代碼未經(jīng)嚴(yán)格測(cè)試就上傳,造成不斷的返工;

4、版本發(fā)布規(guī)范欠缺,版本質(zhì)量不能保證;

5、代碼質(zhì)量低,其他人難以接手。

二、使用nexus搭建maven本地倉庫:

1、下載maven(讀:妹吻)和nexus(讀:耐克色兒絲):

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

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

2、將下載的nexus放置到linux服務(wù)器解壓并啟動(dòng):

 

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

image

選擇自己的系統(tǒng)并進(jìn)入:

image

啟動(dòng)nexus

./nexus start

image

nexus啟動(dòng)成功,訪問:http://192.168.6.204:8081/nexus/

image

3、將下載的maven解壓放置在開發(fā)機(jī)上(windows),并配置conf目錄下的setting.xml文件:

(1)在<settings><profiles></profiles></settings>節(jié)點(diǎn)之間添加配置:

<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>節(jié)點(diǎn)之間添加配置:

<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就搭建配置完成了,下面我們要利用這個(gè)環(huán)境解決兩個(gè)問題:

1、不同的模塊項(xiàng)目都使用統(tǒng)一的類庫版本;如spring都使用3.1.2.RELEASE,log4j都使用1.2.17。這樣避免因?yàn)閖ar包版本的不同,引發(fā)的諸多問題。

2、模塊開發(fā)完畢后,將編譯的庫文件發(fā)布到nexus私服上,以便其他模塊引用。

這里說一下maven的一個(gè)特性,繼承。簡(jiǎn)單來說繼承就是先建立一個(gè)父項(xiàng)目,其他項(xiàng)目如果繼承這個(gè)父項(xiàng)目,就可以繼承這個(gè)項(xiàng)目定義的庫文件及版本。利用這個(gè)特性,我們可以讓多個(gè)模塊都繼承一個(gè)父項(xiàng)目,而在父項(xiàng)目中定義好類庫的版本,這樣所有模塊都使用統(tǒng)一的類庫文件。例如:

建立名為maven-parent的父項(xiàng)目,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>

這個(gè)pom定義了一些類庫以及它的版本。

然后再建立模塊項(xiàng)目:maven-sample(web項(xiàng)目)、maven-support(支撐模塊,包括一些工具類以及業(yè)務(wù)封裝,提供給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包,都會(huì)使用相同的版本:

image

接下來我們解決協(xié)作開發(fā)的問題,maven-support開發(fā)完畢之后,將之發(fā)布到nexus服務(wù)器,以便maven-sample可以引用。我們需要3步:

1、本地maven的conf目錄下的setting.xml,在<servers></servers>節(jié)點(diǎn)之間添加:

<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項(xiàng)目的pom.xml中,<project></project>節(jié)點(diǎn)之間添加:

<!-- 構(gòu)件部署倉庫 -->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>發(fā)布版本倉庫</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、對(duì)maven-support項(xiàng)目進(jìn)行編譯,并執(zhí)行發(fā)布命令:

image

image

可以看到maven-support已經(jīng)成功發(fā)布到nexus私服中:

image

image

這樣maven-sample就可以引用maven-support模塊,而開發(fā)maven-support的人則可以繼續(xù)開發(fā),持續(xù)發(fā)布新版本。

image

四、利器Jenkins完成自動(dòng)部署

    Jenkins源于另外一個(gè)持續(xù)集成工具Hudson,Hudson在oracle收購sun之前,是開源社區(qū)在開發(fā)和維護(hù),oracle收購sun之后聲明擁有hudson的商標(biāo)使用權(quán),后來開發(fā)hudson的開源力量只能重新起個(gè)名字“Jenkins”來繼續(xù)開發(fā),原Hudson則由oracle持續(xù)維護(hù),但更新速度比較慢。

jenkins地址:http://jenkins-ci.org/

hudson地址:http://hudson-ci.org/

可以看到hudson官網(wǎng)右下角oracle的版權(quán)l(xiāng)ogo。我們這里就使用Jenkins來搭建持續(xù)集成環(huán)境。

首先從官方上下載jenkins,http://mirrors.jenkins-ci.org/war/ 可以選擇不同的版本。下載完成后放置在服務(wù)器某個(gè)目錄下,cd到該目錄下,執(zhí)行:

java -jar jenkins.war

jenkins內(nèi)置一個(gè)jetty容器,默認(rèn)使用8080端口,如果你的8080被占用了,請(qǐng)執(zhí)行:

java -jar jenkins.war --httpPort=8081

 

當(dāng)然你也可以直接把war包放到tomcat目錄下啟動(dòng),這樣jenkins就啟動(dòng)起來了。

image

來到這個(gè)界面我們先做一個(gè)事情:系統(tǒng)配置,主要是配置maven和發(fā)布插件。

1、進(jìn)入“系統(tǒng)管理”——>“系統(tǒng)設(shè)置”:

新增maven,將linux上安裝好的maven配置上去。

image

其他保持默認(rèn)配置,保存!

2、進(jìn)入“系統(tǒng)管理”——>“管理插件”——>“高級(jí)”上傳插件

image

上傳完成之后,jenkins就具備了發(fā)布web應(yīng)用到tomcat各類容器的能力。

注:deploy.hpi插件是我事先從網(wǎng)上下載好了,你也可以使用jenkins自帶的插件安裝功能完成插件安裝,但那個(gè)比較慢。

3、配置linux服務(wù)器上的maven,跟上篇類似你也需要配置linux服務(wù)器上的maven,使之連接到nexus私服,以及支持發(fā)布模塊到nexus上。

在<settings><servers></servers></settings>節(jié)點(diǎn)之間添加:

   1:    <server>  
   2:      <id>snapshots</id>  
   3:      <username>deployment</username>  
   4:      <password>123456</password>  
   5:    </server>  
   6:      <server>  
   7:      <id>releases</id>  
   8:      <username>deployment</username>  
   9:      <password>123456</password>  
  10:    </server>

在<settings></settings>節(jié)點(diǎn)之間添加:

   1:  <profiles>
   2:          <profile>
   3:              <id>dev</id>
   4:              <repositories>
   5:                  <repository>
   6:                      <id>local-nexus</id>
   7:                      <url>http://192.168.0.109:8081/nexus/content/groups/public/</url>
   8:                      <releases>
   9:                          <enabled>true</enabled>
  10:                      </releases>
  11:                      <snapshots>
  12:                          <enabled>true</enabled>
  13:                      </snapshots>
  14:                  </repository>
  15:              </repositories>
  16:          </profile>
  17:      </profiles>
  18:   
  19:      <!-- activeProfiles | List of profiles that are active for all builds. | -->
  20:      <activeProfiles>
  21:          <activeProfile>dev</activeProfile>
  22:      </activeProfiles>

 

完成這些配置,我們就可以在jenkins上新建項(xiàng)目了。

我們事先在eclipse中開發(fā)的三個(gè)項(xiàng)目:maven-parent(父項(xiàng)目,用于統(tǒng)一類庫版本)、maven-support(后端模塊,支撐web項(xiàng)目)、maven-sample(web項(xiàng)目,依賴maven-support),依次來添加:

image

下一步進(jìn)入后,主要配置兩個(gè)地址,svn和maven命令。

image

根據(jù)提示進(jìn)行SVN用戶名、密碼認(rèn)證即可。

image

對(duì)于maven-parent項(xiàng)目,我們執(zhí)行install命令即可。保存!

接著創(chuàng)建maven-support項(xiàng)目,由于該項(xiàng)目是后端模塊,需要發(fā)布到nexus服務(wù)器上,所以稍有不同:

image

這里需要執(zhí)行deploy命令,將該項(xiàng)目發(fā)布到nexus上。另外你最好配置該項(xiàng)目構(gòu)建在maven-paremt執(zhí)行之后開始:

image

最好保存!

最好創(chuàng)建maven-sample項(xiàng)目,這是個(gè)web項(xiàng)目,配置又稍有不同:

image

執(zhí)行package命令將項(xiàng)目打包成war包。下面做最重要的事情:將打包后的war包自動(dòng)發(fā)布到tomcat下:

image

注意幾點(diǎn):

1、WAR/EAR files,一定要填寫相對(duì)地址;

2、Manager username、Manager password是你安裝的tomcat用戶名、密碼,如果沒有請(qǐng)通過tomcat的配置文件tomcat-users.xml設(shè)置。

3、tomcat url為你安裝的tomcat訪問地址。

最后還是設(shè)置下構(gòu)建順序,讓它在maven-support執(zhí)行完成之后構(gòu)建:

image

保存!

jenkins首頁上就出現(xiàn)了三個(gè)我們創(chuàng)建好的項(xiàng)目,我們只需要構(gòu)建maven-parent就可以了,因?yàn)槲覀冊(cè)O(shè)置了構(gòu)建順序:

image

查看構(gòu)建信息,可以看到構(gòu)建的進(jìn)程,項(xiàng)目先從svn更新下來,然后進(jìn)行編譯,運(yùn)行測(cè)試用例,打包,發(fā)布的過程。整個(gè)過程都由jenkins完成,

image

image

至此jenkins就實(shí)現(xiàn)了自動(dòng)化編譯、測(cè)試(自己寫測(cè)試用例)、打包發(fā)布、部署。

image

可以看到tomcat上已經(jīng)多了maven-sample應(yīng)用。

image

部署Sonar

從http://www.sonarqube.org/官網(wǎng)上下載sonar安裝包,解壓到系統(tǒng)目下,進(jìn)入到bin目錄下,選擇你的系統(tǒng)版本,進(jìn)入后執(zhí)行:

./sonar.sh start

 

sonar就啟動(dòng)起來了,默認(rèn)的端口是9000,你也可以到conf/sonar.properties配置文件中修改:

sonar.web.port:                           8066

 

image

在Jenkins安裝sonar插件

和安裝deploy插件方法類似,我們?cè)谙到y(tǒng)管理——插件管理中,上傳sonar插件。安裝完成之后,請(qǐng)重啟jenkins。

image

配置jenkins的sonar插件:

進(jìn)入系統(tǒng)配置

image

根據(jù)你的情況配置sonar,我這里僅僅修改過sonar的應(yīng)用端口,所以只需要配置這個(gè),其他保留默認(rèn)值。

進(jìn)入特定項(xiàng)目配置sonar:

image

image

選擇下maven版本,其他保留默認(rèn)值。保存!

然后開始構(gòu)建項(xiàng)目,構(gòu)建完成后,可以看到該項(xiàng)目的代碼檢查結(jié)果已經(jīng)被導(dǎo)入到sonar平臺(tái)上,通過sonar系統(tǒng)就可以方便查看該項(xiàng)目的代碼質(zhì)量情況:

sonar可以檢查代碼的復(fù)雜度、代碼重復(fù)、單元測(cè)試覆蓋率、是否有注釋、潛在bug等代碼問題,對(duì)于sonar的項(xiàng)目介紹,可以進(jìn)一步去研究摸索,在這里僅介紹jenkins和sonar整合的方法,可以再實(shí)際工作時(shí)進(jìn)一步研究。

image

 

image