Skip to main content

Command Palette

Search for a command to run...

Nexus Repository

Updated
7 min read
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

  1. Chuẩn bị môi trường

    • Docker

    • Thư mục để lưu dữ liệu: /opt/nexus-data

    • Port 8081 chưa sử dụng

  2. Chạy container Nexus

     docker run -d -p 8081:8081 --name nexus \
       -v /opt/nexus-data:/nexus-data \
       sonatype/nexus3
    
  3. Truy cập giao diện

     http://<IP-server>:8081
    
  4. Đăng nhập

    • Tài khoản: admin

    • Mật khẩu: /nexus-data/admin.password

    docker exec nexus cat /nexus-data/admin.password
  1. 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 Docker

  • npm-private : lưu package frontend nội bộ

Cách tạo:

  • Vào Settings → Repositories → Create repository

  • Chọn loại: hosted

  • Chọ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 Central

  • npmjs-proxy: proxy từ registry.npmjs.org

  • docker-hub-proxy: proxy từ Docker Hub

Cách tạo:

  • Chọn loại: proxy

  • Nhậ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ồm internal-maven, maven-central-proxy

  • npm-all: gồm npm-private, npmjs-proxy

Cách tạo:

  • Chọn loại: group

  • Chọ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:

  1. Vào Security > Privileges > Create privilege.

  2. Chọn loại: Repository View.

  3. Chọn format: maven2.

  4. Chọn repository: maven-releases.

  5. Chọn hành động: add, browse.

  6. Đặt tên: push-maven-releases.

  7. 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:

  1. Vào Security > Privileges > Create privilege.

  2. Chọn loại: Repository Admin.

  3. Chọn format: docker.

  4. Chọn hành động: create.

  5. Đặt tên: admin-create-docker.

  6. 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:

  1. Vào Security > Privileges > Create privilege.

  2. Chọn loại: Application.

  3. Chọn domain: ui, tasks.

  4. Chọn hành động: read, browse.

  5. Đặt tên: ui-task-access.

  6. 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:

  1. Vào Security > Content Selectors > Create selector.

  2. Đặt tên: com-mycompany-selector.

  3. Cú pháp: group == "com.mycompany" hoặc path =~ "^com/mycompany/.*" (tùy định dạng).

  4. Vào Privileges > Create privilege.

  5. Chọn loại: Content Selector.

  6. Chọn hành động: add, browse.

  7. Gán selector vừa tạo.

  8. Đặt tên: push-com-mycompany.

  9. 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:

  1. Vào Security > Privileges > Create privilege.

  2. Chọn loại: Script.

  3. Chọn hành động: read, create, execute.

  4. Đặt tên: script-executor.

  5. 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:

  1. Vào Security > Privileges > Create privilege.

  2. Chọn loại: Search.

  3. Chọn hành động: read.

  4. Đặt tên: search-only.

  5. 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:

  1. Vào Security → Roles → Create role.

  2. Nhập tên role (ví dụ: dev-deploy-snapshot).

  3. Gán các privilege như:

    • nx-repository-view-maven2-snapshots-add

    • nx-repository-view-maven2-snapshots-edit

    • nx-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:

  1. Vào Security → Users → Create user.

  2. Nhập thông tin: username, email, password.

  3. 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 Dev chỉ được deploy vào snapshots.

  • Nhóm Release được deploy vào releases.

📌 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:

  1. Developer thêm dependency vào project

  2. Maven/Gradle gửi request đến Nexus

  3. 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

  1. 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: proxy

    • Chọn định dạng: maven2

    • Đặt tên: maven2-proxy

    • Nhập Remote storage: https://repo1.maven.org/maven2/

    • Nhấn Create

  2. Tạo Hosted Repository

    Dùng để lưu trữ artifact snapshot nội bộ như .jar,.war,…

    Thao tác:

    • Vào Settings → Repositories → Create repository

    • Chọn loại: hosted

    • Chọn định dạng: maven2

    • Đặt tên: maven2-artifact-snapshot

    • Chọn chế độ: Snapshot

    • Nhấn Create

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

  1. Create User & Grant Permission
UserRoleRepositoryPrivilege
dev-dependencyrole-install-dependencymaven2-proxynx-repository-view-maven2-maven2-proxy-read
dev-snapshotrole-upload-snapshotmaven2-artifact-snapshotnx-repository-view-maven2-maven2-artifact-snapshot-edit nx-repository-view-maven2-maven2-artifact-snapshot-read
dev-releaserole-upload-releasemaven2-artifact-releasenx-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

  1. Cài đặt plugin Nexus

    • Nexus Artifact Uploader

  1. Tạo Credential cho user Nexus

  2. 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"
                     }
             }
         }
     }
    
  3. Pipeline log

  4. File .war đã được đẩy lên maven2-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.