One More Universal Package Manager - Nexus Repository Manager

介紹另一個免費的 Univeral Packages Managment Tool - Nexus Repository Manager

banner

Nexus Repository Manager 也是一套提供多種 Repository 類型的套件管理框架並可自行架設服務的工具。開源版(OSS) 就免費提供了以下 Feed 的種類:

  • Maven
  • npm
  • Bower
  • NuGet
  • Docker
  • PyPI
  • RubyGems.

官方甚至還將 JFrog Artifactory OSS 設定為對手來比較一下:

comprison

而付費版則是強化了整合與HA的機制,不同的是 Nexus Repository Manager 沒有 SaaS 版本。

其他同性質的 Artifacts Management Tools 如下:

Setup Nexus

官網下載 Nexus Repository Manager OSS 3.x 後即解壓縮該檔案至目錄夾內。

並透過命令列至 bin 資料夾內輸入以下指令:

nexus.exe /run

install_run

看到上方運行起來後至預設網站入口 http://localhost:8081 即可看到該網頁:

Overview

Create New User

預設的管理者帳號為 admin, 密碼為 admin123。登入後可以新增其他角色:

Overview_Create_User_1

Overview_Create_User_2

完成後即可看到該角色新增至清單中

Overview_User_list

Repository and Publish Package to Nexus FSeeds

而我們也可以看到當前預設開好的 Repository 有哪些 :

Overview_Repo

介紹一下三種類型:

  • hosted:
    本機倉儲庫,通常會拿來部署自己的組件/套件到這。
  • proxy:
    代理倉儲庫,它们被用来代理遠端他人或官方的套件,如NuGet官方的 Registry。
  • group:
    倉儲庫组,用来合併多個 hosted/proxy 倉儲庫,通常配置成 maven 或是 npm 依賴的倉儲庫組。

系統預設會幫我們建立好 MavenNuGet 的 Repository,而接下來我們將逐一嘗試 NuGet, npm 與 Maven 的套件上傳。

NuGet

這邊 NuGet 的 Package 建立與上傳方式細節請參考Using Package from Private NuGet Server in TFS2017,以下只節錄重點修改:

確認當前有可使用的 NuGet Repository Feed :

feed_nuget

而我們可以透過以下指令建立 NuGet Repo 的連線:

nuget.exe sources add -name “Nexus” -source “http://localhost:8081/repository/nuget-hosted/

接著我們將先介紹如何產生 apikey。申請 NuGet API Key 只需兩個步驟:

  1. NuGet API Key Realm 設為啟用:

    config_nuget_realms

  2. 產生當前帳號的 API Key :

    config_generate_nuget_apikey

然後執行下面指令,將產生的 apikey 加入當前環境 :

nuget.exe setapikey-source “Nexus”

config_nuget_env

接著至欲上傳的套件下執行該指令上傳即可:

cmd_publish_nuget

如果不申請 NuGet API Token 則是用預設帳號密碼也可以上傳:

cmd_publish_nuget_without_token

完成後可以從看到下面的畫面:

package_nuget

npm

使用 npm 的 Package 建立與上傳方式細節請參考 Using Package from Private NPM Regisry in TFS2017

由於 npm feed 預設沒有建立,所以要自己手動新增:

feed_create_npm

這邊有兩種連線認證方式可透過 帳號密碼產生Auth認證碼 或是額外啟用 npm Realm and Login 的方式直接輸入帳號密碼登入。

config_npm_realms

這邊簡單介紹一下 _auth 這部分的產生是要透過當前帳號密碼並加密自己產生的:

The _auth variable has to be generated by base64-encoding the string of username:password. You can create this encoded string with the command line call to openssl.

這邊可以參考官方的教學,以下 Windows 環境採用預先安裝好的 certutil.aspx) 執行步驟:

  1. 建立一個

  2. 透過 certutil 與命令列執行以下指令:

    certutil /encode

    config_npm_generate_key

  3. 產生的內容會如下:

    config_npm_auth

  4. 將中間的內容貼入 .npmrc 的 _auth 設定即可

透過任一種方式設定完成連線認證即可成功上傳套件:

cmd_publish_npm

完成上傳的套件如下:

package_npm.png

Maven

詳細的 Maven Package 製作可以參考 Using Package from Maven and Package Management in TFS2017

這邊因為預設安裝已經有安裝好 Maven Registry Feed 了,所以我們可以將 releasesnapshot 的部分設定到本機開發環境中:

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<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>
<groupId>MyGroup</groupId>
<artifactId>myFirstApp3</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>myFirstApp</name>
<url>http://localhost:8081/repository/maven-central/</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>NexusMavenPOC-Release</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>NexusMavenPOC-Release</id>
<name>Releases</name>
<url>http://localhost:8081/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>NexusMavenPOC-Snapshots</id>
<name>Snapshot</name>
<url>http://localhost:8081/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>

setting.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<server>
<username>blackie</username>
<password>pass.123</password>
<id>NexusMavenPOC-Release</id>
</server>
<server>
<username>blackie</username>
<password>pass.123</password>
<id>NexusMavenPOC-Snapshots</id>
</server>
</servers>
</settings>

接著只要輸入下面指令完成上傳:

mvn deploy

cmd_publish_maven

套件至網頁如下呈現:

package_maven

Reference