Jenkins Pipeline là gì ? Tổng quan Jenkins Pipeline CI/CD

Jenkins Pipeline là gì ? Tổng quan Jenkins Pipeline CI/CDCuongquach.com | Pipeline CICD là một trong những nội dung rất quan trọng và mặc định một DevOps phải nắm vững và có kiến thức về nó. Trong phần này ta không đào sâu về Pipeline CICD mà sẽ tìm hiểu xem công cụ Jenkins có những hỗ trợ và tính năng gì để xây dựng một Pipeline CICD .

jenkins-pipeline-la-gi

Pipeline CI/CD là gì ?

Như ta biết thì hoạt động CI/CD tự động hóa các quá trình Build, Test (Unit Test, Intergration Test, Smoke Test, BDD, ATDD, Security Test, Performance Test…), Deploy, Delivery,… giúp mỗi khi source code có thay đổi thì ngay lập tức thay đổi đó được chạy qua các quá trình liệt kê ở trên, đảm bảo các quá trình chạy đúng, không có vấn đề gì xảy ra. Từ đó CI/CD giúp đảm bảo chất lượng sản phẩm, đẩy nhanh quá trình phát triển, giảm chi phí vận hành và phát triển.

Pipeline CI/CD là tập hợp quy trình thứ tự của các tác vụ được khai báo cho hoạt động build, test, deploy,… sản phẩm. Với CI/CD pipeline, mỗi khi phát hiện sự thay đổi trong mã nguồn dự án phần mềm, mã nguồn sẽ được CI/CD Server như Jenkins tiến hành build và kiểm tra tự động. Nếu nó vượt qua các phần kiểm soát chất lượng và tất cả các bài kiểm tra vượt qua, nó sẽ tự động được triển khai.

visual pipline
visual pipline

Jenkins Pipeline là gì ?

Jenkins Pipeline là bộ công cụ plugin hỗ trợ giúp triển khai và tích hợp quy trình CI/CD pipeline vào Jenkins.

Trong những năm qua, đã có nhiều bản phát hành pipeline Jenkins bao gồm: Jenkins Build Flow, plugin Jenkins Build Pipeline, Jenkins Workflow, v.v … Các tính năng chính của các plugin này là gì ?

  • Plugin sẽ sắp xếp thể hiện các job trong một bộ quy trình CI/CD flow dưới dạng một quy chuẩn pipeline.
  • Các pipeline này là tập hợp các job Jenkins được kích hoạt có điều kiện với nhau theo một trình tự diễn biến cụ thể.

Ví dụ: giả sử team đang phát triển một ứng dụng nhỏ trên Jenkins và tôi muốn build, test và deploy ứng dụng này. Để làm điều này, nếu làm cách truyền thống thì ta sẽ cần phân bổ 3 job để thực hiện mỗi quy trình. Vì vậy, job1 sẽ dùng để build, job2 sẽ thực hiện các bài kiểm tra (testing) và job3 để triển khai ứng dụng (deploy). Ta có thể sử dụng plugin xây dựng một pipeline Jenkins để thực hiện quy trình gồm thứ tự 3 job này.

Hình ảnh sau thể hiện sơ đồ 3 job của một Jenkins pipeline

build jenkins pipeline
build jenkins pipeline

Cách tiếp cận này có hiệu quả khi triển khai các ứng dụng nhỏ. Nhưng điều gì xảy ra khi có xây dựng một pipeline phức tập hơn với một số quy trình (build, test, unit test, integration test, pre-deploy, deploy, monitor) chạy cả 100 job khác nhau.

build pipeline jenkins
build pipeline jenkins

Chi phí xây dựng và bảo trì cho một pipeline phức tạp như vậy là rất lớn và tăng theo số lượng quy trình. Nó cũng trở nên tẻ nhạt để xây dựng và quản lý một số lượng lớn các job như vậy. Để khắc phục vấn đề này, một tính năng mới có tên Jenkins Pipeline Project đã được giới thiệu.

Tính năng chính của Jenkins Pipeline Project này là giúp bạn định nghĩa khai báo toàn bộ flow quy trình triển khai CI/CD thông qua mã code. Điều đó có nghĩa là gì? Điều đó có nghĩa là tất cả các công việc tiêu chuẩn được xác định bởi Jenkins đều có thể được khai báo viết thủ công dưới dạng toàn bộ tập lệnh và chúng có thể được lưu trữ trong một hệ thống kiểm soát phiên bản (Source Version Control). Thay vì xây dựng một số job cho từng giai đoạn, giờ đây bạn có thể lập trình code toàn bộ quy trình công việc và đưa nó vào Jenkinsfile (jenkinsfile là gì thì đọc tiếp phần dưới).

jenkins pipeline
jenkins pipeline

Lợi ích Jenkins Pipeline mang lại

So với cách thông thường, sử dụng các plugin build có sẵn phải lệ thuộc theo cách làm việc của plugin đó. Hoặc là viết Bash / Bat script để customize theo project của mình. Thì cá nhân mình thấy nó quá là bó hẹp phạm vi mở rộng, cũng như những gì mà mình đã nói ở phần đầu.

Do đó cá nhân mình đề cao những lợi ích sau mà Jenkins Pipeline mang lại:

  • Sử dụng ngôn ngữ Groovy : mang đến sự thân thiện, dễ dàng implement hơn là sử dụng Bash / Bat Script
  • Hỗ trợ Docker : Tùy biến môi trường phát triển cho từng project riêng biệt.
  • Cấu trúc DSL chặt chẽ : sử dụng cú pháp DSL (Domain Specific Language) thuận tiện , cùng với đó là các methods/functions general của jenkins pipeline mang đến sự implement tối giản hơn.
  • Dễ dàng mở rộng với Shared Libraries : Tự do xây dựng library common để sử dụng trong khi runtime.
  • Hỗ trợ build đa luồng, đa môi trường phân tán trong cùng 1 build

Jekninsfile là gì ?

Jenkinsfile là một file text chứa cấu hình của toàn bộ quy trình workflow jenkins pipeline dưới dạng code. Lợi thế của file text này giúp cho các lập trình viên hoặc quản trị viên dễ dàng truy cập, thay đổi nội dung code tuỳ biến ở mọi thời điểm.

Jenkinsfile có quy chuẩn viết bằng ngôn ngữ Groovy DSL. Bạn có thể tạo ra Jenkinsfile thông qua trình text editor cơ bản hoặc qua giao diện cấu hình trên Jenkins website. Đối với Jenkinsfile sẽ có hai hình thức kĩ thuật khai báo cú pháp Jenkinsfile:

  • Declarative pipeline
  • Scripted pipeline

+ Declarative pipeline

Sử dụng những syntax đơn giản hơn. Dựa trên các methods / functions dựng sẵn, việc của chúng ta sử dụng và tuân thủ theo các rule và syntax được định nghĩa sẵn theo các steps và funtions như vậy để implement theo các stages (từng đoạn trong pipeline). Nhìn chung là sẽ giúp người dùng dễ sử dụng như dễ viết/đọc các nội dung pipeline mà bạn khai báo.

Cú pháp cơ bản của “Declarative pipeline”

pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}

+ Scripted pipeline

Sử dụng Groovy script là kỹ thuật nâng cao hơn khi cần sử dụng code để implement vài tasks nào đó hoặc logic phức tạp tùy thuộc bài toán. Thường kĩ thuật này dùng cho các bạn có tư duy lập trình do phải nghiên cứu học thêm ngôn ngữ Groovy.

Cú pháp cơ bản của “Scripted pipeline”

// Script //
node {
  stage('Build') {
  echo 'Building....'
  }
  stage('Test') {
  echo 'Building....'
  }
  stage('Deploy') {
  echo 'Deploying....'
  }
}

Chúng ta sẽ không đi sâu tìm hiểu cách sử dụng 2 kĩ thuật khai báo cấu hình Jenkins Pipeline trong Jenkinsfile ở bài viết này. Sẽ tìm hiểu kĩ hơn ở bài viết khác.

Sử dụng “Declarative pipeline” hay “Scripted pipeline”

Tương tự như cách Gitlab CI định nghĩa pipeline của nó trong file gitlab-ci.yml với kĩ thuật khai báo ngôn ngữ YAML. Pipeline Jenkins được định nghĩa trong cái gọi là Jenkinsfile. Có hai cách khác nhau để cấu trúc khai báo một Jenkinsfile: Declarative pipeline
Scripted pipeline.

  • Scripted pipeline” về cơ bản là dựa trên ngôn ngữ lập trình Groovy có thể sử dụng các lệnh cụ thể của Jenkins và sau đó được thực thi một cách an toàn để chạy pipeline. Các pipeline sử dụng kĩ thuật ‘scripted’ rất linh hoạt ở chỗ về cơ bản chúng chỉ bị hạn chế bởi các khả năng sử dụng ngôn ngữ Groovy của người dùng. Tuy nhiên, điều này có nghĩa là bạn cần có tư duy lập trình và khả năng học ngôn ngữ Groovy để tạo ra một pipeline phức tạp và tuỳ biến mạnh mẽ.
  • Declarative pipeline” được giới thiệu gần đây ở phiên bản mới nhằm cung cấp một kĩ thuật khai báo cú pháp có thể được đọc và viết bởi mọi người mà không cần phải biết đến ngôn ngữ Groovy. Nhiều phần trong cấu trúc của nó được chuẩn bị trước, chỉ cần lựa chọn kết hợp các phần như methods/functions ra sử dụng thôi.

Tổng kết

Bài viết này giúp bạn có cái nhìn tổng quan về Jenkins Pipeline và những gì bạn sẽ tiếp tục tìm hiểu để có thể sử dụng Jenkins Pipeline cho một quy trình CI/CD triển khai phát triển sản phẩm mềm hoàn hảo.

Nguồn: https://cuongquach.com/

Previous articleEbook Building Microservices (PDF)
Next articleCấu hình Password Policy trong AWS IAM
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !