手把手教你使用docker搭建maven私服

參考博客:https://juejin.im/post/5d66795d51882540b16f3f17

https://www.jianshu.com/p/dd738032ff56   ,感謝各位大佬

前言:具體docker的安裝分外網和內網兩種(且不談手動安裝,自動安裝等,我這裏由於使用的是公司內網服務器,所以我使用的是內網安裝方式,大致私聊使用一臺可以訪問外網的服務器下載好安裝docker所需要的rpm文件,然後使用yum命令安裝即可(不清楚的可以上網查,網上資料蠻多的)

下載 Nexus 鏡像

在終端控制檯上使用 Docker 指令下載 Nexus 官方提供的Docker 鏡像:

 

看到下圖結果時,就表示鏡像下載完成,可以通過 docker images 查看。

 

啓動 Nexus 容器

使用下方指令啓動 Nexus 容器:

docker run -d -p 8081:8081 --name nexus -v /var/opt/nexus/nexus-data:/nexus-data --restart=always sonatype/nexus3

在這裏對輸入的 Docker 指令的參數進行簡單的說明:

  • -d 表示讓容器後臺運行。
  • -p 8081:8081 表示了容器啓動時開放內部端口 8081(後者的8081) 映射主機端口的 8081 ,即通過 localhost:8081 可以訪問到 Nexus 容器所提供的服務。
  • -v /var/opt/nexus/nexus-data:/nexus-data 表示將容器內部 /var/nexus-data 掛載到當前主機的指定目錄,需要注意的是,-v 指定的外部路徑必須爲全路徑。
  • --restart=always 比較簡單,表示當 docker 服務啓動時,該容器也跟着啓動。

執行上述指令後,稍等片刻,訪問 http://localhost:8081/ ,看到對應的 Nexus 後臺就表示私服安裝完成了

 

啓動nexus容器過程的常見問題及解決方案:

問題一:啓動nexus時,沒有權限操作宿主機文件夾

 

解決方案:

chmod 777 /var/opt/nexus/nexus-data

問題二:設置8081端口,拒絕訪問

解決方案:修改nexus配置文件nexus.properties

application-port=8081

 

配置 Maven 私服

私服安裝之後,我們首先進行登錄操作,點擊頁面左上角的 Sign In 按鈕,就會出現和下圖一樣的提示:

 

說明了 Nexus 默認登錄賬號爲 admin,並且密碼位於文件 /nexus-data/admin.password 下,我們只需在本地配置的掛載目錄下查看該文件即可,或者進入docker的nexus容器內部(使用 docker exec -it 容器id /bin/bash 命令)查看

使用find / -name /nexus-data/admin.password 找到文件的位置

然後使用cat命令拿到密碼

 

輸入默認的賬號密碼之後成功登錄之後,Nexus 就會強制要求修改 admin 的密碼,並且設置基本訪問權限,完成之後就正式進入了 Nexus 私服後臺。

 

這裏簡單對界面元素進行介紹:

  1. 默認的瀏覽界面,可以搜索查看倉庫的組件,以及進行上傳操作。
  2. 用於管理私服程序的配置。
  3. 賬戶信息查看,允許修改密碼。

進入私服程序的配置界面,我們需要對默認配置進行幾點調整。

中央倉庫的代理路徑設置

將私服配置裏中央倉庫的代理倉庫路徑更新爲阿里雲倉庫提供的代理地址:http://maven.aliyun.com/repository/central 這樣一來可以更快速地訪問在中央倉庫上所需要的依賴和插件。

 

新建自定義的倉庫

點擊Create repository,然後選擇類型爲 maven2(hosted)

 

然後輸入倉庫名稱 private-release,並在 Version policy 一欄中選擇 Release,表示這個倉庫的存儲依賴爲正式發佈的組件,然後在 Deployment policy 一欄中選擇 Allow redeploy,允許部署和更新私服上的組件。

 

最後點擊藍色按鈕-Create repository 之後,就可以在倉庫列表看到自定義的倉庫了,有了 release 倉庫,我們再按照同樣方式操作添加一個 snapshot 倉庫,只需在 Version policy 一欄調整爲 Snapshot 即可。

 

添加角色

Nexus 默認只有兩種角色:nx-anonymous 和 nx-admin,前者只有瀏覽的權限,後者爲管理員權限,一般情況下,我們還需要正對開發人員創建個角色。點擊 Create Role,添加一個 Role ID 爲 developer 的自定義角色, 並且只添加自定義倉庫的使用權限,刪除操作除外。

 

保存之後,新增的角色就展示在列表中,有了角色,就可以關聯用戶,進行權限分配了。

 

添加用戶

跟權限類似,默認的用戶只有兩種:admin 和 anonymous,我們同樣需要創建屬於開發者的用戶對象。點擊 Create local user,填入用戶名,密碼等必填信息之後,關聯我們先前的創建的角色,並保存即可。

 

用戶創建完成之後,我們就可以用新的用戶登錄私服,查看對應權限的內容了,例如我們用新建的用戶登錄,所能操作的只有查看和搜索自定義的私服倉庫。

 

這樣一來我們就創建好了自己的私服倉庫,配置完成之後,開發者就可以在 Maven 項目開發中使用了。

 

將本地的maven倉庫遷移到nexus的maven私庫

(參考博客:https://www.jianshu.com/p/dd738032ff56

使用倉庫遷移工具migrate-local-repo-tool.jar

下載地址:

鏈接:https://pan.baidu.com/s/12Hgj-O0fk0wp9hYSSI0udg

提取碼:pls0

下載放到本地某個目錄下面,輸入cmd命令開始上傳

 

參數說明

-cd 您要遷移的本地目錄

-t 目標倉庫地址,您可以在雲效上點擊倉庫地址,獲取您的目標倉庫地址

-p 密碼

-u 用戶名

 

使用 Maven 私服

有了私服和用於開發的賬號,我們就需要在本地 Maven 配置文件 setting.xml 進行關聯。

設置 server 賬戶信息:

 

設置私服倉庫地址:(這裏的地址,可以通過 Nexus 後臺上倉庫頁面的 cpoy 按鈕自動複製得到)

 

Maven 項目部署到私服

配置完成後,我們可以創建一個Maven工程,嘗試下打包到 Maven 私服。利用 IDE 快速生成 Maven 項目,在 POM 文件添加 distributionManagement 節點,並且指定對應的私服倉庫 id 和地址,如下:

 

最後只要執行部署命令 mvn clean deploy 或者利用 IDE 的 部署插件即可,當控制檯出現 BUILD SUCCESS ,如下圖類似時則說明部署完成。

 

從日誌上可以看出,我們的項目上傳都了 private- snapshot 倉庫下,此時我們可以在私服網站上的 private- snapshot 倉庫查看到上傳的 jar。

 

如果部署過程中出現如下提示:帶有 Access denied to 則說明在 setting.xml 配置的用戶權限不足,無法將 jar 部署到對應私服倉庫上去。

 

需要注意的是,對於一個Maven項目而言,如果項目的版本號中有 “SNAPSHOT” 字樣,則表示當前處於開發版本,Maven 會將發佈到 snapshotRepository 節點對應地址上去。否則,Maven則認爲這是一個發佈版本,將程序發佈到 repository 節點對應的地址上。由於示例項目的版本爲 1.0.0-SNAPSHOT ,所以最終項目上傳到了 private-snapshot 這個 Snapshot 類型的倉庫下。

接下來如果其他項目要依賴這個 jar 時,只需要在其 POM 文件引入對應的座標即可。

 

將第三方 jar 包部署到 Maven 私服

這裏說到了第三方 jar 包,不是平常所提到的開源庫,更多的是來自其他第三方系統的 jar 包,由於項目需要,使用項目導入的方式來很不方便,更好的處理方式就是將第三方系統的 jar 包手動上傳到 Maven 私服上,需要使用的項目直接從私服倉庫中拉取即可。

這種方式實現起來也比較方便,分爲兩種:可視化界面操作和命令行操作。

可視化界面操作:就是在 Nexus 後臺上進去,執行上傳操作必須要對於的上傳權限纔可以,一般都是管理員賬號進行操作,選擇倉庫後進去上傳頁面,指定本地需要上傳的項目,自定義完座標信息保存即可。

 

命令行方式:直接在終端輸入下面指令即可:

 

  • -DgroupId 和 -DartifactId 構成了該jar包在 pom.xml 的座標, 即對應依賴的 groupId 和 artifactId
  • -Dfile 表示需要上傳的jar包的絕對路徑
  • -Durl 爲私服倉庫的url精確地址
  • -DrepositoryId 爲私服倉庫定義的id
  • -Dversion 指定了版本號
  • -Dpackaging 指定了打包方式

當控制檯日誌出現 BUILD SUCCESS 信息時則表示打包成功,如果出現打包失敗,很有可能是 Maven 配置文件裏 server 元素下的用戶權限不足導致,需要 Nexus 後臺對用戶角色進行上傳權限的分配

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