+4

Bài 6: Cấu hình Jenkins trên Ubuntu 22.04 và viết Pipeline Build Service

Jenkins là một máy chủ tự động hóa nguồn mở, tự động hóa các tác 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. Jenkins dựa trên Java, được cài đặt từ các gói Ubuntu hoặc bằng cách tải xuống và chạy tệp lưu trữ ứng dụng web (WAR) của mình-một bộ sưu tập các tệp tạo nên một ứng dụng web hoàn chỉnh để chạy trên máy chủ.

Trong hướng dẫn này, bạn sẽ cài đặt Jenkins trên Ubuntu 22.04, bắt đầu máy chủ phát triển và tạo người dùng quản trị để bắt đầu khám phá tự động hóa Jenkins. Vào cuối hướng dẫn này, bạn sẽ có một máy chủ Jenkins không có bảo đảm sẵn sàng để triển khai phát triển.

Yêu Cầu hệ thống

  • Một máy chủ Ubuntu 22.04 được cấu hình với người dùng sudo không root và tường lửa bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của Ubuntu 22.04.Ở đây thì mình yêu cầu bạn nên bắt đầu với ít nhất 1 GB RAM. Bạn có thể tham khảo yêu cầu phần cứng ở đưỡng dẫn: https://www.jenkins.io/doc/book/scaling/hardware-recommendations/.
  • Đã cài đặt Oracle JDK 11.

Bước 1: Cài đặt Oracle JDK 11

Để cài đặt phiên bản OpenJDK của Java, trước tiên hãy cập nhật chỉ mục gói apt của bạn:

sudo apt update

Tiếp theo, kiểm tra xem Java đã được cài đặt chưa:

java -version

Nếu Java hiện chưa được cài đặt, bạn sẽ nhận được kết quả sau:

Output
Command 'java' not found, but can be installed with:

sudo apt install default-jre              # version 2:1.11-72build1, or
sudo apt install openjdk-11-jre-headless  # version 11.0.14+9-0ubuntu2
sudo apt install openjdk-17-jre-headless  # version 17.0.2+8-1
sudo apt install openjdk-18-jre-headless  # version 18~36ea-1
sudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1

Thực hiện lệnh sau để cài đặt JRE từ OpenJDK 11:

sudo apt install openjdk-11-jre-headless 

JRE sẽ cho phép bạn chạy hầu hết các phần mềm Java.

Xác minh cài đặt với:

java -version
Output
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2)
OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2, mixed mode, sharing)

Như vậy thì bạn đã cài đặt OpenJDK 11 thành công.

Bước 2: cài đặt Jenkins

Phiên bản Jenkins đi kèm với các gói Ubuntu mặc định thường là phiên bản mới nhất.

Đầu tiên, thêm khóa kho lưu trữ vào hệ thống của bạn:

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg

Tiếp theo, hãy thêm địa chỉ kho lưu trữ gói Debian vào sources.list của máy chủ:

sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

Phần [signed-by=/usr/share/keyrings/jenkins.gpg] của dòng đảm bảo rằng apt sẽ xác minh các tệp trong kho lưu trữ bằng khóa GPG mà bạn vừa tải xuống.

Sau khi cả hai lệnh đã được nhập, hãy chạy cập nhật APT để APT sẽ sử dụng kho lưu trữ mới.

sudo apt update

Cuối cùng, cài đặt Jenkins bằng lệnh :

sudo apt install jenkins

Bây giờ Jenkins và các phần phụ thuộc của nó đã sẵn sàng, chúng tôi sẽ khởi động máy chủ Jenkins

Bước 3: Start Jenkins

Bây giờ Jenkins đã được cài đặt, hãy bắt đầu bằng cách sử dụng systemctl:

sudo systemctl start jenkins.service

systemctl không hiển thị đầu ra trạng thái, nên chúng tôi sẽ sử dụng lệnh status để xác minh rằng Jenkins đã bắt đầu thành công:

sudo systemctl status jenkins

Nếu mọi thứ suôn sẻ, phần đầu của đầu ra trạng thái cho thấy dịch vụ đang hoạt động và được định cấu hình để bắt đầu khi khởi động:

Output
● jenkins.service - Jenkins Continuous Integration Server
     Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-01-19 16:07:28 UTC; 2min 3s ago
   Main PID: 88180 (java)
      Tasks: 42 (limit: 4665)
     Memory: 1.1G
        CPU: 46.997s
     CGroup: /system.slice/jenkins.service
             └─88180 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080

Bây giờ Jenkins đã hoạt động và chạy, bay giờ bạn cần phải bật tường lửa (Firewall) và sử dụng.

Bước 4: Cấu hình tường lửa (Firewall)

Theo mặc định, Jenkins chạy trên cổng 8080. Mở cổng đó bằng ufw:

sudo ufw allow 8080

Kiểm tra trạng thái của UFW để xác nhận các quy tắc mới:

sudo ufw status

Bạn sẽ thấy rằng các truy cập được phép chuyển đến cổng 8080 từ mọi nơi:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8080                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8080 (v6)                  ALLOW       Anywhere (v6)

Với việc cài đặt Jenkins và cấu hình tường lửa, bạn đã hoàn tất giai đoạn cài đặt và có thể tiếp tục cấu hình Jenkins.

Bước 5: Thiết lập ban đầu cho Jenkins

Để thiết lập cài đặt của bạn, hãy truy cập Jenkins trên cổng mặc định của nó, 8080, sử dụng tên miền hoặc địa chỉ IP máy chủ của bạn: http://host:8080 (Host là ip của máy host)

Bạn sẽ nhận được màn hình Mở khóa Jenkins, hiển thị vị trí của mật khẩu ban đầu:

image.png

Trong cửa sổ terminal, sử dụng lệnh cat để hiển thị mật khẩu:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Sao chép mật khẩu chữ và số 32 ký tự từ terminal và dán nó vào trường mật khẩu , sau đó nhấp vào Tiếp tục.

Màn hình tiếp theo hiển thị tùy chọn cài đặt các plugin được đề xuất hoặc chọn các plugin cụ thể:

Screenshot 2023-01-20 at 1.58.44 AM.png

Ở đây mình khuyên các bạn sử dụng Install suggested plugins để tiếp tục tiến trình cài đặt

Screenshot 2023-01-20 at 1.59.50 AM.png Tiếp tục chờ đợi tiến trình cài đặt

Sau khi quá trình cài đặt hoàn tất, sẽ đến bước tạo user admin

Screenshot 2023-01-20 at 2.01.02 AM.png

Tiếp tục nhập username với password

sau đó nhấp vào "Save and Finish" để hoàn thành cài đặt

10.86.144.185_8080_.png

Như vậy mình đã cài đặt và thiết lập ban đầu cho jenkins xong rồi, tiếp tục thì mình sẽ viết bộ build image service01 và service02

Bước 6: Viết Code Pipeline Build Service

Ở đây mình có viết trước code jenkins build và push lên git các bạn lấy code về theo github

https://github.com/tdduydev/microk8s-series/tree/main/microservices

trong thư mục build sẽ có 1 file Jenkinsfile mình viết trước có cấu trúc như sau

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Build jar') {
            steps {
                script {
                        sh 'sh ./microservices/service01/build-image.sh' // Trỏ đến thư mục build
                }
            }
        }
    }
    post {
        always {
            deleteDir() /* clean up our workspace */ 
        }
    }
}

build-image .sh

#!/bin/bash

#remove images
docker rmi $(docker images '192.168.56.2:32000/service01' -a -q) //Xoá image cũ

docker build --no-cache=true -t 192.168.56.2:32000/service01 .  -f ./microservices/service01/Dockerfile // Build lại image mới
echo "Finish build docker images  "

echo "Begin Push Images to Local Docker Repository"

docker push "192.168.56.2:32000/service01:latest" // Đẩy image lên repository

echo "Finish Push Images to Local Docker Repository"
docker image ls

exit 0

Cảm ơn các bạn đã xem, bài sau mình sẽ hướng dẫn các bạn sử dụng Kong Gateway để triển khai API Gateway cho hệ thống Microservices trên 2 Image của bạn vừa build thành công


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.