Pipeline Jenkins là gì

Chuỗi bài về Jenkins

1. Pipeline trong jenkins

2. Hướng dẫn tạo Jenkinsfile

3. Pipeline CI/CD hoàn chỉnh với Laravel Framework

Mục đích cuối cùng của chuỗi bài: xây dựng 1 CI/CD hoàn chỉnh bao gồm:

  • Docker: sử dụng nền tảng container để triển khai
  • Laravel: framework PHP để làm website
  • Unit testing: Unit test cho PHP
  • Feature testing: test chức năng cho service
  • Deploy: CD deploy container bằng Pipeline

Bài đầu tiên sẽ có những phần sau

  • Jenkins: giới thiệu jenkins cùng những tính năng của nó
  • Cài đặt Jenkins với docker : cài jenkins trong 5 phút với docker
  • Jobs trong Jenkins: cách định nghĩa + thiết lập build cho job
  • Pipeline trong Jenkins: *pipeline là gì *
  • Hướng dẫn cách thiết lập Pipeline:
  • Kết luận

Jenkins

  • Jenkins là 1 tool open-source mạnh mẽ được sử dụng làm CI/CD (Continuous Integration/Continuous Delivery) trong phát triển ứng dụng. Link source code
  • Jenkins cùng bộ plugins phong phú khiến cho việc sử dụng nó rất linh hoạt, phục vụ được nhiều mục đích cũng như thể loại ứng dụng khác nhau.

Cài đặt Jenkins với docker

  • b1: cài docker link
  • b2: pull và run jenkins containter
docker pull jenkins docker run -p 8080:8080 -p 50000:50000 --name jenkins jenkins
  • b3: lưu mật khẩu cài đặt khởi tạo cho jenkins trong log của docker bắn ra f785e588b9cb41aea495ebb930a0caf2
************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: f785e588b9cb41aea495ebb930a0caf2 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword *************************************************************
  • b4: access vào http://localhost:8080 , nhập pass trên và hoàn thành cài đặt jenkins.

Jobs trong Jenkins

Tạo job chính là tạo item trong Jenkins (ở version cũ của Jenkins gọi là build job) , job/item là 1 cấu hình build cho 1 ứng dụng. Vòng đời quản lý của 1 ứng dụng có thể có 1 hoặc nhiều job/item.

Tạo job

Để tạo job/item ta click vào Create Item , nhớ là tên cho item là unique nhé:

Phía dưới mục chọn tên có các loại job/project như trong hình (tuỳ chúng ta cài những plugin thêm nào mà sẽ có những loại project khác nhau, ví dụ hình tên có Maven project là nhờ việc add thêm plugin Maven Project Plugin )

Các loại project thì khác nhau là những thiết lập tương ứng với loại project đó đã được chọn sẵn và bắt buộc ta phải thiết lập.

Giải thích các loại item như sau:

  • Freestyle project: cho người dùng lựa chọn tất cả các loại thiết lập, là loại thiết lập linh hoạt nhất.
  • Maven project: Maven 2/3 project thiết lập cho maven project, có thiết lập sẵn nhiều tính năng như là tự tích hợp tích hợp JUnit, findbugs, Incremental build (chỉ build phần module thay đổi thôi),Build modules in parallel,...
  • Pipeline: project build theo 1 chuỗi (chain) các bước, ta sẽ tìm hiểu kỹ hơn ở phần Pipeline.
  • Eternal Job: những job chạy ngoài Jenkins (có thể là ở remote host)
  • Folder: Thư mục chung cho các job lồng nhau (nested job)
  • GitHub Organization: thiết lập cho tất cả project trong acc GitHub premium.
  • Multibranch Pipeline: thiết lập pipeline cho project trên nhiều branch khác nhau.

Thiết lập job

Sau khi tạo xong job thì ta sang page thiết lập, page thiết lập chi tiết cho job thì sẽ có nhiều session khác nhau:

  • General: Các thiết lập về thông tin của job đấy
  • Source Code Management: quản lý source code (git, svn,..)
  • Build Triggers: project sẽ được kích hoạt build bằng cách nào (Trigger builds remotely: được kích hoạt build bằng lời gọi bên ngoài vào Jenkins, ta phải thiết lập Authentication Token để gọi. Build after other project are build: project sẽ được kích hoạt khi project khác được build xong. Build periodically: build project định kỳ bằng cách config scheduling giống với cript của crontab. Poll SCM: pull source project về và build định kỳ, script như trên luôn)
  • Build: Config project sẽ được build như thế nào, các build step sẽ bổ sung thêm bằng các plugin ví dụ như script của maven, script của gradle,...
    Như hình trên là ta tạo 2 build step shell là mvn clean package(build java project) và mvn test (run UnitTest)
    Build step có thể có rất nhiều options như trên tuỳ thuộc ta cài những plugin j vào Jenkins
  • Post-build Actions: thiết lập những tác vụ ta muốn thực thiện sau khi project đã được build xong. (Build project khác, nén resource ,...)

Build job và check output

  • Kích hoạt build bằng thủ công: click vào
  • Khi project được build ta có thể check output của quá trình build bằng cách trong Build History chọn build tương ứng và chọn Console Ouput để xem

Pipeline trong Jenkins

CI/CD là gì?

  • CI(continuous integration): tích hợp liên tục là môi trường phát triển phần mềm mà mỗi khi developer submit code (push code) của họ lên thì phần mềm tự động được build lại, chạy test,... (tùy thiết lập của hệ thống CI/CD)
  • CD(continuous delivery|continuous deployment): có quá trình deploy vào trong vòng phát triển.
    • continuous delivery : phát hành liên tục, như trong hình trên ta thấy delivery tới bước deploy lên production sẽ do làm bằng tay chứ ko phải tự động
    • continuous deployment : việc deploy trên production cũng là tự động luôn

Lợi ích của CI/CD: 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 -> 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

Tiếp theo ta sẽ tìm hiểu việc thiết lập CI/CD trong Jenkins như thế nào nhé!

Pipeline là gì?

Pipeline trần trụi: pipe là ống nước, pipeline là những ống nước được nối vào với nhau, đại khái như hình dưới

Pipeline trong Jenkins: Là chuỗi các tác vụ trong CI/CD như là Build, Deploy, Test, Release,... gọi là các Stage được ghép nối lại với nhau (anh sau diễn ra sau khi a trước được thực thi) để có thể đẩy ứng dụng đến được mục đích cuối cùng là phát hành (hoặc có thể chỉ là test trên môi trường dev thôi)

Ta có thể định nghĩa 2 kiểu Pipeline

  • Chọn kiểu job/item là Pipeline project
  • Tự tạo liên kết giữa các job/item với nhau bằng Build Trigger và Post-build (Downstream/Upstream)

Cài đặt những plugin hữu ích

Để thiết lập được pipeline và visualize stage lên ta cần những plugin sau

  1. Build Pipeline
  2. Pipeline Stage View

Nhớ chọn restart lại Jenkins

Thiết lập Pipeline trong Jenkins

Cách 1: Chọn kiểu job/item là Pipeline project

  • Create Item > chọn Pipeline project
  • Trong page thiết lập, để làm một sample về Pipeline ta định nghĩa các state trong session Pipeline, có 2 cách định nghĩa
    Pipeline script là ta định nghĩa luôn trên webui của Jenkins
    Pipeline script from SCM là config về pipeline được định nghĩa trong file Jenkinsfile trong source của project
  • Ta sẽ thử định nghĩa Pipeline gồm 3 stage Build, Test, Deploy bằng phương pháp như sau
pipeline { agent any stages { stage('Build') { steps { sh 'echo "BUILD STAGE"' } } stage('Test'){ steps { sh 'echo "TEST STAGE"' } } stage('Deploy'){ steps { sh 'echo "DEPLOY STAGE"' } } } }
  • Thử build phát nhé, sau khi build xong thì vào màn hình chính của job ta sẽ thấy Stage View được hiển thị như sau
    Thật trực quan đúng ko, quá trình build 3 stage được hiển ra cùng thời gian chạy của mỗi stage. Đối với 1 stage bị fail ( ví dụ ta thay đổi Pipeline script ở trên của state Test thành sh 'echos "TEST STAGE"' và build lại) thì Stage View sẽ hiển thị như sau

Cách 2: Tự tạo liên kết giữa các job/item với nhau bằng Build Trigger và Post-build (Downstream/Upstream)

  • Tạo 3 job dạng Freestyle project và mỗi job được build bằng 1 shell script đơn giản (xem trong ảnh gif dưới) là echo "Test 0x"
  • Project Test02 ta config Build Trigger là Build after other projects are built và chọn build sau khi Test01 được build
  • Project Test02 phần Post-build Actions chọn Build other project và chọn project Test03. 2 bước vừa qua chính là ta config 1 chain như sau Test01 -> Test02 -> Test03 tạo thành 1 Pipeline
  • Add Pipeline View: ở màn hình Dashboard chọn Addview và chọn Build Pipeline View rồi ở màn hình thiết lập cho View, session Pipeline Flow chọn project Test01 là Initial Job
  • Tiếp theo ta build Test01 và truy cập vào Pipeline View vừa mới tạo để xem quá trình build các job được tiến hành theo trình tự như thế nào.
    Ảnh trên là visualize của Pipeline
    Quá trình thiết lập Pipeline theo phương pháp thứ 2 bạn có thể xem trong ảnh GIF ở trên

Xem clip tại link

Kết luận

  • Jenkins đúng là tool quá thích hợp để làm CI/CD, lượng plugin khổng lồ cộng với sự linh hoạt trong cách sử dụng khiến cho ta có thể tuỳ chỉnh Jenkins theo nhu cầu riêng.
  • Pipeline giúp ta tạo chuỗi các job cần thiết cho ứng dụng và visualize một cách siêu trực quan.