Hướng dẫn triển khai CI/CD cho hệ thống deploy code trên AWS và Jenkins

Tổng quan về CI/CD

Trong bài viết này, bạn sẽ làm quen với việc sử dụng CI/CD, biết khái niệm về CI/CD và có thể tạo ra 1 hệ thống CI/CD cơ bản. Cụ thể bạn sẽ thử tạo 1 hệ thống CI trên AWS và Jenkins để tự động hóa quá trình deploy code.

CI/CD là gì?

CI/CD là một phương pháp, bao gồm CI (Continuous Integration) và CD (Continuous Delivery). Khái niệm chính của CI/CD là quá trình tích hợp (integration) và kiểm tra liên tục, nhanh chóng hơn sau khi code và thường xuyên cập nhật phiên bản mới (delivery).Những lợi ích của CI/CD

  • Continuous Testing: CI/CD sẽ liên tục kiểm tra test code mới. Điều này giúp ngăn chặn các lỗi trong hệ thống trước khi code mới được cập nhật lên Server.
  • Short Code: CI/CD có thể cập nhật các đoạn code ngắn của phần cần sửa hoặc cải thiện trong khi cả hệ thống vẫn đang chạy bình thường. Điều này giúp dễ kiểm tra và sửa lỗi code hơn. Lập trình viên có thể dễ dàng xác định vị trí đoạn code lỗi mà không phải xem lại toàn bộ.
  • Quick Release: CI/CD sẽ cập nhật và kiểm tra code được cập nhật mới liên tục. Lỗi hệ thống nếu có sẽ dễ dàng được phát hiện và xác định vị trí, tách biệt. Điều này giúp cho quá trình release code sẽ nhanh và dễ dàng hơn.
  • Fast MTTR: MTTR hay Mean Time To Resolution, nghĩa là thời gian cần để sửa lỗi trên hệ thống đang chạy. CI/CD sẽ chia các đoạn code ra thành từng phần để kiểm tra. Điều này giúp các đoạn code được tách biệt, lập trình viên có thể dễ dàng xác định vị trí đoạn code lỗi mà không phải xem lại toàn bộ.
  • Simple Maintenance: CI/CD có định dạng dễ nhìn, các bản cập nhật hệ thống từ trước cũng được tích hợp lưu lại. Lập trình viên có thể xem qua code cũ để dễ dàng kiểm tra và bảo trì hệ thống.

CI/CD trên AWS

AWS có một hệ sinh thái riêng có thể cấu hình hệ thống CI/CD, kết nối giữa EC2 và Codecommit của AWS hoặc các mã nguồn mở khác như github,… Ở bài viết này, ta sẽ xây dựng một hệ thống CD giữa EC2 và Codecommit của AWS.

CICD using AWS CodePipeline

Bước 1: Tạo Codecommit

Để thiết lập hệ thống CI/CD, ta cần tạo 1 repo Codecommit để chứa và quản lý code trên AWS:
– Truy cập vào AWS Management Console, tìm CodeCommit trong menu Services để truy cập vào CodeCommit.
– Ở thanh điều hướng, chọn Create Repository để tạo mới

Create Repository để tạo mới

– Ở trang Create Repository, nhập tên repo cần tạo và chọn Create

リポジトリの作成

Sau khi tạo repo thành công, ta upload file .yml (file cấu hình deploy tự động) và folder script lên repo vừa tạo

自動デプロイ構成ファイル

Nội dung file appspec.yml:

version: 0.0

os: linux

files:

– source: /index.php

destination: /var/www/test/

hooks:

BeforeInstall:

– location: scripts/install_dependencies

timeout: 300

runas: root

– location: scripts/start_server

timeout: 300

runas: root

ApplicationStop:

– location: scripts/stop_server

timeout: 300

runas: root

Folder script: http://file.tek1.top/sharing/zhXUe6o1v

Bước 2: Tạo role cho EC2 có quyền access vào S3

– Tìm mục IAM trong menu Services để truy cập vào mục IAM
– Ở thanh điều hướng, chọn Roles và Create role

S3にアクセスできるEC2のロールを作成します

– Ở trang Create role, mục Common use cases nhấn chọn EC2 và nhấn Next Permission

ロールの作成

– Ở trang 2 Create role, mục filter policies nhập s3 vào để search, chọn AmazonS3FullAccess và nhấn Next: Tags

Amazon-S3-FullAccess

– Ở trang 3, nhập tags vào và chọn Next: Review

3ページで、タグを入力し

– Ở trang 4, nhập Role Name và chọn Create role

4ページで、役割名を入力し

Vậy là ta đã hoàn thành tạo role cho EC2 có quyền access vào S3

Bước 3: Tạo role CodeDeploy

– Tìm mục IAM trong menu Services để truy cập vào mục IAM

– Ở thanh điều hướng, chọn Roles và Create role

CodeDeployロールを作成する

– Ở trang Create role, chọn use case là CodeDeploy, nhấn Next: Permissions

ユースケースCodeDeployを選択し

– Ở trang 2 và 3 Create role, tiếp tục nhấn Next

– Ở trang 4, nhập Role name và nhấn Create role

4ページで、役割名を入力し、[役割の作成]をクリックします

Vậy là ta đã tạo thành công role Codedeploy

Bước 4: Chuẩn bị 1 Server EC2 để deploy code

– Tạo 1 Server EC2 với IAM role là role vừa tạo ở bước 2 hoặc chỉnh IAM role của EC2 đã có sẵn với role trên.

上記のロールを使用して既存のEC2IAMロールを変更します

– Dùng các câu lệnh sau để cài đặt gói codedeploy lên Server:

#!/bin/bash

yum -y update

yum install -y ruby

yum install -y aws-cli

cd /home/centos

aws s3 cp s3://aws-codedeploy- ap-northeast-1/latest/install . –region ap-northeast-1

chmod +x ./install

./install auto

Ở đây region của EC2 là ap-northeast-1, có thể thay đổi thông số này tùy theo region của EC2

Bước 5: Tạo CodeDeploy

– Truy cập vào AWS Management Console, tìm CodeDeploy trong menu Services để truy cập vào CodeDeploy.
– Ở thanh điều hướng, chọn Application và Create application

ナビゲーションバーで、[アプリケーション]と[アプリケーションの作成]を選択します

  • Ở trang Create application, nhập các thông số name và platform vào, sau đó chọn Create application

[アプリケーションの作成]を選択します

  • Sau khi tạo xong, ở thanh điều hướng chọn Create deployment group

ナビゲーションバーで[展開グループの作成]を選択します

  • Ở trang Create deployment group, ta nhập group name, Service role là role được tạo ở bước 3:

サービスロールは、手順3で作成されたロールです

– Ở mục Environment Configuration, ta chọn Amazon Ec2 instances và khai báo thông tin EC2 dùng để deploy:

Environment-Configuration

  • Ta giữ nguyên các mục còn lại và bỏ chọn Enable Load Balancing:

ロードバランシング有効

Sau đó nhấn Create deploy group để tạo mới

Bước 6: Tạo CodePipeline

– Ở thanh điều hướng, chọn CodePipeline và Create pipeline

[パイプラインの作成]ボタンを選択します

– Ở trang Create new pipeline, nhập pipeline name và chọn Next

新しいパイプラインの作成のページで

– Ở trang Next Source Stage, ta chọn nguồn lấy code mới. Ở đây ta dùng AWS CodeCommit

新しいコードを取得するためのソースを選択します

– Ở trang Build Stage, do bài lab này ta dùng file .yml để deploy nên chọn Skip build stage để bỏ qua stage này

– Ở trang deploy stage, ta chọn provider là AWS Codedeploy và nhập các thông tin đã cấu hình ở các bước trên

プロバイダーをAWS-Codedeployとして選択し
– Ở bước review cuối cùng, ta chọn Create Pipeline

Sau khi tạo Pipeline thành công, ta tiến hành test bằng cách push hoặc upload code mới trên Codecommit, Pipeline sẽ tiến hành check source trên Codecommit và tự động deploy code lên Server:

Codecommitで新しいコードをプッシュまたはアップロードしてテストを実行します

CI-CD trên Jenkins

Jenkis là 1 mã nguồn mở hỗ trợ chức năng CI-CD và xây dựng các tác vụ vận hành tự động hóa. Ở bài lab này, ta sẽ làm 1 CD cơ bản trên Jenkins và gitlab.

set-up-a-basic-CICD-in-Jenkins-and-gitlab.

Bước 1: Tạo key trên Server

– Truy cập vào Server cần deploy, tạo 1 folder mới: /home/centos/temp
– Vào folder vừa tạo, dùng lệnh sau để tạo key jenkins:
ssh-keygen -f jenkins_id_rsa
– Sau khi tạo key, dùng lệnh sau để xem nội dung file key public:

ssh-keygen-f-jenkins-id-rsa

– Ta copy file key này và lưu lại.

Bước 2: Import file public key vào project trên gitlab

