Bài viết này sẽ giải thích cho bạn đọc khái niệm về Jenkins Pipeline và một số ví dụ về Jenkins Pipeline thực thi một đoạn script cơ bản trên Jenkins slave. #
Jenkins là gì? #
Jenkins là một server tự động hóa mã nguồn mở được viết bằng ngôn ngữ Java. Jenkins giúp tự động hóa các công đoạn “non-human” của quá trình phát triển phần mềm, với CI (Continuous Integration – sự tích hợp liên tục) và tạo điều kiện thuận lợi cho các khía cạnh kỹ thuật của CD (Continuous Delivery – sự phân phối liên tục). Đây là một hệ thống server chạy trong container servlet như Apache Tomcat. Jenkins có thể thực thi các dự án dựa trên Apache Ant, Apache Maven và sbt (scala build tool) cũng như các tập lệnh shell tùy ý và hàng loạt lệnh của Windows.
#
Jenkins Pipeline là gì? #
Jenkins Pipeline là một bộ plugin hỗ trợ việc triển khai và tích hợp CD theo kiểu pipeline (bao gồm tập hợp quy trình với các tác vụ liên quan với nhau và được thực hiện một cách tuần tự theo thứ tự đã quy định). Jenkins Pipeline được khai báo trên một tập tin được gọi là Jenkinsfile.
#
Jenkinsfile là gì? #
Jenkinsfile là phần “lõi” của Jenkins Pipeline, được viết dựa trên cú pháp của DSL (Domain Specific Language) với ngôn ngữ chính là: Groovy DSL. Tập tin này chứa danh sách các công việc mà pipeline sẽ thực hiện, được lưu trữ trên server Jenkins hoặc trên repository của git/Bitbucket.
Ví dụ:
pipeline { agent any environment { BUILD_SCRIPTS_GIT="http://10.100.100.10:7990/scm/~myname/mypipeline.git" BUILD_SCRIPTS='mypipeline' BUILD_HOME='/var/lib/jenkins/workspace' } stages { stage('Checkout: Code') { steps { sh "mkdir -p $WORKSPACE/repo;\ git config --global user.email 'email@address.com';\ git config --global user.name 'myname';\ git config --global push.default simple;\ git clone $BUILD_SCRIPTS_GIT repo/$BUILD_SCRIPTS" sh "chmod -R +x $WORKSPACE/repo/$BUILD_SCRIPTS" } } stage('Yum: Updates') { steps { sh "sudo chmod +x $WORKSPACE/repo/$BUILD_SCRIPTS/scripts/update.sh" sh "sudo $WORKSPACE/repo/$BUILD_SCRIPTS/scripts/update.sh" } } } post { always { cleanWs() } } }
Jenkinsfile này sẽ thực hiện các tác vụ sau:
- Thiết lập các biến môi trường.
- Pull code từ git repo được chỉ định.
- Thiết lập Jenkins workspace.
- Thực thi đoạn script được chỉ định.
- Sau khi thực hiện xong các tác vụ, “dọn dẹp” workspace.
Nội dung trong Jenkinsfile trên bao gồm:
- Trường pipeline{} là thành phần bắt buộc dùng để khai báo pipeline trong Jenkinsfile.
- Trường agent dùng để khai báo môi trường sẽ thực hiện. Nếu cấu hình là “any” thì Jenkins sẽ sử dụng bất kỳ agent nào hiện có trên hệ thống.
- Trường environment{} dùng để khai báo các biến môi trường cần thiết.
- Trường stages{} dùng để khai báo các “giai đoạn” (stage) con bên trong pipeline.
- Trường stage(‘Checkout: Code’) {} sẽ thực hiện việc tạo thư mục và clone code từ git đã được chỉ định.
- Trường stage(‘Yum: Updates’) {} sẽ thực hiện việc thiết lập quyền truy cập và thực thi đoạn script được chỉ định.
- Trường post{} sẽ được thực thi sau khi các stage hoàn tất các công việc được chỉ định. Trong Jenkinsfile trên, sau khi các stage đã thực hiện (kể cả không thành công), workspace sẽ được xóa để tránh Jenkins bị lỗi trong lần thực thi pipeline tiếp theo.
Lưu ý:
- Tập tin Jenkinsfile cần được đặt ở thư mục root của repository khi lưu trữ trên git/Bitbucket.
- Tính năng pipeline có thể sẽ không tích hợp sẵn trên Jenkins trong một số trường hợp. Bạn có thể cài đặt thêm tính năng này trong tính năng Manage Jenkins.
#
Các bước tạo và thực thi Jenkins Pipeline từ Jenkinsfile lưu trữ trên git/Bitbucket #
Yêu cầu: Đã cài đặt các plugin sau:
- Bitbucket Plugin
- Pipeline
- Git
- Pipeline SCM Step
Các bước thực hiện:
- Truy cập Jenkins Dashboard.
- Chọn “Create a job“.
- Điền tên pipeline ở khung “Enter an item name“.
- Chọn “Pipeline” ở danh sách bên dưới và nhấn “OK“.
- Chọn “Pipeline script from SCM” ở mục “Advanced Project Options” (ở cuối trang hoặc tab “Advanced Project Options“).
- Chọn “Git” ở mục “SCM“.
- Thêm git/Bitbucket repo link ở mục “Repository URL“.
- Thêm “credentials” để kết nối đến git repo nếu có.
- Nhấn “Save” để lưu lại thông tin vừa tạo.
- Chọn “Build Now” để tiến hành thực thi Jenkins Pipeline.
Quá trình thực thi sẽ hiển thị thông tin và tình trạng các stage đã được khai báo trong Jenkinsfile trong mục Stage View. Nếu stage có màu xanh tức là đã thực thi thành công, màu đó là lỗi trong quá trình thực thi. Người dùng có thể xem log của từng stage bằng cách chọn “Log” để xem log của từng stage.
Chúc bạn thành công!
Nguồn tham khảo:
- https://medium.com/@mightywomble/jenkins-pipeline-beginners-guide-f3868f715ed9
- https://topdev.vn/blog/continuous-integration-with-jenkins-bai-1-gioi-thieu-ve-ci-va-jenkins/#_4-loi-ich-cua-tich-hop-lien-tuc-4
- https://techblog.vn/jenkins-pipeline-for-beginners
Xem thêm các bài viết liên quan: