Trong Jenkins, một Shared Library là một kho lưu trữ chứa các script và code được sử dụng để mở rộng các khả năng của Jenkins. Thông thường, các script này được phát triển và duy trì riêng tại mỗi dự án, điều này có thể gây ra sự trùng lặp và khó khăn trong việc bảo trì. Với Shared Library, các script được lưu trữ tập trung và có thể được sử dụng bởi nhiều dự án khác nhau.
Việc sử dụng Shared Library giúp cho việc phát triển và duy trì Jenkins được dễ dàng hơn bằng cách cung cấp các module được chia sẻ giữa các dự án, giảm thiểu sự trùng lặp và tăng tính linh hoạt trong việc quản lý mã nguồn. Nó cũng cung cấp khả năng kiểm soát phiên bản cho các script và code được sử dụng trong các dự án khác nhau, đảm bảo tính ổn định và sự đồng nhất trong các phiên bản của các script được sử dụng.
Ví dụ sau đây cho thấy cách sử dụng một Shared Library trong một Jenkinsfile:
@Library('my-shared-library') _
pipeline {
agent any
stages {
stage('Build') {
steps {
// Sử dụng một hàm từ Shared Library để build code
myBuildFunction()
}
}
stage('Test') {
steps {
// Sử dụng một hàm từ Shared Library để chạy các bài kiểm tra
myTestFunction()
}
}
}
}
Ở đây, @Library('my-shared-library') _
sẽ tải Shared Library có tên là “my-shared-library” vào trong Jenkinsfile. Sau đó, các hàm myBuildFunction()
và myTestFunction()
được gọi trong các stage của pipeline để thực hiện các tác vụ như build và kiểm tra.
Một cách tiếp cận khác để sử dụng Shared Library trong Jenkinsfile là thông qua câu lệnh library
như sau:
pipeline {
agent any
stages {
stage('Build') {
steps {
// Sử dụng một hàm từ Shared Library để build code
library('my-shared-library')
myBuildFunction()
}
}
stage('Test') {
steps {
// Sử dụng một hàm từ Shared Library để chạy các bài kiểm tra
library('my-shared-library')
myTestFunction()
}
}
}
}
Ở đây, câu lệnh library('my-shared-library')
sẽ tải Shared Library có tên là “my-shared-library” vào trong pipeline, và sau đó các hàm myBuildFunction()
và myTestFunction()
được gọi trong các stage tương ứng.
Các hàm trong một Shared Library phải được định nghĩa bên trong thư mục vars/
và có tên tương ứng với tên của hàm. Ví dụ, nếu bạn muốn định nghĩa một hàm myBuildFunction()
trong thư viện my-shared-library
, bạn sẽ tạo một file có tên myBuildFunction.groovy
trong thư mục vars/
và định nghĩa hàm như sau:
def call() {
// Các bước để build code của bạn ở đây
// Ví dụ:
sh 'npm install'
sh 'npm run build'
}
Trong ví dụ này, hàm myBuildFunction()
định nghĩa các bước để build code. Các bước được thực hiện bằng cách sử dụng câu lệnh shell sh
để chạy các lệnh npm để cài đặt các gói phụ thuộc và build code.
Sau khi định nghĩa hàm myBuildFunction()
trong file myBuildFunction.groovy
, bạn có thể sử dụng nó trong Jenkinsfile như đã mô tả ở phần trước đó.
Trong Jenkins, có một số tính năng có thể được sử dụng để thay thế hoặc bổ sung cho Shared Libraries, tuy nhiên, chúng có mục đích và cách thức hoạt động khác nhau.
Một số tính năng tương tự như Shared Libraries là:
- Pipeline Templates: Là một tính năng cho phép định nghĩa các template cho pipeline để sử dụng lại. Các template này có thể chứa các bước, stage và các cài đặt khác và được sử dụng để tạo ra các pipeline mới.
- Pipeline Snippets: Là một tính năng cho phép tạo ra các snippet code để sử dụng trong pipeline. Các snippet này có thể chứa các bước, stage và các cài đặt khác và được sử dụng để tạo ra các pipeline mới.
Tuy nhiên, cả hai tính năng trên đều có những giới hạn về tính linh hoạt so với Shared Libraries, vì chúng chỉ cho phép sử dụng lại các bước cố định hoặc snippet code đã định nghĩa trước đó.
Vì vậy, nếu bạn cần sử dụng các script và code linh hoạt hơn trong các pipeline của mình, Shared Libraries vẫn là tính năng được ưa chuộng và được khuyến khích sử dụng trong Jenkins.