Cách thiết lập đường ống tích hợp liên tục trong Jenkins trên Ubuntu 16.04
Jenkins là một server tự động hóa open-souce nhằm mục đích tự động hóa các việc 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 liên tục phần mềm. Với một hệ sinh thái bổ sung mạnh mẽ và hỗ trợ rộng rãi, Jenkins có thể xử lý một loạt các dung lượng công việc để xây dựng, thử nghiệm và triển khai ứng dụng.Trong các hướng dẫn trước, ta đã cài đặt Jenkins trên server Ubuntu 16.04 và cấu hình Jenkins với SSL bằng Reverse Proxy Nginx . Trong hướng dẫn này, ta sẽ trình bày cách cài đặt Jenkins để tự động kiểm tra ứng dụng khi các thay đổi được đẩy vào repository .
Đối với hướng dẫn này, ta sẽ tích hợp Jenkins với GitHub để Jenkins được thông báo khi mã mới được đẩy vào repository . Khi Jenkins được thông báo, nó sẽ kiểm tra mã và sau đó kiểm tra nó trong các containers Docker để cách ly môi trường thử nghiệm khỏi server Jenkins. Ta 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.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần một server Ubuntu 16.04 với ít nhất 1G RAM được cấu hình với cài đặt Jenkins an toàn. Để bảo mật đúng cách cho giao diện web, bạn cần gán một domain cho server Jenkins. Thực hiện theo các hướng dẫn sau để tìm hiểu cách cài đặt 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 cấu hình Jenkins với SSL bằng cách sử dụng Nginx Reverse Proxy
Để kiểm soát tốt nhất môi trường thử nghiệm của bạn , ta sẽ chạy thử nghiệm ứng dụng của bạn trong các containers Docker. Sau khi Jenkins cài đặt và chạy, hãy cài đặt Docker trên server theo các bước một và hai của hướng dẫn này:
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 User Jenkins vào Group Docker
Sau khi làm theo các yêu cầu , cả Jenkins và Docker đều được cài đặt trên server của bạn. Tuy nhiên, theo mặc định, user Linux chịu trách nhiệm chạy quy trình Jenkins không thể truy cập Docker.
Để khắc phục điều này, ta cần thêm user jenkins
vào group docker
bằng lệnh usermod
:
- sudo usermod -aG docker jenkins
Bạn có thể liệt kê các thành viên của group docker
để xác nhận user jenkins
đã được thêm thành công:
- grep docker /etc/group
Outputdocker:x:999:sammy,jenkins
Để Jenkins sử dụng tư cách thành viên mới, bạn cần bắt đầu lại quá trình:
- sudo systemctl restart jenkins
Với sự trợ giúp của một số plugin mặc định mà ta đã bật trong quá trình cài đặt, Jenkins hiện có thể sử dụng Docker để chạy các việc xây dựng và thử nghiệm.
Tạo mã thông báo truy cập cá nhân trong GitHub
Để Jenkins theo dõi các dự án GitHub của bạn, bạn cần tạo Mã truy cập cá nhân trong account GitHub của ta .
Bắt đầu bằng cách truy cập GitHub và đăng nhập vào account của bạn nếu bạn chưa làm như vậy. Sau đó, nhấp vào biểu tượng user của bạn ở góc trên bên phải và chọn Cài đặt từ menu thả xuống:
Trên trang sau đó, tìm phần Cài đặt nhà phát triển của menu bên trái và nhấp vào Mã thông báo truy cập cá nhân :
Nhấp vào nút Tạo mã thông báo mới trên trang tiếp theo:
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 bạn .
Trong hộp mô tả Mã thông báo , hãy thêm mô tả cho phép bạn nhận ra nó sau này:
Trong phần Chọn phạm vi , hãy kiểm tra hộp repo: status , repo: public_repo và admin: org_hook . Những điều này sẽ cho phép Jenkins cập nhật trạng thái commit và tạo webhook cho dự án. Nếu bạn đang sử dụng một repository cá nhân, bạn cần phải chọn cho phép repo chung thay vì subitems repo:
Khi bạn hoàn tất, hãy nhấp vào Tạo mã thông báo ở dưới cùng.
Bạn sẽ được chuyển hướng trở lại trang index Mã thông báo truy cập cá nhân và mã thông báo mới của bạn sẽ hiển thị:
Sao chép mã thông báo ngay bây giờ để ta có thể tham khảo nó sau này. Như thông báo cho biết, không có cách nào để lấy lại mã khi bạn rời khỏi trang này.
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 khi bạn rời khỏi trang này. Nếu bạn bị mất mã thông báo, hãy xóa mã thông báo hiện tại khỏi account GitHub của bạn, sau đó tạo một mã mới.
Đến đây bạn đã có mã thông báo truy cập cá nhân cho account GitHub của bạn , ta có thể cấu hình Jenkins để xem kho dự án của bạn.
Thêm mã truy cập cá nhân GitHub vào Jenkins
Bây giờ ta có một mã thông báo, ta cần thêm nó vào server Jenkins của bạn để nó có thể tự động cài đặt webhook. Đăng nhập vào giao diện web Jenkins của bạn bằng account quản trị bạn đã cấu hình trong khi cài đặt.
Từ trang tổng quan chính, hãy nhấp vào Thông tin đăng nhập ở menu bên trái:
Trên trang tiếp theo, nhấp vào mũi tên bên cạnh ( global ) trong phạm vi Jenkins . Trong hộp xuất hiện, nhấp vào Thêm thông tin đăng nhập :
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 Loại , chọn Văn bản bí mật . Trong trường Bí mật , hãy dán mã thông báo truy cập cá nhân GitHub của bạn. Điền vào trường Mô tả để bạn có thể xác định mục nhập này vào một ngày sau đó. Bạn có thể để trống trường Phạm vi là Global và trường ID:
Nhấp vào nút OK khi bạn hoàn tất.
Đến đây bạn sẽ có thể tham khảo các thông tin đăng nhập này từ các phần khác của Jenkins để hỗ trợ cấu hình.
Cài đặt quyền truy cập của Jenkins vào GitHub
Quay lại trang tổng quan Jenkins chính, nhấp vào Quản lý Jenkins ở menu bên trái:
Trong danh sách các liên kết trên trang sau, bấm vào Định cấu hình Hệ thống :
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 Thêm server GitHub và sau đó chọn Server GitHub :
Phần này sẽ mở rộng để nhắc nhở một số thông tin bổ sung. Trong menu thả xuống Thông tin đăng nhập , hãy chọn mã thông báo truy cập cá nhân GitHub mà bạn đã thêm trong phần cuối cùng:
Nhấp vào nút Kiểm tra kết nối . Jenkins sẽ thực hiện cuộc gọi API thử nghiệm tới account của bạn và xác minh kết nối:
Khi bạn hoàn tất, hãy nhấp vào nút Lưu để thực hiện các thay đổi .
Cài đặt Ứng dụng Trình diễn trong Tài khoản GitHub của bạn
Để chứng minh cách sử dụng Jenkins để kiểm tra một ứng dụng, ta sẽ sử dụng một chương trình đơn giản “hello world” được tạo bằng Hapi.js. Bởi vì ta đang cài đặt Jenkins để phản ứng với các lần đẩy vào repository , bạn cần có bản sao mã trình diễn 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 repository trong account của bạn:
Một bản sao của repository sẽ được thêm vào account của bạn.
Kho lưu trữ chứa file package.json
xác định thời gian chạy và các phụ thuộc phát triển, 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 bài kiểm tra có thể được chạy bằng cách sử dụng npm test
.
Ta cũng đã thêm Jenkinsfile
vào repo. Jenkins đọc file này để xác định các hành động chạy đối với repository để xây dựng, thử nghiệm hoặc triển khai. Nó được viết bằng version khai báo của Jenkins Pipeline DSL .
Jenkinsfile
có trong repository lưu trữ hello-hapi
trông giống như sau:
#!/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, ta có một phần agent
chỉ định nơi các hành động trong đường dẫn sẽ thực thi. Để cách ly môi trường của ta với hệ thống server , ta sẽ thử nghiệm trong containers Docker, do tác nhân docker
chỉ định.
Vì Hapi.js là một khuôn khổ cho Node.js, ta sẽ sử dụng hình ảnh node
Docker làm cơ sở của ta . Ta chỉ định user root
bên trong containers để user có thể ghi đồng thời vào cả ổ đĩa đính kèm có chứa mã đã kiểm tra và vào ổ đĩa mà tập lệnh ghi kết quả của nó.
Tiếp theo, file xác định hai giai đoạn, đó chỉ là sự phân chia công việc hợp lý. Ta đã đặt tên cho phần đầu tiên là “Build” và phần thứ hai là “Test”. Bước xây dựng in một thông báo chẩn đoán và sau đó chạy npm install
để lấy các phụ thuộc cần thiết. Bước kiểm tra in một thông báo khác và sau đó chạy các bài kiểm tra như được xác định trong file package.json
.
Đến đây bạn có một repository với Jenkinsfile
hợp lệ, ta có thể cài đặt Jenkins để xem repository này và chạy file khi các thay đổi được giới thiệu.
Tạo một đường ống mới trong Jenkins
Tiếp theo, ta có thể cài đặt Jenkins sử dụng mã thông báo truy cập cá nhân GitHub để xem repository của ta .
Quay lại trang tổng quan Jenkins chính, nhấp vào Mục mới ở menu bên trái:
Nhập tên cho đường dẫn mới của bạn trong trường Nhập tên mục . Sau đó, chọn Đường ống làm loại mục:
Nhấp vào nút OK ở dưới cùng để tiếp tục.
Trên màn hình tiếp theo, chọn hộp dự án GitHub . Trong trường url dự án xuất hiện, hãy nhập URL repository GitHub của dự án của bạn.
Lưu ý : Đảm bảo trỏ đến nhánh ứng dụng Hello Hapi của bạn để Jenkins có quyền cấu hình webhook.
Tiếp theo, trong phần Trình kích hoạt xây dựng , hãy kiểm tra trình kích hoạt móc GitHub cho hộp bỏ phiếu GITScm :
Trong phần Đường ống , ta cần yêu cầu Jenkins chạy đường ống được xác định trong Jenkinsfile
trong repository lưu trữ của ta . Thay đổi loại Định nghĩa thành Tập lệnh đường ống từ SCM .
Trong phần mới xuất hiện, chọn Git trong menu SCM . Trong trường URL repository xuất hiện, hãy nhập lại URL tới phần mềm của repository :
Lưu ý : , hãy đảm bảo trỏ tới ngã ba của ứng dụng Hello Hapi.
Lưu ý : Ví dụ của ta tham chiếu đến Jenkinsfile
có sẵn trong repository lưu trữ công khai. Nếu dự án của bạn không thể truy cập , bạn cần sử dụng nút thêm thông tin đăng nhập để thêm quyền truy cập bổ sung vào repository . Bạn có thể thêm mã thông báo truy cập cá nhân như ta đã làm với cấu hình hooks trước đó.
Khi bạn hoàn tất, hãy nhấp vào nút Lưu ở cuối trang.
Thực hiện xây dựng ban đầu và cấu hình Webhooks
Tại thời điểm viết bài này (tháng 6 năm 2017), Jenkins không tự động cấu hình webhook khi bạn xác định đường dẫn cho repository trong giao diện.
Để kích hoạt Jenkins cài đặt các hook thích hợp, ta cần thực hiện xây dựng thủ công lần đầu tiên.
Trong trang chính của đường dẫn của bạn, nhấp vào Xây dựng ngay ở menu bên trái:
Một bản dựng mới sẽ được lên lịch. Trong hộp Lịch sử xây dựng ở góc dưới bên trái, một công trình mới sẽ xuất hiện trong giây lát. Ngoài ra, Chế độ xem sân khấu 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:
Trong hộp Lịch sử bản dựng , hãy nhấp vào số được liên kết với bản dựng để chuyển đến trang chi tiết bản dựng. Từ đây, bạn có thể nhấp vào nút Đầu ra của Control panel ở menu bên trái để xem chi tiết các bước đã chạy:
Nhấp vào mục Quay lại Dự án trong menu bên trái khi bạn hoàn tất để quay lại chế độ xem đường dẫn chính.
Bây giờ ta đã xây dựng dự án một lần, ta có thể nhờ Jenkins tạo webhook cho dự án của ta . Nhấp vào Định cấu hình trong menu bên trái của đường dẫn:
Không cần thay đổi trên màn hình này, chỉ cần nhấp vào nút Lưu ở dưới cùng. Bây giờ Jenkins đã có thông tin về dự án từ quá trình xây dựng ban đầu, nó sẽ đăng ký webhook với dự án GitHub của ta khi bạn lưu trang.
Bạn có thể xác minh điều này bằng cách truy cập repository GitHub của bạn và nhấp vào nút Cài đặt . Trên trang tiếp theo, nhấp vào Webhooks từ menu bên. Bạn sẽ thấy webhook server Jenkins của bạn trong giao diện chính:
Bây giờ, khi bạn đẩy các thay đổi mới vào repository của bạn , Jenkins sẽ được thông báo. Sau đó, nó sẽ kéo 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 repository của ta trên GitHub, bạn có thể nhấp vào nút Tạo file mới ở bên trái của Bản sao màu xanh lục hoặc nút download :
Trên trang tiếp theo, chọn tên file và một số nội dung giả:
Nhấp vào nút Commit file mới ở dưới cùng khi bạn hoàn tất.
Nếu bạn quay lại giao diện Jenkins của bạn , bạn sẽ thấy một bản dựng mới tự động bắt đầu:
Bạn có thể bắt đầu các bản dựng bổ sung bằng cách thực hiện commit đối với bản sao local của repository và đẩy nó trở lại GitHub.
Kết luận
Trong hướng dẫn này, ta đã cấu hình Jenkins để xem một dự án GitHub và tự động kiểm tra mọi thay đổi mới được commit . Jenkins kéo mã từ repository và sau đó chạy các thủ tục xây dựng và thử nghiệm từ bên trong các containers 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
.
Các tin liên quan
Cách cài đặt và cấu hình Drone trên Ubuntu 16.042017-06-14
Cách giám sát cảnh báo Zabbix với Alerta trên Ubuntu 16.04
2017-06-13
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 16.04
2017-06-08
how-to-config-an-orientdb-cluster-on-ubuntu-16-04
2017-06-02
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên Ubuntu 16.04
2017-06-01
Cách bật SFTP mà không cần truy cập Shell trên Ubuntu 16.04
2017-05-31
Cách tạo Go Executables cho nhiều nền tảng trên Ubuntu 16.04
2017-05-30
Cách cài đặt Concourse CI trên Ubuntu 16.04
2017-05-26
Cách giám sát server và dịch vụ bằng Icinga trên Ubuntu 16.04
2017-05-05
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 16.04
2017-04-28