Lập Trình, Devops & CI/CD

Jenkins là gì? Hướng dẫn tạo CI/CD Pipeline đơn giản bằng Jenkinsfile

Chia sẻ

Jenkins là gì? Hướng dẫn tạo CI/CD Pipeline đơn giản bằng Jenkinsfile

Trong thế giới phát triển phần mềm hiện đại, tốc độ và sự tự động hóa là yếu tố quyết định. Jenkins chính là công cụ hàng đầu, được mệnh danh là “trái tim” của quy trình CI/CD (Tích hợp Liên tục/Triển khai Liên tục), giúp tự động hóa toàn bộ quá trình từ viết mã đến triển khai sản phẩm.

Bài viết này sẽ giúp bạn hiểu rõ Jenkins là gì, tại sao nó lại quan trọng, và hướng dẫn bạn cách tạo một CI/CD Pipeline đơn giản nhất.

1. Jenkins là gì?

Jenkins là một máy chủ tự động hóa mã nguồn mở, dựa trên Java, được thiết kế để hỗ trợ quy trình Tích hợp Liên tục (Continuous Integration – CI)Triển khai Liên tục (Continuous Delivery – CD).

    • Mục tiêu chính: Tự động hóa các tác vụ lặp đi lặp lại trong quy trình phát triển phần mềm, bao gồm: biên dịch mã, kiểm thử, đóng gói và triển khai ứng dụng.

    • Điểm mạnh: Jenkins có cộng đồng người dùng lớn và kho plugins đồ sộ (hơn 1800 plugins) cho phép nó tích hợp với hầu hết các công cụ và nền tảng (Git, Docker, Kubernetes, AWS, Azure…).

2. CI/CD Pipeline là gì?

CI/CD Pipeline là một chuỗi các bước tự động hóa được xác định rõ ràng, mô tả cách phần mềm được đưa từ giai đoạn phát triển đến tay người dùng.

Pipeline cơ bản thường bao gồm 4 giai đoạn chính:

  1. Code (Mã hóa): Nhà phát triển commit code lên kho lưu trữ (Git).

  2. Build (Xây dựng): Biên dịch mã nguồn, tạo ra Artifact (ví dụ: file .jar, .war hoặc Docker Image).

  3. Test (Kiểm thử): Chạy các bài kiểm thử tự động (Unit Test, Integration Test).

  4. Deploy (Triển khai): Đưa Artifact đã vượt qua kiểm thử lên môi trường Staging hoặc Production.

3. Hướng dẫn tạo CI/CD Pipeline đơn giản bằng Jenkinsfile

Trong Jenkins, Pipeline được định nghĩa bằng một tập tin văn bản gọi là Jenkinsfile. Việc này được gọi là Pipeline as Code (Pipeline dưới dạng Mã nguồn).

Jenkinsfile thường được viết bằng ngôn ngữ Groovy và có hai cú pháp chính: Declarative (Tuyên bố) và Scripted (Lập trình). Chúng ta sẽ sử dụng cú pháp Declarative vì nó dễ đọc và dễ hiểu hơn.

Cấu trúc Jenkinsfile cơ bản

Đây là cấu trúc đơn giản cho một CI/CD Pipeline gồm 3 bước: Lấy mã nguồn, Build và Test.

Groovy
pipeline {
    // 1. Chỉ định nơi chạy Pipeline (ví dụ: bất kỳ Agent nào có sẵn)
    agent any

    // 2. Định nghĩa các biến môi trường (nếu cần)
    // environment {
    //     PROJECT_NAME = 'MySimpleApp'
    // }

    // 3. Định nghĩa các giai đoạn (Stages)
    stages {
        // Giai đoạn 1: Lấy mã nguồn (Continuous Integration)
        stage('SCM Checkout') {
            steps {
                echo '>>> Bắt đầu lấy mã nguồn từ Git...'
                // Thay thế URL này bằng repository của bạn
                git 'https://github.com/ten_tai_khoan/ten_repository.git'
            }
        }

        // Giai đoạn 2: Build ứng dụng
        stage('Build') {
            steps {
                echo '>>> Bắt đầu biên dịch và đóng gói...'
                // Ví dụ: Lệnh build cho dự án Node.js
                sh 'npm install'
                sh 'npm run build'
                // Hoặc mvn package cho dự án Java
            }
        }

        // Giai đoạn 3: Kiểm thử
        stage('Test') {
            steps {
                echo '>>> Chạy các bài kiểm thử tự động...'
                // Ví dụ: Chạy Unit Test
                sh 'npm test'
                // Nếu Test Fail, Pipeline sẽ dừng lại tại đây
            }
        }

        // Giai đoạn 4 (Tùy chọn): Triển khai (Continuous Delivery/Deployment)
        stage('Deploy') {
            steps {
                echo '>>> Triển khai lên môi trường Staging...'
                // Ví dụ: Dùng lệnh ssh hoặc Docker để đẩy ứng dụng
                sh 'docker push myapp:latest'
            }
        }
    }

    // 4. Các hành động sau khi Pipeline hoàn thành
    post {
        always {
            echo 'Pipeline hoàn thành. Kiểm tra kết quả...'
        }
        success {
            echo 'Pipeline chạy thành công! Sản phẩm sẵn sàng.'
        }
        failure {
            echo 'Pipeline thất bại. Vui lòng kiểm tra Logs.'
        }
    }
}

Cách thực thi Pipeline trong Jenkins

  1. Lưu Jenkinsfile: Đặt tập tin này vào thư mục gốc (Root) của Repository Git mà bạn muốn xây dựng.

  2. Tạo Job mới: Trong giao diện Jenkins, chọn New Item > Chọn kiểu Pipeline.

  3. Cấu hình Source Code: Trong phần cấu hình Job, bạn chọn Pipeline SCM (Source Code Management), chỉ định URL Git Repository và tên nhánh (branch) chứa Jenkinsfile.

  4. Chạy Build: Jenkins sẽ tự động đọc Jenkinsfile trong Repository của bạn và thực hiện các giai đoạn (stages) theo đúng thứ tự.

4. Lợi ích khi dùng Jenkins Pipeline

  • Minh bạch: Toàn bộ quy trình được định nghĩa bằng mã nguồn và lưu trữ trong Git, dễ dàng xem xét (Review) và theo dõi.

  • Khả năng mở rộng: Dễ dàng thêm các bước phức tạp (như quét bảo mật, triển khai đa môi trường) mà không cần thay đổi cấu hình thủ công.

  • Tính linh hoạt: Jenkins hỗ trợ chạy các bước song song, xử lý lỗi chi tiết và gửi thông báo linh hoạt.

Kết luận

Jenkins là công cụ không thể thiếu đối với mọi đội ngũ DevOps, giúp tự động hóa triệt để và mang lại khả năng phát hành phần mềm nhanh hơn, đáng tin cậy hơn. Việc thành thạo Jenkinsfile là kỹ năng cốt lõi để xây dựng các Pipeline tự động hóa mạnh mẽ.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *