介紹另一個免費的 Univeral Packages Managment Tool - Nexus Repository Manager
Nexus Repository Manager 也是一套提供多種 Repository 類型的套件管理框架並可自行架設服務的工具。開源版(OSS) 就免費提供了以下 Feed 的種類:
- Maven
- npm
- Bower
- NuGet
- Docker
- PyPI
- RubyGems.
官方甚至還將 JFrog Artifactory OSS 設定為對手來比較一下:
而付費版則是強化了整合與HA的機制,不同的是 Nexus Repository Manager 沒有 SaaS 版本。
其他同性質的 Artifacts Management Tools 如下:
- JFrog - Universal Artifact Repository Manager
- Using Package from Private NuGet Server in TFS2017
- Using Package from Private NPM Regisry in TFS2017
- Using Package from Maven and Package Management in TFS2017
- Another Free Universal Package Manager - ProGet
Setup Nexus
從官網下載 Nexus Repository Manager OSS 3.x 後即解壓縮該檔案至目錄夾內。
並透過命令列至 bin 資料夾內輸入以下指令:
nexus.exe /run
看到上方運行起來後至預設網站入口 http://localhost:8081 即可看到該網頁:
Create New User
預設的管理者帳號為 admin, 密碼為 admin123。登入後可以新增其他角色:
完成後即可看到該角色新增至清單中
Repository and Publish Package to Nexus FSeeds
而我們也可以看到當前預設開好的 Repository 有哪些 :
介紹一下三種類型:
- hosted:
本機倉儲庫,通常會拿來部署自己的組件/套件到這。 - proxy:
代理倉儲庫,它们被用来代理遠端他人或官方的套件,如NuGet官方的 Registry。 - group:
倉儲庫组,用来合併多個 hosted/proxy 倉儲庫,通常配置成 maven 或是 npm 依賴的倉儲庫組。
系統預設會幫我們建立好 Maven 與 NuGet 的 Repository,而接下來我們將逐一嘗試 NuGet, npm 與 Maven 的套件上傳。
NuGet
這邊 NuGet 的 Package 建立與上傳方式細節請參考Using Package from Private NuGet Server in TFS2017,以下只節錄重點修改:
確認當前有可使用的 NuGet Repository Feed :
而我們可以透過以下指令建立 NuGet Repo 的連線:
nuget.exe sources add -name “Nexus” -source “http://localhost:8081/repository/nuget-hosted/"
接著我們將先介紹如何產生 apikey。申請 NuGet API Key 只需兩個步驟:
將 NuGet API Key Realm 設為啟用:
產生當前帳號的 API Key :
然後執行下面指令,將產生的 apikey 加入當前環境 :
nuget.exe setapikey
接著至欲上傳的套件下執行該指令上傳即可:
如果不申請 NuGet API Token 則是用預設帳號密碼也可以上傳:
完成後可以從看到下面的畫面:
npm
使用 npm 的 Package 建立與上傳方式細節請參考 Using Package from Private NPM Regisry in TFS2017
由於 npm feed 預設沒有建立,所以要自己手動新增:
這邊有兩種連線認證方式可透過 帳號密碼產生Auth認證碼 或是額外啟用 npm Realm and Login 的方式直接輸入帳號密碼登入。
這邊簡單介紹一下 _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 執行步驟:
建立一個
透過 certutil 與命令列執行以下指令:
certutil /encode
產生的內容會如下:
將中間的內容貼入 .npmrc 的 _auth 設定即可
透過任一種方式設定完成連線認證即可成功上傳套件:
完成上傳的套件如下:
Maven
詳細的 Maven Package 製作可以參考 Using Package from Maven and Package Management in TFS2017。
這邊因為預設安裝已經有安裝好 Maven Registry Feed 了,所以我們可以將 release 與 snapshot 的部分設定到本機開發環境中:
pom.xml
<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
<?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
套件至網頁如下呈現: