Tổng quan cài đặt Jenkins
Jenkins là gì là một opensource dùng để thực hiện chức năng tích hợp liên tục (gọi là CI – Continuous Integration) và xây dựng các tác vụ tự động hóa.
Ưu điểm lớn nhất của Jenkins là gì: có thể tích hợp với nhiều tool với các tính năng khác nhau, để hỗ trợ quy trình phát triển phần mềm và cho ra đời sản phẩm đảm bảo chất lượng. Bên cạnh đó, số lượng lớn các Plugins hiện có, với những cái tên không xa lạ như Slack, GitHub, Docker, Build Pipeline,… cũng tăng thêm tính linh hoạt của Jenkins là gì.
Giao diện đăng nhập

Sau khi cài đặt Jenkins, bạn đăng nhập vào bạn sẽ nhìn thấy giao diện mặc định cài đặt Jenkins

Tạo thư mục dự án
Sau khi đăng nhập, tại menu bên trái hãy tìm hiểu Jenkins là gì chọn New Item

Sau đó đặt tên thư mục dự án, chọn Folder và nhấn OK

Nhấn Save

Tạo Job đầu tiên
Tại thư mục dự án, nhấn New Item

Điền tên Job, sau đó chọn Pipeline và nhấn OK

Hello world!!
Tạo một pipeline để Jenkins là gì với nội dung như sau:
pipeline { agent { label 'master' } stages { stage('build') { steps { echo "Hello World!" } } } }
Sau đó chèn vào Job , nhấn Build Now

Nhấn vào Job để xem output

Kiến trúc Jenkins
Hình sau đây cho thấy kiến trúc tổng thể của Jenkins.

Jenkins Master (Máy chủ)
Máy cài đặt Jenkins nắm giữ tất cả các cấu hình chính. Máy chủ tổng thể Jenkins giống như một máy chủ điều khiển sắp xếp tất cả quy trình làm việc được xác định trong các đường ống. Ví dụ, lên lịch công việc, theo dõi công việc, v.v.
Jenkins Plugins
Plugin là các mô-đun do cộng đồng phát triển mà bạn có thể cài đặt Jenkins của mình. Nó giúp bạn có nhiều chức năng hơn mà Jenkins không có sẵn.
Ví dụ: nếu bạn muốn tải tệp lên s3 bucket từ Jenkins, bạn có thể cài đặt plugin AWS Jenkins và sử dụng các chức năng của plugin để tải tệp lên thay vì viết logic của riêng bạn trong AWS CLI. Plugin xử lý lỗi và xử lý ngoại lệ.
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'aws-key', usernameVariable: 'AWS_ACCESS_KEY_ID', passwordVariable: 'AWS_SECRET_ACCESS_KEY']]) { AWS("--region=eu-west-1 s3 ls") }
Là tập hợp các plugin được sử dụng để hỗ trợ phát triển và liên kết các công cụ phục vụ cho CICD pipeline
Một pipeline được tự động hoá thể hiện quy trình của bạn từ việc lấy mã nguồn (source code) từ hệ thống quản lý mã nguồn đến việc đưa ứng dụng đến tay khách hàng.
Jenkins Nodes / Clouds (agent)
Là một máy tính được kết nối với máy chủ cài đặt Jenkins. Jenkins node (agent) có nhiệm vụ thực thi các công việc được định nghĩa trong pipeline.
Một máy cài đặt Jenkins node (agent) có thể chạy dưới hệ điều hành: Windows, Linux, MacOS, Unix.
Jenkins Global Security
Jenkins có các loại phương thức xác thực chính sau đây.
Cơ sở dữ liệu người dùng riêng của Jenkins: – Tập hợp người dùng được duy trì bởi cơ sở dữ liệu riêng của Jenkins. Khi chúng ta nói cơ sở dữ liệu, tất cả các tệp cấu hình phẳng (tệp XML) của nó.
Tích hợp LDAP : – Xác thực Jenkins bằng cách sử dụng cấu hình LDAP của công ty.
Đăng nhập một lần SAML (SSO) : Hỗ trợ một lần đăng nhập bằng cách sử dụng các nhà cung cấp như Okta, AzureAD, Auth0, v.v.
Với bảo mật dựa trên ma trận Jenkins, bạn có thể chỉ định thêm vai trò cho người dùng về quyền mà họ sẽ có đối với Jenkins.
Cài đặt Jenkins Credentials
Khi bạn thiết lập Jenkins, có những tình huống mà nó cần kết nối với tài khoản đám mây, máy chủ, cơ sở dữ liệu hoặc điểm cuối API bằng cách sử dụng bí mật.
Trong Jenkins, bạn có thể lưu các loại bí mật khác nhau dưới dạng thông tin xác thực:
- Secret text
- Username & password
- SSH keys
Tất cả thông tin đăng nhập đều được mã hóa (AES) bởi Jenkins. Những bí mật được lưu trữ trong $JENKINS_HOME/secrets/ . Điều rất quan trọng là phải bảo mật thư mục này và loại trừ nó khỏi các bản sao lưu của Jenkins.
Jenkins Global Settings
Trong Jenkins Global Settings, bạn có tất cả các cấu hình của các plugin đã cài đặt và cấu hình toàn cầu Jenkins bản địa.
Ngoài ra, bạn có thể định cấu hình các biến môi trường mức global Ví dụ: bạn có thể lưu trữ URL của các công cụ (Nexus, Sonarqube, v.v.) dưới dạng các biến môi trường global và sử dụng chúng trong quy trình.
Jenkins Logs
Cung cấp thông tin ghi nhật ký về tất cả các hành động của máy chủ Jenkins bao gồm nhật ký công việc, nhật ký plugin, nhật ký webhook, v.v.
Jenkins Node (agent)
Các Jenkins node (agent) là các server vật lý, docker, pod K8s … thực hiện tất cả các bước được đề cập trong Công việc. Khi bạn tạo một công việc Jenkins, bạn phải chỉ định một người đại diện cho nó(server vật lý, docker, pod K8s …). Mỗi đại lý đều có một lable.
Khi bạn kích hoạt một công việc, quá trình thực thi thực sự xảy ra trên Jenkins node (agent) được cấu hình trong công việc.

Lưu ý: Bạn có thể chạy các công việc trong máy chủ Jenkins mà không cần đến Jenkins node (agent). Trong trường hợp này, Jenkins master đóng vai trò Jenkins node (agent). Tuy nhiên, cách tiếp cận được khuyến nghị là thiết lập Jenkins node (agent) cho các yêu cầu công việc khác nhau để bạn không làm hỏng máy chủ Jenkins đối với bất kỳ thay đổi cấu hình toàn hệ thống nào cần thiết cho công việc.
Bạn có thể có bất kỳ số lượng Jenkins node (agent) nào được gắn vào một Jenkins master với sự kết hợp của các máy chủ Windows, Linux và thậm chí cả vùng chứa làm Jenkins node (agent).
Ngoài ra, bạn có thể hạn chế các công việc chạy trên các Jenkins node (agent) cụ thể, tùy thuộc vào trường hợp sử dụng. Ví dụ: nếu bạn có một Jenkins node (agent) có cấu hình java 8, bạn có thể chỉ định Jenkins node (agent) này cho các công việc yêu cầu môi trường Java 8.
Không có tiêu chuẩn duy nhất cho việc sử dụng các Jenkins node (agent) . Bạn có thể thiết lập quy trình làm việc và chiến lược dựa trên nhu cầu dự án của mình.
Jenkins Master-agent Connectivity
Bạn có thể kết nối chủ Jenkins và đại lý theo hai cách
Sử dụng phương thức SSH: Sử dụng giao thức ssh để kết nối với Jenkins node (agent). Kết nối được bắt đầu từ Jenkins master. Họ phải là kết nối qua cổng 22 giữa master và Jenkins node (agent).
Sử dụng phương thức JNLP: Sử dụng giao thức java JNLP ( Java Network Launch Protoco l). Trong phương pháp này, một Jenkins node (agent) java được khởi tạo từ Jenkins node (agent) với các chi tiết chính của Jenkins. Đối với điều này, tường lửa Jenkins master phải cho phép kết nối trên cổng JNLP được chỉ định. Thông thường, cổng được gán sẽ là 50000. Giá trị này có thể định cấu hình.
Có hai loại Jenkins node (agent)
Các Jenkins node (agent) vật lý: Đây là các máy chủ (Windows / Linux) sẽ được định cấu hình làm tác nhân tĩnh . Các Jenkins node (agent) này sẽ luôn hoạt động và luôn kết nối với máy chủ Jenkins. Các tổ chức sử dụng các tập lệnh tùy chỉnh để tắt và khởi động lại các Jenkins node (agent) khi không được sử dụng. Thông thường vào các đêm và cuối tuần.
Jenkins node (agent) cloud: Jenkins node (agent) cloud là một khái niệm có các Jenkins node (agent) động . Có nghĩa là, bất cứ khi nào bạn kích hoạt một công việc, một Jenkins node (agent) sẽ được triển khai dưới dạng một máy ảo / vùng chứa theo yêu cầu và bị xóa sau khi công việc hoàn thành. Phương pháp này tiết kiệm tiền về chi phí cơ sở hạ tầng khi bạn có một hệ sinh thái Jenkins khổng lồ và các bản xây dựng liên tục.

Jenkins data
Tất cả dữ liệu Jenkins được lưu trữ ở vị trí thư mục sau.
/var/lib/jenkins/
Dữ liệu bao gồm tất cả các tệp cấu hình công việc, cấu hình plugin, secret, thông tin Jenkins Node (agent), v.v. Nó làm cho việc di chuyển Jenkins rất dễ dàng so với các công cụ khác.
Nếu bạn truy cập vào /var/ lib/jenkins, bạn sẽ tìm thấy hầu hết các cấu hình ở định dạng xml.
Việc sao lưu thư mục dữ liệu Jenkins mỗi ngày là điều cần thiết . Vì lý do nào đó, nếu dữ liệu máy chủ Jenkins của bạn bị hỏng, bạn có thể khôi phục toàn bộ Jenkins bằng bản sao lưu dữ liệu.
Lý tưởng nhất là khi triển khai Jenkins trong sản xuất, một extra volume is attached chuyên dụng được đính kèm vào các máy chủ Jenkins chứa tất cả dữ liệu Jenkins.
