Dalam artikel ini, saya akan mengajak Anda melalui proses penyiapan package pribadi di GitLab — langkah penting untuk manajemen kode dan kolaborasi yang aman. Pelajari cara mengaktifkan package registry, mempublikasikan dan mengelola paket pribadi dengan aman, dan memastikan distribusi kode milik organisasi Anda terkendali.
(Opsional) Membuat Proyek
Jika Anda belum memiliki package yang akan dipublikasikan, mari kita buat yang baru.
Inisialisasi proyek Node.js:
# init a nodejs project npm init -y
Buat fungsi penjumlahan sederhana di app.js. Kita hanya membuat fungsi sederhana dengan commonJS agar nanti bisa di import atau require
// app.js function addition(a, b) { return a + b; } module.exports = addition
Rubah file package.json
{ "name": "@my-org/simpleadd", "version": "1.0.0", "description": "A simple addd function", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "Your name", "license": "ISC" }
Sekarang kita siap melanjutkan. Tujuan akhirnya adalah dapat menggunakan modul ini di proyek Node dengan import atau require.
import addition from "@my-org/simpleadd"; // or const addition = require("@my-org/simpleadd"); console.log(addition(9,7)) // -> 16
Memahami Instance, Group dan Proyek di GitLab
Ketika mengembangkan dan mempublikasikan paket di GitLab, istilah Instance, Group dan Project penting untuk dipahami, karena beberapa konvensi dibagi berdasarkan kategori ini.
- Sebuah Project mewakili repositori individu yang berisi kode sumber, dokumentasi, dan aset lain terkait proyek perangkat lunak tertentu.
- Sebuah Group di GitLab adalah struktur organisasi yang memungkinkan pengguna mengkategorikan dan mengelola beberapa proyek terkait. Dengan mengelompokkan proyek bersama, tim dapat berkolaborasi secara efisien pada inisiatif yang lebih besar dan mengelola izin serta kontrol akses secara kolektif.
- Sebuah Instance mengacu pada seluruh ekosistem GitLab, mewakili instalasi GitLab individual pada server. Sebagai manajer paket Git sumber terbuka, GitLab menyediakan fleksibilitas untuk diinstal dan di-host pada berbagai server. Dalam konteks ini, istilah "instance" adalah instalasi GitLab spesifik, beserta semua repositori dan group yang dikelolanya. Contoh instance GitLab adalah yang di-host Microsoft di https://gitlab.com.
Gambar di atas menggambarkan struktur dari instance GitLab. Sebuah instance bisa memiliki banyak group atau proyek. Sebuah group bisa memiliki subgroup dan proyek. Sebuah proyek adalah entitas mandiri.
Membuat Package NPM Tingkat Instance
Kita ingin package dapat diinstal di semua proyek dalam instance GitLab. Maka kita perlu mematuhi konvensi penamaan dengan menambahkan awalan scope untuk nama paket.
Awalan scope adalah nama Group kita. Misalkan URL proyek paket kita adalah "https://gitlab.com/my-org/teknik/analytik". Maka lingkupnya adalah @my-org
. Jadi, nama paket kita akan menjadi @my-org/nama-paket
. Pastikan nama di dalam package.json adalah "name": "@my-org/nama-paket"
.
Mempublikasikan Paket
Ada dua pendekatan yang bisa kita ambil untuk mempublikasikan paket - melalui Command line atau pipeline GitLab.
Publikasi melalui Command line
Buat file .npmrc di root proyek yang berisi:
@my-org:registry=https://gitlab.com/api/v4/projects/your_project_id/packages/npm/ //gitlab.com/api/v4/projects/your_project_id/packages/npm/:_authToken="NPM_TOKEN"
Tambahkan snippet ini ke package.json:
"publishConfig": { "@my-org:registry": "https://gitlab.com/api/v4/projects/your_project_id/packages/npm/" }
Setelah semuanya siap dan kode package Anda sudah di-push ke repository remot, jalankan perintah ini di terminal:
npm publish
Sekarang paket Anda sudah diterbitkan dan dapat ditemukan di Deploy > package registry
Catatan
- Dapatkan project id di menu Project overview proyekmu
NPM_TOKEN
dapat didapatkan dari menu Settings > Repository > Deploy tokens, lalu buat token baru dengan scoperead_package_registry
danwrite_package_registry
.
Publikasi melalui Pipeline CI/CD
Pendekatan ini lebih sederhana dan tidak memerlukan token deploy. Anda dapat menghapus file .npmrc jika mempublikasi melalui pipeline. Sebagai gantinya, buat file .gitlab-ci.yml yang berisi:
image: node:latest stages: - deploy deploy: stage: deploy script: - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">.npmrc - npm publish
Sekarang, setiap kali Anda push pembaruan ke repositori remot, pipeline akan berjalan dan mempublikasikannya secara otomatis. Jangan lupa ubah versi package di package.json, atau publikasi akan gagal jika versi sudah ada.
Menginstal Paket di Suatu Proyek
Sekarang, mari kita instal paket yang telah dipublikasikan ke dalam suatu proyek Node.js.
Buat file .npmrc berisi:
@my-org:registry=https://gitlab.com/api/v4/packages/npm/ '//gitlab.com/api/v4/packages/npm/:_authToken'=NPM_TOKEN
Baris pertama berisi deklarasi scope, kita menggunakan scope tingkat instance. Baris kedua adalah autentikasi menggunakan NPM_TOKEN
yang sebelumnya dibuat. Kemudian setelah menambahkan file ini di proyekmu, jalankan perintah
npm install @my-org/nama-paket
Selesai! Coba import fungsi tersebut dan tes apakah berjalan dengan baik.
const add = require("@my-org/simpleadd"); console.log(add(2, 4));
Referensi
https://docs.gitlab.com/ee/user/packages/npm_registry/