Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách thiết lập Continuous Integration Pipelines trong Jenkins trên Ubuntu 16.04

Ngày đăng: 14 tháng 11 năm 2023

Giới thiệu

Jenkins là một máy chủ tự động hóa nguồn mở, có mục đích tự động hóa các nhiệm vụ kỹ thuật lặp đi lặp lại liên quan đến việc tích hợp và phân phối phần mềm liên tục. Với hệ sinh thái plugin mạnh mẽ và sự hỗ trợ rộng rãi, Jenkins có thể xử lý nhiều khối lượng công việc khác nhau để xây dựng, thử nghiệm và triển khai ứng dụng.

Trong các hướng dẫn trước, chúng tôi đã cài đặt Jenkins trên máy chủ Ubuntu 16.04 và định cấu hình Jenkins bằng SSL bằng proxy ngược Nginx. Trong hướng dẫn này, chúng tôi sẽ trình bày cách thiết lập Jenkins để tự động kiểm tra ứng dụng khi các thay đổi được đẩy vào kho lưu trữ.

Đối với hướng dẫn này, chúng tôi sẽ tích hợp Jenkins với GitHub để Jenkins được thông báo khi mã mới được đẩy vào kho lưu trữ. Khi Jenkins được thông báo, nó sẽ checkout mã rồi kiểm tra mã trong vùng chứa Docker để tách biệt môi trường kiểm tra khỏi máy chủ Jenkins. Chúng tôi sẽ sử dụng một ứng dụng Node.js mẫu để hiển thị cách xác định quy trình CI/CD cho một dự án.

Điều kiện tiên quyết

Để làm theo hướng dẫn này, bạn sẽ cần một máy chủ Ubuntu 16.04 có ít nhất 1G RAM được định cấu hình cài đặt Jenkins an toàn. Để bảo mật giao diện web đúng cách, bạn sẽ cần gán một tên miền cho máy chủ Jenkins. Hãy làm theo các hướng dẫn sau để tìm hiểu cách thiết lập Jenkins ở định dạng mong đợi:

  • Cách cài đặt Jenkins trên Ubuntu 16.04
  • Cách cài đặt Nginx trên Ubuntu 16.04
  • Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04
  • Cách định cấu hình Jenkins bằng SSL bằng Proxy ngược Nginx

Để kiểm soát tốt nhất môi trường thử nghiệm của mình, chúng tôi sẽ chạy thử nghiệm ứng dụng của mình trong vùng chứa Docker. Sau khi Jenkins thiết lập và chạy, hãy cài đặt Docker trên máy chủ bằng cách làm theo các bước một và hai của hướng dẫn này:

  • Cách cài đặt và sử dụng Docker trên Ubuntu 16.04

Khi bạn đã hoàn thành các hướng dẫn trên, bạn có thể tiếp tục với bài viết này.

Thêm Jenkins User vào nhóm Docker

Sau khi làm theo các điều kiện tiên quyết, cả Jenkins và Docker đều được cài đặt trên máy chủ của bạn. Tuy nhiên, theo mặc định, Linux user chịu trách nhiệm chạy tiến trình Jenkins không thể truy cập Docker.

Để khắc phục điều này, chúng ta cần thêm jenkins user vào nhóm docker bằng lệnh usermod:

  1. sudo usermod -aG docker jenkins

Bạn có thể liệt kê các thành viên của nhóm docker để xác nhận rằng jenkins user đã được thêm thành công:

  1. grep docker /etc/group
Output
docker:x:999:sammy,jenkins

Để Jenkins sử dụng tư cách thành viên mới, bạn cần khởi động lại quy trình:

  1. sudo systemctl restart jenkins

Với sự trợ giúp của một số plugin mặc định mà chúng tôi đã bật trong quá trình cài đặt, giờ đây Jenkins có thể sử dụng Docker để chạy các tác vụ xây dựng và kiểm tra.

Tạo mã thông báo truy cập cá nhân trong GitHub

Để Jenkins xem các dự án GitHub của bạn, bạn sẽ cần tạo Personal Access Token (Mã thông báo truy cập cá nhân) trong tài khoản GitHub của chúng tôi.

