1. 程式人生 > >maven+jenkins+nexus+git 持續集成

maven+jenkins+nexus+git 持續集成

mirrorof bubuko red 驗證 中央倉庫 lib end 系統管理 archive

一、背景介紹

  隨著互聯網的普及,項目的規模不斷擴大,持續集成變的相當重要。

  當項目的規模變大,動輒幾十個項目要維護的時候,就會給開發、部署、集成測試帶來極大的挑戰。

二、maven簡單介紹

  maven主要用途為項目構建、依賴管理、項目信息管理。

  簡單安裝:下載maven http://maven.apache.org/download.cgi,配置環境變量 MAVEN_HOME為maven安裝目錄,PATH環境變量最後附加上";%MAVEN_HOME%\bin"。

  打開cmd,輸入mvn -v。技術分享圖片基本用法這裏不過多介紹了。

  maven版本介紹:

  1、快照版本(SNAPSHOT)和正式版本(RELEASE),如果是快照版本在編譯打包時會自動去maven倉庫上下載最新的版本,而如果是穩定版本,則不會重新下載。這也是一些項目中,定義了一些基礎組件為穩定版本,在做過一些修改後沒有升級版本號導致其他開發人員更新不到。通常解決辦法為刪除本地倉庫中已有的穩定版本或者升級版本號。

  2、關於選擇版本的問題,SNAPSHOT版本的庫是一直在變化的是一個不穩定因素,RELEASE則為不可變化的,有些人會在在maven私服設置redeploy屬性為true,這樣會讓RELEASE版本也不在穩定,這是通常沒有問題,一旦因為版本問題引發事故就會給排查帶來極大的麻煩。

  maven生命周期簡介:

  • 驗證(validate) - 驗證項目是否正確,所有必要的信息可用
  • 編譯(compile) - 編譯項目的源代碼
  • 測試(test) - 使用合適的單元測試框架測試編譯的源代碼。這些測試不應該要求代碼被打包或部署
  • 打包(package) - 采用編譯的代碼,並以其可分配格式(如JAR)進行打包。
  • 驗證(verify) - 對集成測試的結果執行任何檢查,以確保滿足質量標準
  • 安裝(install) - 將軟件包安裝到本地存儲庫中,用作本地其他項目的依賴項
  • 部署(deploy) - 在構建環境中完成,將最終的包復制到遠程存儲庫以與其他開發人員和項目共享。

  針對不同的生命周期,maven可以加入不同的插件(自定義插件和類庫中的插件)來達到特殊的功能。這個插件就讓打包時,依賴和項目分離同事指定main方法,這種做法方便抽離公共依賴(對版本管理有一點要求)。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>dependency/</classpathPrefix>
<mainClass>com.XXXX.XXXX.XXXX</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
 

  坐標介紹:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>

  1、groupId:定義當前maven項目隸屬實際項目。maven項目和實際項目不一定是一對一的關系。比如spring項目。

  2、artifactId:該元素定義項目中的一個模塊。

  3、version:該元素定義相關的版本信息。

  4、還有一些其他屬性就不一一列出了(如scope等)。

  那麽這個依賴在本地倉庫中位置為:本地倉庫位置\groupId\artifactId\version。比如本地倉庫位置\org\springframework\spring-core\4.0.5.RELEASE

  安裝好maven 後需要修改對應的settings文件,這裏就不介紹了。

三、maven 私服nexus

  1、maven倉庫:

    1)本地倉庫:通常在maven項目中沒有傳統的 lib\來存放依賴。當maven執行命令時,如果需要使用這些依賴,它會基於依賴坐標在本地倉庫中查找依賴文件。

    2)遠程倉庫:通常一個項目需要依賴很多三方類庫,但是我們的本地倉庫默認是空的,這個時候通常是需要一個遠程倉庫去下載這些依賴到本地倉庫。

  常用的中央倉庫:http://mvnrepository.com/,http://maven.aliyun.com/nexus/content/groups/public/。

    3)私服:私服是一種特殊的遠程倉庫,它通常架設在局域網內代理遠程倉庫。一些無法從遠程倉庫上下載到的依賴可以統一上傳到私服上供項目組使用。

    技術分享圖片

  2、私服(nexus)介紹

    1) maven的私服有很多,本文介紹nexus。私服不是maven的核心概念,使用私服可以降低中央倉庫的負荷、節省外網帶寬、加速構建maven、部署自己的maven構件。

    2) 下載nexus https://www.sonatype.com/download-oss-sonatype windows版。版本可自行選擇解壓nexus-2.12.0-01-bundle.zip,另一個不是必須的在啟動時會自動生成。

    3) 找到安裝目錄D:\soft\nexus-2.12.0-01\bin\jsw\windows-x86-64以管理員身份運行start-nexus.bat,D:\soft\nexus-2.12.0-01\conf\nexus.properties可以修改啟動端口等信息。