– Truy cập vào project cần cấu hình CD trên gitlab
– Ở thanh điều hướng, chọn Setting -> Repository -> Deploy keys
– Ở phần Deploy keys nhập thông số tittle và file key public vừa tạo ở bước trên, chọn Add key

Jenkins-deploy-tokens

Bước 3: Clone project trên gitlab và cấu hình trên Server

– Ta phân quyền cho folder /home/centos/temp bằng lệnh:
chown -R centos:root /home/centos/temp
– Vào folder /home/centos/temp, clone project về

chown--R-centos

– Tạo 1 file pull.sh trong folder /home/centos/temp, nội dung file:
eval `ssh-agent`

ssh-agent $(ssh-add /home/centos/temp/jenkins_id_rsa; git fetch; git pull)

ssh-agent

Bước 4: Cấu hình trên Jenkins

– Truy cập Jenkins, ở thanh điều hướng chọn Manage Jenkins -> Manage Credentials -> global -> Add Credentials

Add-Credentials

– Ở trang Add Credentials, nhập các thông số để Jenkins có thể SSH vào Server cần deploy

SSH-Jenkins-Private-key

– Truy cập Jenkins, ở thanh điều hướng chọn Manage Jenkins -> Manage Nodes and Clouds -> New Node
– Ở trang New Node, nhập Node name, tích chọn Permanent Agent và nhấn OK

Jenkinsの管理

– Ở bước này, nhập các thông số Name, Remote root Directory và thông số SSH vào Server

およびSSHパラメータをサーバーに入力します

– Nhấn SAVE và chọn Launch Agent
– Khi Agent kết nối thành công, Node Server vừa tạo sẽ online trên Jenkins

Jenkins-server-OT

Bước 5: Tạo project chạy CD trên Jenkins

– Truy cập vào Jenkins, ở thanh điều hướng chọn New Item
– Ở trang New Item, nhập tên Item muốn tạo và chọn Freestyle Project, chọn OK

Jenkins-enter-item-name

– Ở mục General, tích chọn để chỉnh các thông số sau:
Discard old builds: chỉ giữ lại 15 bản build gần nhất

Jenkins-Discard-old-builds

This project is parameterized

This-project-is-parameterized

This-project-is-parameterized-version

  • Ở mục Pipeline script, ta điền nội dung script vào:

 

currentBuild.result = “SUCCESS”

stage(‘Start service’){

node(‘Server-OT’){

echo “start pull”

sh ‘cd /home/centos/temp/jenkins && sh /home/centos/temp/pull.sh  || true’

echo “Deployment is completed”

}

}

Deployment-is-completed

Trong đó node là nội dung tên node và file pull.sh là những thông tin vừa tạo ở phía trên.

Bước 6: Chạy deploy code trên Jenkins

– Truy cập Jenkins, ở mục Dashboard chọn project vừa tạo ở bước trên.
– Ở trang project, ở thanh điều hướng chọn Build with parameters

Build-with-parameters

– Kết quả code được pull từ gitlab về Server thành công trên Jenkins:

Build-with-parameters-Stage-view

Trên đây là các khái niệm về CI/CD và hướng dẫn tạo ra 1 hệ thống CI/CD cơ bản trên AWS và Jenkins để giúp bạn tự động hóa quá trình deploy code một cách an toàn, nhanh chóng và đúng chuẩn. Hy vọng bài viết sẽ giúp ích cho các bạn.

    Xin vui lòng liên hệ với nhân viên hỗ trợ qua số điện thoại hoặc email bên dưới:
    Điện thoại: (+84)2866-529-333,
    Email: info@onetech.vn
    Hoặc bạn có thể gửi thông tin trực tiếp đến OneTech thông qua mẫu bên dưới:

    Liên hệ

    Xin vui lòng liên hệ với nhân viên hỗ trợ qua số điện thoại hoặc email bên dưới:
    Điện thoại: (+84)2866-529-333, Email: info@onetech.vn
    Hoặc bạn có thể gửi thông tin trực tiếp đến OneTech thông qua mẫu bên dưới:

      Xin vui lòng liên hệ với nhân viên hỗ trợ qua số điện thoại hoặc email bên dưới:
      Điện thoại: (+84)2866-529-333,
      Email: info@onetech.vn
      Hoặc bạn có thể gửi thông tin trực tiếp đến OneTech thông qua mẫu bên dưới:

      Liên hệ

      Xin vui lòng liên hệ với nhân viên hỗ trợ qua số điện thoại hoặc email bên dưới:
      Điện thoại: (+84)2866-529-333, Email: info@onetech.vn
      Hoặc bạn có thể gửi thông tin trực tiếp đến OneTech thông qua mẫu bên dưới:

      liên hệ