第八節:Maven搭建Nexus私服與權限管理

Nexus下載與啓動:
     下載地址爲Nexus官網:http://www.sonatype.org/nexus/
  • NEXUS OSS [ OSS = Open Source Software,開源軟件——免費]
  • NEXUS PROFESSIONAL -FREE TRIAL [ 專業版本——免費體驗--收費]。
     
     我們選擇OSS免費版,然後選擇操作系統,3.0版本的已經默認爲下載源碼包(bundle版本)而不是war文件。其中源碼包中包含了jetty容器,也就是說不需要額外的web容器就能直接啓動。而war版本的Nexus需要放入額外的web容器例如tomcat中的webapps目錄下才能啓動。
     
     下載了3.x - OS X的源碼包之後,解壓文件得到兩個目錄:
  • nexus-3.3.1-01:該目錄包含了Nexus運行時所需要的文件,如啓動腳本等。
  • sonatype-work:該目錄包含了Nexus生成的配置文件,日誌文件,倉庫文件等。
     其中第一個目錄是運行Nexus時必須的,同一個版本的Nexus該目錄中的內容是一樣的, 而第二個目錄是Nexus在運行的時候動態創建的,裏面包含了我們對倉庫,角色,權限,成員的一些配置信息以及所有我們下載的構件。所以當我們備份Nexus的時候,我們需要備份的是sonatype-work目錄。
     接着我們啓動nexus,在命令行cd到nexus-3.3.1-01目錄下的bin目錄下,然後輸入./nexus start啓動nexus,這裏可能會出現一個問題:nexus配置了jetty容器默認佔用8081端口,我們可以在nexus-3.3.1-01目錄的etc目錄下找到nexus-default.properties文件,然後修改application-port爲我們想要的端口的。
     我們輸入./nexus 可以看到他提示我們可以使用的幾個指令:
  • start:在後臺啓動服務,不在界面上打印任何啓動或者運行時信息。
  • run:啓動服務,但是在界面上打印出啓動信息以及運行時信息以及日誌信息。
  • stop:關閉服務
  • status:查看nexus運行狀態
  • restart:重啓服務
  • force-reload:強制重載一遍配置文件,然後重啓服務
     在linux系統上啓動服務的時候出現的問題可以參照:http://blog.csdn.net/cuker919/article/details/12052565
     啓動服務之後,我們就可以在瀏覽器中訪問:http://localhost:8082/ (這裏我將端口號修改爲了8082,默認8081)
     Nexus的默認管理員用戶名和密碼爲admin/admin123。

Nexus的倉庫與倉庫組:
     Nexus的主要的倉庫類型:
  • hosted(宿主):宿主倉庫主要用於存放項目部署的構件、或者第三方構件用於提供下載。
  • proxy(代理):代理倉庫就是對遠程倉庫的一種代理,從遠程倉庫下載構件和插件然後緩存在Nexus倉庫中
  • group(倉庫組):對我們已經配置完的倉庫的一種組合策略。
     我們點擊導航欄中的Repositories鏈接,看到如下圖界面:
      Nexus內置的倉庫就已經包含了主要的倉庫類型:
  • maven-central:代理中央倉庫、策略爲Release、只會下載和緩存中央倉庫中的發佈版本構件。
  • maven-releases:策略爲Release的宿主倉庫、用來部署組織內部的發佈版本內容。
  • maven-snapshots:策略爲Snapshot的宿主倉庫、用來部署組織內部的快照版本內容。
  • maven-public:該倉庫將上述所有策略爲Release的倉庫聚合並通過一致的地址提供服務。
  • nuget-hosted:用來部署nuget構件的宿主倉庫
  • nuget.org-proxy:代理nuget遠程倉庫,下載和緩衝nuget構件。
  • nuget-group:該倉庫組將nuget-hosted與nuget.org-proxy倉庫聚合並通過一致的地址提供服務。
  • maven-public:該倉庫組將maven-central,maven-releases與maven-snapshots倉庫聚合並通過一致的地址提供服務。
     我們在Maven中配置的訪問Nexus的倉庫一般是maven-public倉庫組,我們向倉庫組我們下載或者上傳構件的請求,倉庫組中沒有實際的內容,他會轉向其包含的宿主倉庫或者代理倉庫獲得實際構件的內容。
     
     
     我們也可以通過簡單的配置來創建一個倉庫或者倉庫組。當我們配置代理倉庫的時候有幾個參數需要注意:
  • Maximum component age:構件緩存的最長時間,對於發佈版本的倉庫來說,這個值默認爲-1,表示構件下載後就一直保存着,不再重現下載;對於快照版本的倉庫來說,這個值默認爲1440,表示1440分鐘後會重新緩存代理的構件。
  • Maximum metadata age:倉庫元數據文件緩存的最長時間,其他定義如上。
  • Not found cache TTL:表示當一個文件沒有找到後,緩存這一不存在信息的時間。以默認的1440分鐘爲例,如果某文件不存在,那在這之後的1440分鐘內,如果Nexus再次得到這個請求,不會再查找文件系統,而是直接返回不存在。

配置Maven從Nexus下載構件:
     我們可以在項目的POM中配置倉庫和插件倉庫,當然如果我們想要所有的Maven項目都使用私服,可以在settings.xml中配置,但是settings.xml並不直接支持配置repositories和pluginRepositories,但是Maven提供了profiles下的profile可以讓我們定義一系列的配置信息,然後指定其激活條件,能夠定義在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定義在<properties>裏面的鍵值對可以在pom.xml中使用,這裏我們配置遠程倉庫的地址和插件倉庫。
<profiles>
        <profile>
            <id>jdk8</id>
            <activation>
                <activebydefault>true</activebydefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerversion>1.8</maven.compiler.compilerversion>
            </properties>
        </profile>
        <profile>
            <id>nexusRep</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>Nexus Repository</name>
                    <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>
             <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>Nexus pluginRepository</name>
                    <url>http://192.168.1.88:8081/nexus/content/groups/public/</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
</profiles>
     但是Maven除了從Nexus上下載構件之外,還會時不時從中央倉庫下載構件,然而這應該是Nexus的工作,所以我們需要配置一個鏡像,用
<mirrorof>*</mirrorof>將Maven任何構件下載的請求都轉發到私服中。
<mirrors>
        <mirror>
            <id>nexus</id>
            <name>A Local Nexus Server</name>
            <url>http://192.168.1.121:8081/nexus/content/groups/public/</url>
            <mirrorof>*</mirrorof>
        </mirror>
</mirrors>
     這裏就有一個問題,在這裏配置了鏡像,那在<profiles>裏配置的遠程倉庫不是沒有用了嗎?
     當Maven需要下載發佈版或者快照版構件的時候,他會首先檢查我們配置的遠程倉庫中的<releases>和<snapshots>元素,看該類型的構件是否可以下載,如果可以下載,就轉到鏡像地址去下載。所以我們配置的遠程倉庫中的<url>失效了,有效的是<releases>和<snapshots>元素。

使用Maven部署構件到Nexus:
     在項目正常開發中,快照版本的構件可以部署到Nexus中策略爲Snapshot的例如:maven-snapshots宿主倉庫中,發佈版本可以部署到Nexus中策略爲Release的例如:maven-releases宿主倉庫中,項目的POM文件配置如下:
<distributionManagement>
		<repository>
			<id>Nexus-releases</id>
			<name>Nexus-releases-repositories</name>
			<url>http://192.168.1.121:8081/nexus/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>Nexus-snapshots</id>
			<name>Nexus-snapshots-repositories</name>
			<url>http://192.168.1.121:8081/nexus/repositories/snapshots/</url>
		</snapshotRepository>
</distributionManagement>	
     但是Nexus倉庫對於匿名用戶是隻讀的,所以爲了能夠部署構件,還需要在settings.xml文件中配置認證信息。
<servers>
        <server>
            <id>nexus</id>
            <username>admin</username>
            <password>*****</password>
        </server>
</servers>
     當然對於一些由於許可證因素等無法發佈到公共倉庫的構件,我們只能自己下載然後通過Nexus的界面手動上傳到私服中。
     到此爲止,Nexus私服的搭建與配置基本完畢,下面是關於權限管理的問題。
     出於安全性考慮、需要對Nexus倉庫進行權限管理、比如只有管理員才能配置Nexus、某個項目組有特定的倉庫、等等。

