Membuat Package NPM Pribadi di GitLab

27 Jul 2023 · 4 menit baca

Link berhasil di copy
Setup a private NPM package in Gitlab illustration

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.

gitlab instances

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 project id
  • NPM_TOKEN dapat didapatkan dari menu Settings > Repository > Deploy tokens, lalu buat token baru dengan scope read_package_registry dan write_package_registry. deploy tokens

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/

Emot's Space © 2024