Tìm kiếm Blog này

Translate

Thứ Năm, 19 tháng 11, 2020

[CI/CD] Jenkins - Git - Docker Hub - Ubuntu



Trong phạm vi bài viết này, chúng ta sẽ xây dựng một phần trong hệ thống tự động hóa CI/CD hỗ trợ cho quy trình phát
triển phần mềm dựa trên các thành phần sau:

Giới thiệu khái quát

Jenkins là gì?

Jenkins là một máy chủ tự động hóa mã nguồn mở viết bằng Java được sử dụng để tự động hóa tất cả

các loại nhiệm vụ liên quan đến xây dựng, thử nghiệm và triển khai phần mềm. Jenkins có thể được

cài đặt thông qua các gói phần mềm, Docker hoặc thậm chí chạy độc lập bởi bất kỳ máy nào có cài đặt

Java Runtime Environment (JRE).

Blue Ocean là gì?

Blue Ocean là gói giao diện người dùng dành cho Jenkins dựa trên thiết kế hiện đại, có thể cá nhân hóa

cho phép người dùng tạo, trực quan hóa và chẩn đoán sự cố dễ dàng hơn so với giao diện mặc định.

Docker là gì?

Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các

container ảo hóa. Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux. Docker sử dụng

những tài nguyên cô lập của Linux như cgroups, kernel, quản lý tệp để cho phép các container chạy độc lập

bên trong một thực thể Linux

Ubuntu là gì?

Ubuntu là một hệ điều hành máy tính dựa trên Debian GNU/Linux, một bản phân phối Linux thông dụng.

Tên của nó bắt nguồn từ "ubuntu" trong tiếng Zulu, có nghĩa là "tình người", mô tả triết lý ubuntu:

"Tôi được là chính mình nhờ có những người xung quanh," một khía cạnh tích cực của cộng đồng.

Mục đích của Ubuntu bao gồm việc cung cấp một hệ điều hành ổn định, cập nhật cho người dùng thường,

và tập trung vào sự tiện dụng và dễ dàng cài đặt. Ubuntu đã được đánh xếp hạng là bản phân phối Linux

thông dụng nhất cho máy tính để bàn, chiếm khoảng 30% số bản Linux được cài đặt trên máy tính để bàn

năm 2007.

Điều kiện cần có trước khi bắt đầu

  1. Một server chạy hệ điều hành Linux (ở đây mình sử dụng Ubuntu), Bạn có thể chọn các hệ điều hành khác như CentOS, Debian, Fedora, Red Hat

  2. Phần cứng tối thiểu: 1G+ RAM, 2CPU, 50G+ HDD

  3. Account có quyền sudo

Các bước thực hiện như sau

1. Cài đặt Java JDK

Chạy lệnh bên dưới

$ sudo apt update

$ sudo apt install openjdk-8-jdk


Sau khi máy chủ hoàn thành quá trình cài đặt Java, chạy lệnh sau để kiểm tra

$ java -version

openjdk version "1.8.0_275"

OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.04-b01)

OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

2. Cài đặt Jenkins

$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | \

sudo apt-key add -

$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \

    /etc/apt/sources.list.d/jenkins.list'

$ sudo apt-get update

$ sudo apt-get install jenkins

Khởi động Jenkins

$ sudo systemctl start jenkins

Có thể kiểm tra xem quá trình khởi động Jenkins có vấn đề gì hay không bằng cách

$ sudo systemctl status jenkins

jenkins.service - LSB: Start Jenkins at boot time

     Loaded: loaded (/etc/init.d/jenkins; generated)

     Active: active (exited) since Wed 2020-11-18 10:43:16 +07; 7h ago

       Docs: man:systemd-sysv-generator(8)

    Process: 15624 ExecStart=/etc/init.d/jenkins start ...

 

Tiếp theo, chúng ta chuyển qua bước thiết lập trước khi bắt đầu sử dụng

2.1 Unlock Jenkins

Dùng trình duyệt mở url sau http://localhost:808 hoặc http://[địa chỉ ip của server]:8080

Chạy lệnh sau để lấy Administrator password

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

2.2 Cài đặt plugins

Chọn 1 trong 2:

  1. Install suggested plugins: cài đặt các plugins phổ biến

  2. Select plugins to install: lựa chọn này dành cho bạn nào đã có kinh nghiệm với Jenkins

Số 1 là lựa chọn mặc định, sau này bạn có thể cài thêm plugins tùy thích nên cũng không cần suy nghĩ nhiều.

2.3 Tạo tài khoản admin

2.4 Hoàn tất

3. Cài đặt docker

Chạy các lệnh sau để cài đặt docker

$ sudo apt-get update && apt-get install -y \

       apt-transport-https \

       ca-certificates \

       curl \

       gnupg2 \

       software-properties-common

 

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \

sudo apt-key add -

 

$ sudo apt-key fingerprint 0EBFCD88

 

$ sudo add-apt-repository \

   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

   $(lsb_release -cs) \

   stable"

 

$ sudo apt-get update && apt-get install -y docker-ce docker-ce-cli


Nếu bạn muốn chạy lệnh docker với tài khoản non-root, chạy lệnh sau

$ sudo usermod -aG docker $USER

3.1 Đưa tài khoản jenkins vào group docker

$ sudo usermod -a -G docker jenkins

$ sudo systemctl restart jenkins


Bước này giúp đảm bảo Jenkins thực hiện được công việc build image với docker, ngược lại bạn sẽ

gặp lỗi Permission denied trong quá trình chạy Job.

4. Tạo credential

Để publish được Docker image lên Docker Hub, thì Jenkins cần có Credential. 

Đi tới Manage Jenkins / Manage Credentials / Jenkins / Global Credentials / Add Credentials

Một số thông tin quan trọng cần chú ý:

  • Kind: Username with password

  • Username: Tài khoản docker hub

  • Password: Mật khẩu docker hub

  • ID: Định danh của credential, chúng ta sẽ cần tới ở các bước sau

5.

5. Cài các plugin cần cho nhiệm vụ build app và build docker image

Ở đây, do chúng ta cần build và deploy cho application chạy NodeJS và Docker, cho nên cần các plugin sau:

  1. Docker Pipeline

  1. NodeJS Plugin


Đi tới Manage Jenkins / Manage Plugins, tìm plugin cần bằng cách nhập vào search: ví dụ “NodeJS”,

tick vào checkbox, chọn Install without restart

5.1 Cấu hình cho NodeJS plugin

Đi tới Manage Jenkins / Global Tool Configuration

  • Add NodeJS

  • Name: chúng ta có thể cần nhiều phiên bản NodeJS cho các dự án khác nhau, thông tin này còn được sử dụng trong Jenkinfile sau này.

  • Chọn Install automatically.

  • Version: chọn phiên bản mà chúng ta cần

  • Save.

6. Thử nghiệm

  1. Từ panel bên trái, click New Item

  2. (1) Chọn tên cho Job mới >> (2) chọn kiểu Pipeline >> (3) sau đó click OK

  1. (1) Mở tab Pipeline (2) Definition: Pipeline script from SCM (3) SCM: chọn Git (hoặc option nào phù hợp với bạn) (4) Repository URL: url dẫn tới repository (5) Credentials: nếu Git cần xác thực thì bạn có thể thêm thông tin tại đây (6) Branches to build: chọn nhánh cần pull source từ repository (7) Script Path: Jenkinsfile (8) Save

  1. Bấm BuildNow  để chạy Job, nếu mọi việc suôn sẻ, kết quả đạt được như sau

6.1 Jenkinsfile

Chúng ta không đi sâu vào nội dung Jenkinsfile trong bài này, mình chỉ giải thích sơ một số nội dung

trong Jenkinsfile liên quan đến phần cài đặt ở các bước bên trên.

Ban có thể tham khảo tại đây https://bitbucket.org/iamhadoan/my-first-pipeline/src/master/Jenkinsfile

  • registry: domain của registry, cụ thể trong bài này là từ docker hub

  • imageName: tên của repository trên docker hub

  • registryCredential: ID của credentials được tạo ra ở bước 4

  • nodeVersion: tên của NodeJS được tạo ra ở bước 5.1

  • repository: url source code

environment { 

    registry = 'registry.hub.docker.com'

    imageName = 'doanmanhsonha/build-app-with-jenkins-docker'

    registryCredential = 'dockerhub' 

    dockerImage = '' 

    nodeVersion = 'nodejs-10-19-0'

    repository = 'https://bitbucket.org/iamhadoan/my-first-pipeline.git'

}



7. Blue Ocean (không bắt buộc)

7.1 Cài đặt

  1. Manage Jenkins / Manage Plugins

  2. Mở Available tab,tìm kiếm `Blue Ocean`

  3. Tick chọn plugin, cuối cùng click Install without restart

Sau khi plugin cài đặt thành công, có 2 cách để mở Blue Ocean:

  1. Từ trang chủ, bấm Open Blue Ocean

  1. Mở bằng url sau http://localhost:8080/blue hoặc http://[server-ip-address]:8080/blue

7.2 Thử nghiệm

  1. Tạo mới Pipeline bằng cách bấm vào New Pipeline

  1. Chọn SCM: ở đây mình chọn Git

  1. Nhập vào url

  1. Bấm Create Pipeline

  2. Mặc định, sẽ lấy tên repo làm tên job, nếu tên đã được đăng ký, thì Blue Ocean sẽ yêu cầu đặt tên khác.

  1. Sau khi bấm Save, Job mới sẽ tự động chạy. Giao diện chạy job của Blue Ocean như sau:

Bấm vào từng node để xem log

8. Webhook

Phần này mình dành lại cho các bạn tự thực hành nhé!


CHÚC CÁC BẠN THÀNH CÔNG

Không có nhận xét nào:

Đăng nhận xét

Bài đăng phổ biến