啟動成功後訪問localhost:8081/nexus。見到如下圖:

技術分享圖片

    

、  4)默認登錄用戶名密碼admin/admin123 。nexus默認包含了group(倉庫組)、host(宿主)、proxy(代理)和virtual(虛擬)。每個倉庫有一個policy,表示該倉庫為release版本或snapshot版本。客戶端會根據需要從倉庫組中的不同倉庫去下載對應的依賴。

     畫個圖方便大家理解:

     技術分享圖片

     安裝好後nexus已經為我們創建了一些默認的倉庫,如release宿主倉庫,我們就可以通過最後的artifact upload上傳jar包,也可以通過命令

     mvn deploy:deploy-file -DgroupId=坐標名-DartifactId=坐標名 -Dversion=版本 -Dpackaging=jar -Dfile=jar包位置 -Durl=http://localhost:8081/nexus/content/repositories/loan-release -DrepositoryId=倉庫id

  技術分享圖片

    讓我們看一下倉庫組:右邊的添加順序決定了倉庫的檢索順序,通常常用的倉庫會配置在前面。

  技術分享圖片

    修改本地settings配置,通過鏡像的方式使nexus倉庫組生效:

    

    <servers>
        <server>
            <id>nexus</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
    </servers>

   <mirrors>
        <mirror>
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus Mirror.</name>
         <url>http://localhost:8081/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>

    

  簡單windows版的nexus就搭建好了。

四、jenkins持續構建

  1、jenkins的前身為hubson,它可以為我們帶來的主要功能如下:

    1)持續編譯:當有代碼提交時(svn或git),jenkins可配置為自動觸發去編譯新生成的代碼。

    2)持續測試:現在大多項目都測試都使用JUnit之類的框架,jenkins可以在集成的過程中運行這些測試案例並生成報告。

    3)持續部署:在完成集成後jenkins同時支持自動發布到指定環境。

  2、下載windows版本 https://jenkins.io/download/ 直接安裝即可,初始化過程中我們選擇默認安裝一下插件也可以後面自行添加,jenkins默認啟動端口為8080可修改根目錄下的jenkins.xml

  技術分享圖片

  安裝示意圖,完成後我們使用admin用戶登錄。

   技術分享圖片

   3、首先配置一些全局屬性。點擊系統管理->Global Tool Configuration,配置jdk,git(可以通過git version,where is git 查看安裝目錄),maven的安裝目錄。

    技術分享圖片

    點擊系統管理->管理插件,找到並安裝maven插件技術分享圖片

    安裝publish over ssh插件(通過ssh的方式將項目部署到遠程服務器),技術分享圖片

    4、創建maven項目

      1)點擊開始創建一個新任務。

      2)選中構建一個maven項目。

  技術分享圖片    

      3)選擇源碼管理中的git,Credentials為添加用戶名密碼,比如我們使用gitlab時需要輸入。

  技術分享圖片

      4)找到build選項,輸入clean package 即maven清除 打包命令,點擊保存。(這裏我們就不配置自動部署了通常使用publish over ssh方式)

  技術分享圖片

      5)點擊構建按鈕。

  技術分享圖片

  紅色狀態為失敗,藍色為成功技術分享圖片

  點擊控制臺輸出可以看到本次編譯的具體信息。

  技術分享圖片

    構建完的項目在工作空間中,點擊即可下載。

    技術分享圖片

      6)自動部署有很多種形式這裏並沒有配置,常用的有通過shell腳本和publish over ssh, 也可以在服務器上通過wget方式取到工作空間中的jar或者war進行部署。

五、總結

   本文為一個簡單入門,無論是maven、jenkins、nexus、git都不是可以一下學會的,都需要更多的學習和練習才能熟練使用。

    

maven+jenkins+nexus+git 持續集成