天天看點

Docker搭建私有Nexus-maven倉庫

本文使用docker鏡像實作nexus的一鍵部署,并且進行相關配置,測試完成maven工程的打包上傳

文章目錄

    • 一 利用Docker鏡像搭建Nexus倉庫
        • 1 建立 nexus-data 資料卷
        • 2 啟動鏡像
    • 二 完成Nexus設定
        • 修改密碼
        • 添加使用者
        • 擷取倉庫url
    • 三 配置本地Maven
        • 0 maven 配置檔案基礎知識
        • 1 配置 servers
        • 2 配置profile
        • 3 配置activeProfiles
        • 4 配置鏡像
    • 四 配置pom檔案
    • 五 測試
    • 六 其他

一 利用Docker鏡像搭建Nexus倉庫

這部分直接參考 https://hub.docker.com/r/sonatype/nexus3/ 就好

啟動大概需要兩三分鐘,預設的 使用者/密碼 是:admin / admin123

1 建立 nexus-data 資料卷

docker volume create --name nexus-data
           

2 啟動鏡像

docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
           

二 完成Nexus設定

輸入對應的ip:port進入首頁,點右上角的 Sign in 按鈕用預設賬号登入,看到的界面大緻如下

Docker搭建私有Nexus-maven倉庫

左邊的選項寫得很清楚,分别是檢索、浏覽、上傳功能。

修改密碼

建議新使用者登入立即修改密碼

點選右上角的admin進入賬戶管理,點選Change password按鈕,輸入舊密碼驗證通過後即可修改密碼

添加使用者

點選上面齒輪圖示進入系統設定,選擇Security下的Users,Create local user建立一個本地使用者,如下

Docker搭建私有Nexus-maven倉庫

這裡我将所有的角色都賦予了LinShen,使其擁有最大的權限,要定制合理角色權限的話到 Roles 選項設定

擷取倉庫url

預設的倉庫清單如下,主要用到的有 maven-public(共有倉庫,不區分snapshots和releases),maven-snapshots(snapshots私有倉庫),maven-releases(relsases私有倉庫)

複制出url,下面配置倉庫url要用到

Docker搭建私有Nexus-maven倉庫

三 配置本地Maven

配置本地Maven安裝目錄下的 conf/settings.xml 檔案,建議先把原檔案備份

這裡settings.xml的寫法主要參考阿裡雲私有倉庫給的配置檔案

0 maven 配置檔案基礎知識

首先根據activeProfiles找到對應id的profile,profile下管理了repositories和pluginRepositories兩大子產品,其下有各個具體倉庫,倉庫配置了id,url,releases和snapshots支援資訊等。根據id尋找倉庫url的時候會根據mirror下的mirrorOf規則比對到對應的鏡像倉庫url,并用鏡像倉庫url代替原倉庫url

1 配置 servers

配置servers節點如下

<servers>
        <server>
            <id>lin-releases</id>
            <username>LinShen</username>
            <password>密碼</password>
        </server>
        <server>
            <id>lin-snapshots</id>
            <username>LinShen</username>
            <password>密碼</password>
        </server>
    </servers>
           

2 配置profile

配置 id為nexus的 profile節點,profile節點下有id,repositories和pluginRepositories三個主要部分,repositories和pluginRepositories下有各自有releases、snapshots版本的共有倉庫和releases、snapshots版本的私有倉庫,私有倉庫的id和servers的id統一即可

這裡将私有倉庫的url根據releases、snapshots配置,其他的統一用共有倉庫的url即可

<profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://120.79.168.114:9081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>snapshots</id>
                    <url>http://120.79.168.114:9081/repository/maven-public/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>lin-releases</id>
                    <url>http://120.79.168.114:9081/repository/maven-releases/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>lin-snapshots</id>
                    <url>http://120.79.168.114:9081/repository/maven-snapshots/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://120.79.168.114:9081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>snapshots</id>
                    <url>http://120.79.168.114:9081/repository/maven-public/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>lin-releases</id>
                    <url>http://120.79.168.114:9081/repository/maven-releases/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>lin-snapshots</id>
                    <url>http://120.79.168.114:9081/repository/maven-snapshots/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>

    </profiles>
           

3 配置activeProfiles

使上文的profile生效

<activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
           

4 配置鏡像

這個其實是很關鍵的,下面的作用就是給id為 lin-releases 和 lin-snapshots 之外的倉庫配置鏡像位址,是以,其實上面可以不用配置那麼多的…

<mirrors>
        <mirror>
            <id>mirror</id>
            <mirrorOf>!lin-releases,!lin-snapshots</mirrorOf>
            <name>mirror</name>
            <url>http://120.79.168.114:9081/repository/maven-public</url>
        </mirror>
    </mirrors>
           

四 配置pom檔案

在pom檔案添加如下内容即可

<distributionManagement>
        <repository>
            <id>lin-releases</id>
            <url>http://120.79.168.114:9081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>lin-snapshots</id>
            <url>http://120.79.168.114:9081/repository/maven-snapshots</url>
        </snapshotRepository>
    </distributionManagement>
           

五 測試

在pom檔案所在目錄下執行

mvn clean deploy

即可,注意,不要使用

deploy:deploy

,否則容易出錯

前者将在每個循環中運作所有步驟(除非你自己選擇跳過),包括安裝(如編譯,打包,測試等)。後者甚至不會編譯或打包你的代碼,它隻會運作那一個目标。

運作輸出應該如下

Docker搭建私有Nexus-maven倉庫

這個時候去Nexus看一下,先點Browse,再選擇maven-snapshots倉庫,可以看到如下

Docker搭建私有Nexus-maven倉庫

如果是去看maven-central内容會更多

六 其他

其實,搭這個東西本身不難,隻是體驗一下而已,生産開發我還是推薦直接使用阿裡雲 雲效 的私有倉庫

https://repomanage.rdc.aliyun.com/my/repo ,友善快捷,直接使用阿裡雲鏡像倉庫服務

如果工程開發中想跳過上傳步驟,可以在pom檔案中添加如下配置

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
           

繼續閱讀