Nexus的訪問控制模型:
     Nexus是基於權限(Privilege)做訪問控制的。一個用戶可以被賦予一個或者多個角色、一個角色可以包含一個或者多個權限、還可以包含一個或者多個角色。用戶必須擁有相應的角色繼而擁有相應權限、才能做相應操作,但是有一點要注意這裏的權限都是基於倉庫的,即對倉庫的增刪改查權限。
     在2.x版本, Nexus預定義了一些常用且重要的角色,如:
  • UI:Basic UIPrivileges:包含了訪問Nexus界面必須的最基本的權限。
  • UI:RepositoryBrowser:包含了瀏覽倉庫頁面所需要的權限。
  • UI:Search:包含了訪問快速搜索欄及搜索界面所需要的權限。
  • Repo:AllRepositories (Read):給予用戶讀取所有倉庫內容的權限。沒有倉庫的讀權限用戶將無法在倉庫頁面看到實際的倉庫內容,也無法使用Maven從倉庫下載構件。
  •  Repo:AllRepositories (Full Control):給予用戶完全控制所有倉庫內容的權限。用戶不僅可以瀏覽、下載構件,還可以部署構件及刪除倉庫內容。
     在3.x版本中, Nexus只預定義了兩個重要的角色:
  • nx-admin:擁有Nexus所有權限
  • nx-anonymous:匿名用戶角色,擁有訪問Nexus界面,瀏覽倉庫內容和搜索構件的功能。

Nexus爲項目分配獨立的倉庫:
     當我們有多個項目時,爲了避免各個項目上傳到同一倉庫發生衝突干擾、可以爲每個項目創建獨立的倉庫、每個項目所擁有的倉庫只有其項目組成員才能對此倉庫進行部署、修改和刪除權限、其他用戶只能讀取、下載、和搜索該倉庫內容。
     我們以2.x版本舉例,步驟如下:
  1. 創建項目獨立倉庫,例如我們建立一個發佈版本的Test-Release倉庫
  2. 爲倉庫建立權限。點擊左側導航欄的Privileges,點擊Add按鈕,然後選擇爲那個倉庫建立權限(Repository),以及建立什麼樣的權限(Repository Target)。
  3. 創建包含上述權限的角色。點擊左側導航欄的Roles,點擊Add按鈕,選擇Nexus Role進入創建角色界面,爲角色添加上第二步創建的一個或者多個權限以及一些基本配置。
  4. 創建用戶、指定用戶擁有上面的角色。點擊左側導航欄的Users,點擊Add按鈕,選擇Nexus User進入創建用戶界面,爲用戶添加上第三步創建的一個或者多個角色以及一些基本配置。

Nexus調度任務:
     Nexus提供了一系列可配置的調度任務來方便用戶管理系統。用戶可以設定這些任務運行的方式,例如每天、每週等。調度任務會在適當的時候在後臺運行。
     要建立一個調度任務,單擊左邊導航菜單中的“Scheduled Tasks”,然後再右邊的界面上單擊Add按鈕,按照頁面上的提示填寫相關內容。
     Nexus包含了以下幾種類型的調度任務:
  • Download Indexs:爲代理倉庫下載遠程索引。
  • Empty Trash:清空Nexus的回收站,一些操作實際是將文件移到了回收站中。
  • Evict UnusedProxied Items From Repository Caches:刪除代理倉庫中長期未被使用的構件緩存。
  • Expire RepositoryCache:Nexus爲代理倉庫維護了遠程倉庫的信息以避免不必要的網絡流量,該任務清空這些信息以強制Nexus去重新獲取遠程倉庫的信息。
  • Publish Indexs:將倉庫索引發布成可供m2eclipse和其他Nexus使用的格式。
  • Purge NexusTimeline:刪除Nexus的時間線文件,該文件用於建立系統的RSS源。
  • Rebuild MavenMetadata Files:基於倉庫內容重新創建倉庫元數據文件maven-metadata.xml,同時重新創建每個文件的校驗和md5與sha1。
  • ReIndex Repositories:爲倉庫編纂索引。
  • Remove SnapshotsFrom Repositories:以可配置的方式刪除倉庫的快照構件。






     
     
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章