Nexus Repository

Nexus Repository là công cụ lưu trữ artifact mạnh mẽ, hỗ trợ nhiều định dạng như Maven, npm, Docker. Nó giúp quản lý phiên bản, phân quyền truy cập, tích hợp CI/CD, bảo mật và tăng tốc quá trình build phần mềm trong môi trường DevOps hiện đại.
Setup Nexus
Chuẩn bị môi trường
Docker
Thư mục để lưu dữ liệu:
/opt/nexus-dataPort 8081 chưa sử dụng
Chạy container Nexus
docker run -d -p 8081:8081 --name nexus \ -v /opt/nexus-data:/nexus-data \ sonatype/nexus3Truy cập giao diện
http://<IP-server>:8081Đăng nhập
Tài khoản:
adminMật khẩu:
/nexus-data/admin.password
docker exec nexus cat /nexus-data/admin.password
- Dashboard

Repository Types in Nexus
Trong Nexus Repository, có 3 loại repo chính mà bạn cần nắm rõ để triển khai đúng mục đích:
🏠 Hosted Repository
Dùng để lưu trữ artifact nội bộ do team build ra. Đây là nơi bạn upload .jar, image docker, package npm
📌 Example:
internal-maven: lưu thư viện Java nội bộdocker-local: lưu image Dockernpm-private: lưu package frontend nội bộ
Cách tạo:
Vào Settings → Repositories → Create repository
Chọn loại:
hostedChọn định dạng: Maven, npm, Docker, Raw...
Đặt tên repo, chọn chế độ (Release/Snapshot)
🌐 Proxy Repository
Dùng để cache artifact từ nguồn bên ngoài, giúp tăng tốc độ build và giảm phụ thuộc vào internet. Nexus sẽ tự tải về và lưu lại khi bạn dùng lần đầu.
📌 Ví dụ thực tế:
maven-central-proxy: proxy từ Maven Centralnpmjs-proxy: proxy từ registry.npmjs.orgdocker-hub-proxy: proxy từ Docker Hub
Cách tạo:
Chọn loại:
proxyNhập URL nguồn gốc (ví dụ: https://registry.npmjs.org)
Nexus sẽ tự lưu lại các artifact được truy cập
🧩 Group Repository
Dùng để gom nhiều repo lại thành một endpoint duy nhất. Rất tiện cho client vì chỉ cần cấu hình một URL duy nhất.
📌 Ví dụ thực tế:
maven-public: gồminternal-maven,maven-central-proxynpm-all: gồmnpm-private,npmjs-proxy
Cách tạo:
Chọn loại:
groupChọn các repo con để gom vào
Sắp xếp thứ tự ưu tiên (internal trước, proxy sau)
Privilege Types in Nexus
🔍 Repository View Privilege
Mục tiêu: Cho phép user upload artifact vào repository maven-releases.
Cách tạo:
Vào Security > Privileges > Create privilege.
Chọn loại:
Repository View.Chọn format:
maven2.Chọn repository:
maven-releases.Chọn hành động:
add,browse.Đặt tên:
push-maven-releases.Nhấn Create.
📌 Gán vào role để user có thể upload bằng Maven.
🛠 Repository Admin Privilege
Mục tiêu: Cho phép DevOps tạo repository kiểu docker-hosted.
Cách tạo:
Vào Security > Privileges > Create privilege.
Chọn loại:
Repository Admin.Chọn format:
docker.Chọn hành động:
create.Đặt tên:
admin-create-docker.Nhấn Create.
📌 Gán cho role quản trị để cấu hình repository.
🧭 Application Privilege
Mục tiêu: Cho phép user truy cập giao diện UI và xem danh sách task.
Cách tạo:
Vào Security > Privileges > Create privilege.
Chọn loại:
Application.Chọn domain:
ui,tasks.Chọn hành động:
read,browse.Đặt tên:
ui-task-access.Nhấn Create.
📌 Gán cho role giám sát hệ thống.
🎯 Content Selector Privilege
Mục tiêu: Chỉ cho phép user upload artifact có groupId bắt đầu bằng com.mycompany.
Cách tạo:
Vào Security > Content Selectors > Create selector.
Đặt tên:
com-mycompany-selector.Cú pháp:
group == "com.mycompany"hoặcpath =~ "^com/mycompany/.*"(tùy định dạng).Vào Privileges > Create privilege.
Chọn loại:
Content Selector.Chọn hành động:
add,browse.Gán selector vừa tạo.
Đặt tên:
push-com-mycompany.Nhấn Create.
📌 Gán cho role để giới hạn nội dung được phép upload.
📜 Script Privilege
Mục tiêu: Cho phép DevOps chạy script Groovy tự động hóa.
Cách tạo:
Vào Security > Privileges > Create privilege.
Chọn loại:
Script.Chọn hành động:
read,create,execute.Đặt tên:
script-executor.Nhấn Create.
📌 Gán cho role DevOps để chạy script qua API hoặc UI.
🔎 Search Privilege
Mục tiêu: Cho phép user tìm kiếm artifact mà không được tải về.
Cách tạo:
Vào Security > Privileges > Create privilege.
Chọn loại:
Search.Chọn hành động:
read.Đặt tên:
search-only.Nhấn Create.
📌 Gán cho role QA hoặc developer để tra cứu thông tin.
🔐Role & User in Nexus
🛡️Role
Bạn có thể tạo role mới để gom các quyền phù hợp với từng nhóm người dùng.
Các bước:
Vào Security → Roles → Create role.
Nhập tên role (ví dụ:
dev-deploy-snapshot).Gán các privilege như:
nx-repository-view-maven2-snapshots-addnx-repository-view-maven2-snapshots-editnx-repository-view-maven2-snapshots-read
📌 Mẹo: Tạo role riêng cho từng môi trường (dev/test/prod) để tránh nhầm lẫn khi deploy.
👤User & Grant Role
Các bước:
Vào Security → Users → Create user.
Nhập thông tin: username, email, password.
Gán role đã tạo ở bước trên.
🔐 Repository-level Access Control
Bạn có thể giới hạn quyền theo từng repository cụ thể.
Ví dụ:
Nhóm
Devchỉ được deploy vàosnapshots.Nhóm
Releaseđược deploy vàoreleases.
📌 Privilege theo repo có dạng:nx-repository-view-[format]-[repo-name]-[action]
Ví dụ:nx-repository-view-maven2-releases-add → Cho phép deploy vào repo releases
🚀Artifact Deployment & Retrieval in Nexus
Nexus hỗ trợ nhiều cách để đưa artifact lên repository:
🧪 Maven
Cấu hình trong pom.xml:
<distributionManagement>
<repository>
<id>releases</id>
<url>http://your-nexus-host/repository/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://your-nexus-host/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Cấu hình settings.xml để xác thực:
<servers>
<server>
<id>releases</id>
<username>your-username</username>
<password>your-password</password>
</server>
</servers>
Deploy bằng lệnh:
mvn deploy
⚙️ Gradle
Sử dụng plugin maven-publish:
publishing {
repositories {
maven {
url "http://your-nexus-host/repository/releases/"
credentials {
username = 'your-username'
password = 'your-password'
}
}
}
}
Install dependency from Proxy Repository
Proxy repo giúp bạn tải artifact từ nguồn bên ngoài như Maven Central, npm, PyPI… nhưng thông qua Nexus.
🔍 Cách hoạt động:
Developer thêm dependency vào project
Maven/Gradle gửi request đến Nexus
Nexus kiểm tra cache → nếu chưa có → tải từ nguồn gốc → lưu lại
🧰 Ví dụ:
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus-repository.hoangpv.shop/repository/maven2-proxy/</url>
</mirror>
</mirrors>
📌 Lợi ích:
Tăng tốc độ build do cache nội bộ
Kiểm soát version và nguồn artifact
Giảm phụ thuộc vào mạng ngoài
Integrate Nexus with Jenkins
Configure Nexus Repository
Tạo Proxy Repository
Đóng vai trò trung gian để tải các dependencies từ Maven Central, lưu lại và phục vụ từ cache cho lần sao.

Thao tác:
Vào Settings → Repositories → Create repository
Chọn loại:
proxyChọn định dạng:
maven2Đặt tên:
maven2-proxyNhập Remote storage:
https://repo1.maven.org/maven2/Nhấn Create
Tạo Hosted Repository
Dùng để lưu trữ artifact
snapshotnội bộ như.jar,.war,…Thao tác:
Vào Settings → Repositories → Create repository
Chọn loại:
hostedChọn định dạng:
maven2Đặt tên:
maven2-artifact-snapshotChọn chế độ:
SnapshotNhấn Create

Tương tự tạo thêm repository maven2-artifact-release:

- Create User & Grant Permission
| User | Role | Repository | Privilege |
dev-dependency | role-install-dependency | maven2-proxy | nx-repository-view-maven2-maven2-proxy-read |
dev-snapshot | role-upload-snapshot | maven2-artifact-snapshot | nx-repository-view-maven2-maven2-artifact-snapshot-edit nx-repository-view-maven2-maven2-artifact-snapshot-read |
dev-release | role-upload-release | maven2-artifact-release | nx-repository-view-maven2-maven2-artifact-release-edit nx-repository-view-maven2-maven2-artifact-release-read |


Configure Maven Dependency in Jenkins
Thêm file settings.xml vào ~/.m2 trong jenkins:
cat <<EOF > ~/.m2/settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0
https://maven.apache.org/xsd/settings-1.1.0.xsd">
<localRepository>~/.m2/repository</localRepository>
<pluginGroups>
<pluginGroup>org.apache.maven.plugins</pluginGroup>
<pluginGroup>org.codehaus.mojo</pluginGroup>
</pluginGroups>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus-repository.hoangpv.shop/repository/maven2-proxy/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus</id>
<username>dev-dependency</username>
<password>123456</password>
</server>
</servers>
</settings>
EOF

Maven bây giờ đã tải thông qua maven2-proxy:

Các dependency đã được lưu trữ trên Nexus:

Configure Upload Artifact to Nexus
Cài đặt plugin Nexus
- Nexus Artifact Uploader

Tạo Credential cho user Nexus


Tạo job pipeline
pipeline{ agent any tools { maven "maven3" } stages { stage('Checkout from Git'){ steps{ git branch: 'main', url: 'https://github.com/HoangPhan10/springboot-hello' } } stage('Build'){ steps{ sh 'mvn compile' } } stage('Test'){ steps{ sh 'mvn test' } } stage('Artifact'){ steps{ sh 'mvn package' } } stage("Upload Artifact"){ steps{ nexusArtifactUploader artifacts: [ [artifactId: 'helloworld', classifier: '', file: 'target/TestExternal-0.0.1-SNAPSHOT.war', type: 'war']], credentialsId: 'dev-snapshot', groupId: 'repo-helloworld-snapshot', nexusUrl: '10.0.1.2:8081', nexusVersion: 'nexus3', protocol: 'http', repository: 'maven2-artifact-snapshot', version: "${env.BUILD_ID}-SNAPSHOT" } } } }Pipeline log

File
.warđã được đẩy lênmaven2-artifact-snapshot
💡Đây là những bước mình đã áp dụng thực tế trong dự án nội bộ, và nó đã giúp team tiết kiệm rất nhiều thời gian khi build và deploy. Nếu bạn đang gặp khó khăn trong việc quản lý artifact hoặc muốn tăng tốc CI/CD, Nexus chắc chắn là một lựa chọn đáng cân nhắc.