Bắt đầu bằng cách truy cập GitHub và đăng nhập vào tài khoản của bạn nếu bạn chưa làm như vậy. Sau đó, nhấp vào biểu tượng người dùng của bạn ở góc trên bên phải và chọn Settings từ menu thả xuống:

description image

Trên trang tiếp theo, hãy tìm phần Developer settings ở menu bên trái và nhấp vào Personal access tokens:

description image

Nhấp vào nút Generate new token trên trang tiếp theo:

description image

Bạn sẽ được đưa đến một trang nơi bạn có thể xác định phạm vi cho mã thông báo mới của mình.

Trong hộp Token description, hãy thêm mô tả để cho phép bạn nhận ra nó sau này:

description image

Trong phần Select scopes, hãy chọn các hộp repo:status, repo:public_repoadmin:org_hook. Những điều này sẽ cho phép Jenkins cập nhật trạng thái cam kết và tạo webhook cho dự án. Nếu bạn đang sử dụng kho lưu trữ riêng, bạn sẽ cần chọn quyền repo chung thay vì các mục con repo:

description image

Khi bạn hoàn tất, hãy nhấp vào Generate token ở phía dưới.

Bạn sẽ được chuyển hướng trở lại trang chỉ mục Personal access tokens và mã thông báo mới của bạn sẽ được hiển thị:

description image

Sao chép mã thông báo ngay bây giờ để chúng ta có thể tham khảo nó sau.

Lưu ý: Như đã đề cập trong ảnh chụp màn hình ở trên, vì lý do bảo mật, không có cách nào hiển thị lại mã thông báo sau khi bạn rời khỏi trang này. Nếu bạn mất mã thông báo, hãy xóa mã thông báo hiện tại khỏi tài khoản GitHub của bạn rồi tạo mã mới.

Bây giờ bạn đã có mã thông báo truy cập cá nhân cho tài khoản GitHub của mình, chúng ta có thể định cấu hình Jenkins để xem kho lưu trữ dự án của bạn.

Thêm mã thông báo truy cập cá nhân GitHub vào Jenkins

Bây giờ chúng ta đã có mã thông báo, chúng ta cần thêm nó vào máy chủ Jenkins để nó có thể tự động thiết lập webhook. Đăng nhập vào giao diện web Jenkins của bạn bằng tài khoản quản trị mà bạn đã định cấu hình trong khi cài đặt.

Từ bảng điều khiển chính, nhấp vào Credentials ở menu bên trái:

description image

Trên trang tiếp theo, nhấp vào mũi tên bên cạnh (global) trong Jenkins scope. Trong hộp xuất hiện, nhấp vào Add credentials:

description image

Bạn sẽ được đưa đến một biểu mẫu để thêm thông tin đăng nhập mới.

Trong menu thả xuống Kind, chọn Secret text. Trong trường Secret, dán mã thông báo truy cập cá nhân GitHub của bạn. Điền vào trường Description để bạn có thể xác định mục này sau này. Bạn có thể chọn trường Scope là Global và để trống trường ID:

description image

Nhấp vào nút OK khi bạn hoàn tất.

Bây giờ bạn có thể tham khảo các thông tin xác thực này từ các phần khác của Jenkins để hỗ trợ việc định cấu hình.

Thiết lập quyền truy cập Jenkins vào GitHub

Quay lại bảng điều khiển chính của Jenkins, nhấp vào Manage Jenkins ở menu bên trái:

description image

Trong danh sách các liên kết ở trang sau, hãy nhấp vào Configure System:

description image

Cuộn qua các tùy chọn trên trang tiếp theo cho đến khi bạn tìm thấy phần GitHub. Nhấp vào nút Add GitHub Server rồi chọn GitHub Server:

description image

Phần này sẽ mở rộng để nhắc nhở một số thông tin bổ sung. Trong menu thả xuống Credentials, chọn mã thông báo truy cập cá nhân GitHub mà bạn đã thêm trong phần trước:

description image

Nhấp vào nút Test connection. Jenkins sẽ thực hiện lệnh gọi API thử nghiệm tới tài khoản của bạn và xác minh kết nối:

description image

Khi bạn hoàn tất, hãy nhấp vào nút Save để thực hiện các thay đổi của mình.

Thiết lập ứng dụng trình diễn trong tài khoản GitHub của bạn

Để minh họa cách sử dụng Jenkins để kiểm thử một ứng dụng, chúng ta sẽ sử dụng một chương trình “hello world” đơn giản được tạo bằng Hapi.js. Vì chúng tôi đang thiết lập Jenkins để phản ứng với việc đẩy tới kho lưu trữ nên bạn cần có bản sao mã trình diễn (demonstration code) của riêng mình.

Truy cập kho lưu trữ dự án và nhấp vào nút Fork ở góc trên bên phải để tạo bản sao của kho lưu trữ trong tài khoản của bạn:

description image

Một bản sao của kho lưu trữ sẽ được thêm vào tài khoản của bạn.

Kho lưu trữ chứa tệp pack.json xác định các phần phụ thuộc runtime và development, cũng như cách chạy bộ thử nghiệm đi kèm. Các phần phụ thuộc có thể được cài đặt bằng cách chạy npm install và các thử nghiệm có thể được chạy bằng npm test.

Chúng tôi cũng đã thêm Jenkinsfile vào kho lưu trữ. Jenkins đọc tệp này để xác định các hành động sẽ chạy trên kho lưu trữ nhằm xây dựng, kiểm tra hoặc triển khai. Nó được viết bằng phiên bản khai báo của Jenkins Pipeline DSL.

Jenkinsfile có trong kho hello-hapi trông như thế này:

Jenkinsfile
#!/usr/bin/env groovy

pipeline {

    agent {
        docker {
            image 'node'
            args '-u root'
        }
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
    }
}

pipeline chứa toàn bộ định nghĩa mà Jenkins sẽ đánh giá. Bên trong, chúng tôi có một phần agent chỉ định nơi các hành động trong quy trình sẽ thực thi. Để tách biệt môi trường của chúng tôi khỏi hệ thống máy chủ, chúng tôi sẽ thử nghiệm trong các vùng chứa Docker, do docker agent chỉ định.

Vì Hapi.js là một framework cho Node.js nên chúng tôi sẽ sử dụng Docker image node làm cơ sở. Chúng tôi chỉ định root user trong vùng chứa để người dùng có thể đồng thời ghi vào cả ổ đĩa đính kèm chứa mã đã kiểm xuất và ổ đĩa mà tập lệnh ghi đầu ra của nó vào.

Tiếp theo, tệp xác định hai giai đoạn, đây chỉ là sự phân chia công việc hợp lý. Chúng tôi đã đặt tên cho cái đầu tiên là “Build” và cái thứ hai là “Test”. Bước xây dựng in thông báo chẩn đoán rồi chạy npm install để có được các phần phụ thuộc cần thiết. Bước kiểm tra sẽ in một thông báo khác rồi chạy kiểm tra như được xác định trong tệp pack.json.

Bây giờ bạn đã có kho lưu trữ với Jenkinsfile hợp lệ, chúng ta có thể thiết lập Jenkins để xem kho lưu trữ này và chạy tệp khi có thay đổi.

Tạo một pipeline mới trong Jenkins

Tiếp theo, chúng ta có thể thiết lập Jenkins sử dụng mã thông báo truy cập cá nhân GitHub để xem kho lưu trữ của mình.

Quay lại bảng điều khiển chính của Jenkins, nhấp vào New Item ở menu bên trái:

description image

Nhập tên cho pipeline mới của bạn vào trường Enter an item name. Sau đó, chọn Pipeline làm loại mục:

description image

Nhấp vào nút OK ở phía dưới để tiếp tục.

Trên màn hình tiếp theo, hãy chọn hộp GitHub project. Trong trường Project url xuất hiện, hãy nhập URL kho lưu trữ GitHub của dự án của bạn.

Lưu ý: Đảm bảo trỏ đến nhánh của ứng dụng Hello Hapi để Jenkins có quyền định cấu hình webhook.

description image

Tiếp theo, trong phần Build Triggers, hãy kiểm tra hộp GitHub hook trigger for GITScm polling:

description image

Trong phần Pipeline, chúng ta cần yêu cầu Jenkins chạy pipeline được xác định trong Jenkinsfile trong kho lưu trữ của chúng ta. Thay đổi loại Definition thành Pipeline script from SCM.

Trong phần mới xuất hiện, chọn Git trong menu SCM. Trong trường Repository URL xuất hiện, hãy nhập lại URL tới nhánh của kho lưu trữ:

Lưu ý: Một lần nữa, hãy nhớ trỏ tới nhánh của ứng dụng Hello Hapi.

description image

Lưu ý: Ví dụ của chúng tôi tham chiếu đến Jenkinsfile có sẵn trong kho lưu trữ công cộng. Nếu dự án của bạn không thể truy cập công khai, bạn sẽ cần sử dụng nút add credentials để thêm quyền truy cập bổ sung vào kho lưu trữ. Bạn có thể thêm mã thông báo truy cập cá nhân như chúng tôi đã làm với cấu hình hook trước đó.

Khi bạn hoàn tất, hãy nhấp vào nút Save ở cuối trang.

Thực hiện quá trình build ban đầu và định cấu hình Webhook

Tại thời điểm năm 2017, Jenkins không tự động định cấu hình webhook khi bạn xác định quy trình cho kho lưu trữ trong giao diện.

Để kích hoạt Jenkins thiết lập các hook thích hợp, chúng ta cần thực hiện build thủ công ngay lần đầu tiên.

Trong trang chính của quy trình, hãy nhấp vào Build Now trong menu bên trái:

description image

Một build mới sẽ được lên lịch. Trong hộp Build History ở góc dưới bên trái, build mới sẽ xuất hiện sau giây lát. Ngoài ra, Stage View sẽ bắt đầu được vẽ trong khu vực chính của giao diện. Điều này sẽ theo dõi tiến trình chạy thử nghiệm của bạn khi các giai đoạn khác nhau được hoàn thành:

description image

Trong hộp Build History, nhấp vào số được liên kết với build để đi tới trang chi tiết build. Từ đây, bạn có thể nhấp vào nút Console Output ở menu bên trái để xem chi tiết các bước đã chạy:

description image

Nhấp vào mục Back to Project trong menu bên trái khi bạn hoàn tất để quay lại pipeline view chính.

Bây giờ chúng ta đã build dự án một lần, chúng ta có thể nhờ Jenkins tạo webhook cho dự án của mình. Nhấp vào Configure trong menu bên trái của quy trình:

description image

Không cần thay đổi gì trên màn hình này, chỉ cần nhấp vào nút Save ở phía dưới. Bây giờ, Jenkins đã có thông tin về dự án từ quá trình build ban đầu, nó sẽ đăng ký một webhook với dự án GitHub của chúng tôi khi bạn lưu trang.

Bạn có thể xác minh điều này bằng cách truy cập kho lưu trữ GitHub của mình và nhấp vào nút Settings. Trên trang tiếp theo, nhấp vào Webhooks từ menu bên cạnh. Bạn sẽ thấy webhook máy chủ Jenkins của mình trong giao diện chính:

description image

Bây giờ, khi bạn đẩy các thay đổi mới vào kho lưu trữ của mình, Jenkins sẽ được thông báo. Sau đó, nó sẽ lấy mã mới và kiểm tra lại bằng quy trình tương tự.

Để ước tính điều này, trong trang kho lưu trữ của chúng tôi trên GitHub, bạn có thể nhấp vào nút Create new file ở bên trái nút Clone or download màu xanh lá cây:

description image

Trên trang tiếp theo, chọn tên tệp và một số nội dung giả:

description image

Nhấp vào nút Commit new file ở cuối khi bạn hoàn tất.

Nếu quay lại giao diện Jenkins, bạn sẽ thấy một build mới tự động bắt đầu:

description image

Bạn có thể bắt đầu các build bổ sung bằng cách thực hiện các cam kết đối với một bản sao cục bộ của kho lưu trữ và đẩy nó trở lại GitHub.

Kết luận

Trong hướng dẫn này, chúng tôi đã định cấu hình Jenkins để xem dự án GitHub và tự động kiểm tra mọi thay đổi mới được cam kết. Jenkins lấy mã từ kho lưu trữ rồi chạy quy trình xây dựng và thử nghiệm từ bên trong các vùng chứa Docker bị cô lập. Mã kết quả có thể được triển khai hoặc lưu trữ bằng cách thêm các hướng dẫn bổ sung vào cùng một Jenkinsfile.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời