@manhng

Welcome to my blog!

GitLab & Jenkins

July 23, 2020 13:16

GitLab & Jenkins (edit)

  • GitLab
  • Jenkins
  • Jira
  • Selenium
  • jMeter
  • Redmine
  • Odoo ERP
  • WiX Toolset
  • PowerShell script

GitLab

Hiện tại Gitlab hỗ trợ 3 phiên bản là

  • CE (Gitlab community editon) Bản opensource
  • EE (Gitlab enterprise edition) Bản dành cho doanh nghiệp
  • CI (Gitlab continuous intergration) Giải pháp tích hợp liên tục

Bạn sẽ hiểu thêm về:

  • GitLab CI (Continuous Integration)
  • Git Flow
  • Pipelines

Đăng ký tài khoảnhttps://gitlab.com/users/sign_up

Confirm qua mailYour email address has been successfully confirmed.

Tạo dự án:

Project name

Project URL

Project slug

Project description

SSH Key: You won't be able to pull or push project code via SSH until you add an SSH key to your profile

SSH Keys

SSH keys allow you to establish a secure connection between your computer and GitLab.

+ Add an SSH key

Tham khảo:

https://backlog.com/git-tutorial/vn/intro/intro1_1.html (Sử dụng GIT)

https://blog.cloud365.vn/other/huong-dan-thao-tac-co-ban-voi-git/ (Sử dụng GIT)

https://csc.edu.vn/lap-trinh-va-csdl/tin-tuc/kien-thuc-lap-trinh/Git-la-gi--Nhung-khai-niem-co-ban-khi-lam-viec-tren-Git-4133 (Sử dụng GIT)

http://dce.hust.edu.vn/huong-dan-su-dung-git/ (HAY HAY HAY)

https://vntalking.com/gitlab-ci-dich-vu-git-thay-the-github-hoan-hao.html (HAY)

https://techblog.vn/tim-hieu-kien-truc-gitlab

https://viblo.asia/p/tim-hieu-kien-truc-gitlab-BAQ3vVbZvbOr

http://hanhtranglaptrinh.vn6.vn/gitlab-la-gi-tong-quan-ve-gitlab/

GitLab là gì? Cách cài đặt GitLab trên Window và Linux

https://wiki.matbao.net/gitlab-la-gi-cach-cai-dat-gitlab-tren-window-va-linux/

GitLab CI dành cho người mới bắt đầu

https://www.codetot.net/gitlab-ci/

Hướng dẫn tạo GitLab và cách sử dụng

https://f5dev.net/code-tool/huong-dan-tao-gitlab-va-cach-su-dung/

Giải thích và hướng dẫn cài đặt Gitlab Continuous Deployment một cách dễ hiểu nhất

https://laptrinhcuocsong.com/giai-thich-va-huong-dan-cai-dat-gitlab-continuous-integration.html

Tổng quan về Git và Gitlab và tại sao nên dùng Gitlab?

https://thinhweb.com/tong-quan-ve-git-va-gitlab-va-tai-sao-nen-dung-gitlab/

Youtube:

https://www.youtube.com/playlist?list=PLimUMiJPPvQARw0JZXWIrAeG8Zu-Lmp3- (HAY)

CI/CD trên GitLab

https://medium.com/@boygiandi/h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-t%E1%BB%B1-%C4%91%E1%BB%99ng-deploy-firebase-project-b%E1%BA%B1ng-gitlab-ci-cd-a785177338c2

Create Pull Request

https://topdev.vn/blog/huong-dan-tao-pull-request-dung-cach/

Jenkins

Hướng dẫn sử dụng Jenkins

https://gocit.vn/bai-viet/ci-cd-huong-dan-su-dung-jenkins/

IT, IP Address & Server:

https://www.thuysys.com/ (IT Staff)

Cấu hình địa chỉ ip tĩnh trên Server

https://www.thuysys.com/co-ban/cau-hinh-static-ip-tren-may-chu.html

Tìm hiểu và hướng dẫn cách chỉnh sửa file hosts

https://www.thuysys.com/co-ban/tim-hieu-va-huong-dan-cach-chinh-sua-file-hosts.html

Giới thiệu và cài đặt Windows Server 2008

https://www.thuysys.com/co-ban/gioi-thieu-va-cai-dat-windows-server-2008.html

IP Private , IP Public, IP Dynamic, IP Static, mạng Internet, mạng LAN

https://www.thuysys.com/co-ban/tim-hieu-va-phan-biet-ip-public-ip-private-trong-mang-may-tinh.html

Others:

Website, Web App:

https://viblo.asia/p/website-va-su-nham-lan-giua-website-va-webapp-roavrBjbvRM

Web cá nhân:

https://viblo.asia/p/tay-trang-lam-nen-mot-trang-web-ca-nhan-chuyen-nghiep-khong-ton-mot-xu-4dbZNoB8lYM

Unit Test:

https://viblo.asia/p/bang-cheat-sheet-tham-khao-cho-unit-test-de-dang-hon-aWj53vR8l6m

Phần mềm quản lý Files trên Windows 10

https://viblo.asia/p/gioi-thieu-cac-phan-mem-quan-ly-file-cho-windows-10-manh-nhat-minh-dang-su-dung-yMnKMOOal7P

UI/UX: UX/UI Performance Best Practices

https://viblo.asia/p/ux-best-practice-hack-nao-nguoi-dung-de-lam-cho-trang-web-va-ung-dung-cua-ban-cam-giac-nhanh-hon-6J3ZgOWBZmB

https://material.io/design/material-studies/owl.html (Practice)

TMĐT Open Source (PHP)

https://viblo.asia/p/cac-ma-nguon-mo-tot-nhat-de-lam-website-ban-hang-thuong-mai-dien-tu-tmdt-eJ1vOaqEMkby

Kiến trúc cho hệ thống chạy ứng dụng Web lớn

https://viblo.asia/p/lua-chon-kien-truc-cho-he-thong-chay-ung-dung-web-maGK74NbZj2

Create App Package

https://docs.microsoft.com/en-us/windows/msix/packaging-tool/create-app-package

Windows Installer Development Tools

https://docs.microsoft.com/en-us/windows/win32/msi/windows-installer-development-tools

WiX Toolset

https://wixtoolset.org/

https://wixtoolset.org/documentation/manual/v3/votive/authoring_first_votive_project.html

https://stackoverflow.com/questions/28414986/how-to-create-msi-installer-with-wix

https://stackoverflow.com/questions/46878752/how-to-create-msi-installer-for-asp-net-core-application-using-wix-toolset (HAY)

https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with

https://www.add-in-express.com/docs/wix-setup-package.php

HƯỚNG DẪN SỬ DỤNG JENKINS

Chào các bạn, trong bài trước, mình đã giới thiệu các khái niệm cơ bản về CI/CD, cách set up 1 ví dụ đơn giản với Jenkins. Trong bài viết này, mình sẽ hướng dẫn các bạn xây dựng 1 chuỗi các tiện ích bằng Jekins có thể áp dụng trong dự án:

Setting quyền truy cập vào hệ thống Jenkins sử dụng Google account
Xây dựng các jobs tiện ích cho dự án.
Xây dựng hệ thống thông báo.

1.Setting quyền truy cập vào hệ thống Jenkins
1.1.Thiết lập bảo mật trong Jenkins
Jenkins cung cấp 1 số cách để quản security cho phép truy cập. Bạn có thể tìm thấy và setting tại đây: http://localhost:8080/configureSecurity/

Tại đây bạn có thể chọn các option để authen một cách phù hợp.

Phần đầu tiên: Secuirty Realm – Cho phép Jenkins xác định nơi mà Jenkins có thể tìm thấy người dùng trong suốt quá trình authentication. Tại đây ta có các option lựa chọn như sử dụng users được lưu trữ tại LDAP server, sử dụng dưới account của hệ thống Unix, hoặc sử dụng trong database được build bởi chính hệ thống Jenkins.
Sử dụng option “Allow users to sign up” để cho phép user có thể đăng ký, và access vào hệ thống Jenkins.
Phần thứ 2: Xác định cách Authenrization. Tại đây bạn có thể lựa chọn các option để authen từ việc đơn giản như “Anyone can do anything”, “Logged-in users can do anything” với các vai trò được uỷ quyền trong dự án cụ thể.

Để tạo người dùng, cho phép login vào Jenkins:

Tại màn hình chính của Jenkins -> Manage Jenkins -> Manage Users -> Create User

Sau khi thêm hoàn tất việc add user, ta có thể nhìn thấy user đó tại đây:

http://localhost:8080/securityRealm/

1.2.Setting quyền truy cập và thực thi thông qua Google account.
Trong Jenkins ta có thể setup quyền truy cập và thực thi hệ thống một cách thuận tiện và dễ dàng. Để authenticate và authorize việc access vào Jenkins thông qua việc sử dụng Google account chúng ta follow theo các bước dưới đây.

1.2.1.Tạo Google OAuth Client Key.
Để bắt đầu, chúng ta cần tạo project trong Google developer consoler tại: https://console.developers.google.com/?hl=vi
Tiến hành tạo 1 project:
Sau khi tạo mới xong project, click tạo Credentials -> OAuth Client ID
Configure consent screen Nhập thông tin Email Address + product name của bạn. Các phần sau là optional bạn có thể nhập hoặc bỏ qua
Bước tiếp theo là đến việc đăng ký Jenkins URI , nơi mà chúng ta cho phép access thông qua Goolge APIs
Tại Authorized JavaScript origins: nhập Jenkins URI của bạn ( ở đây mình đặt là: http://localhost:8080 )
Tại Authorized redirect URIs chính là URI mà sẽ được redirect sau khi quá trình đăng nhập tài khoản google thành công, sẽ được redirect tới. Nhập URI Jenkins của bạn + securityRealm/finishLogin . ( Trong ví dụ này mình của mình sẽ là:http://localhost:8080/securityRealm/finishLogin )

Click create chúng ta sẽ lấy được Client ID và Clent Secret như dưới đây:
1.2.2.Install Google Login Plugin.
Từ màn hình chính -> Manage Jenkins -> Plugin Manager Chọn và install Google Login Plugin
1.2.3. Cài đặt phân quyền truy cập và thực thi các chức năng trong hệ thống.
Cài đặt plug-in giúp cho việc phân quyền dễ dàng.

Từ màn hình chính -> Manage Jenkins -> Manage Plugins -> Tab (Avaliable) Chọn Role-based Authorization Strategy để install

Quá trình installed hoàn tất, restart Jenkins.

Từ màn hình chính -> Manage Jenkins -> Configure Glogal Security. Tại mục Authorization, chọn Role-Based Strategy, sau đó Save lại.
Thiết lập các roles cho việc access vào Jenkins:

Từ màn hình chính -> Manage Jenkins -> Manage And Assign Roles -> Manage Roles:
Tại đây ta sẽ add thêm roles và các quyền thực hiện với từng roles nhất định trên Global roleshoặc trên từng Project roles . Ví dụ ở đây tôi thêm role admin full quyền tại global.

Đi đến assign roles cho từng đối tượng người dùng cụ thể:

Từ màn hình chính -> Manage Jenkins -> Manage And Assign Roles -> Manage Roles -> Assign Roles
Ở đây tôi assign cho tài khoản gmail: datvnu88@gmail.com với role là admin, khi đó khi ta login vào với tài khoảng gmail này ta có thể thực hiện được với các quyền admin đã được định nghĩa ở trên.
1.2.4. Setting Access Control lấy từ tài khoản Google account.
Vào Manage Jenkins-> Configure Global Security . Tại access control chọn Login with Google. Nhập Client Id + Client Secret ở bước trước:
Click Save để hoàn tất quá trình authentication + authorization trong Jenkins sử dụng Google account. Từ lúc này, bất cứ aceess nào vào Jenkins sẽ thông qua tài khoản Google account.
2.Xây dựng các jobs tiện ích cho project.
2.1.Build và deploy tự động lên server.
Vào project application-jenkins-demo (ví dụ settup mở đầu trong bài Jenkins trước) -> Configure . Tại mục Build, chọn add build step là Execute shell để tạp script cho việc build và deploy code:

#!/bin/sh
cd /var/lib/jenkins/jobs/application-jenkins-demo/workspace

# clean and build project again
mvn clean package

# copy .war file to webapp folder for deploying
cp gameoflife-web/target/gameoflife.war /home/datvv/Documents/dev/apache-tomcat-8.0.35/webapps/
Click vào Save để lưu cài đặt.
Click vào Build Now để start build và deploy project.
Quá trình builded and deployed thành công:
Access vào URL http://localhost:8081/gameoflife/ được kết quả là trang web được deployed thành công:

2.2.Build và deploy nhận tham số đầu vào.
Xây dựng Jobs build nhận tham số đầu vào là 1 tính năng mạnh mẽ của Jenkins. Giúp cho việc chuyển đổi, deploy sources code theo các version Tag, Hash code, Branch sources code một cách nhanh chóng và thuận tiện.

2.2.1.Cài đặt plug-in Parameterized Build:

2.2.2.Setting Jobs nhận tham số đầu vào.
Sau khi cài đặt thành công, lúc này khi ta vào mục Configure của project, ta sẽ thấy có thêm mục Job Notification
Tại đây, ta có thể thêm các param đầu vào cho các bản build sau này.
Setting Execute shell cho phép check, trở về bản hash code trước đó, trường hợp khi không nhập giá trị mã HASH_CODE thì sẽ build và deploy sources mới nhất của branch develop
#!/bin/sh
cd /var/lib/jenkins/jobs/application-jenkins-demo/workspace
if [ -n "$HASH_CODE" ]
then
echo "back to hash_code version: $HASH_CODE"
git checkout $HASH_CODE
fi
# clean and build project again
mvn clean package
# copy file .war to folder tomcat for deploying
cp gameoflife-web/target/gameoflife.war /home/datvv/Documents/dev/apache-tomcat-8.0.35/webapps/
Trở về giao diện deploy Job bây giờ sẽ cho phép ta nhập vào mã HASH_CODE khi deploy.
Bằng cách thực hiện tương tự, ta dễ dàng có thể thêm các Param đầu vào trong quá trình deploy, như trở về 1 version tag , hay deploy 1 branch sources code tại thời điểm nào đó hoặc truyền vào các tham số môi trường…để sử dụng trong quá trình build và deploy sources code.

2.3 Tạo Jobs export database cho phép users download về.
Tạo 1 jobs mới dưới tên là: ‘Dump Database From TEST server’.
Vào configure -> Build . Chọn Execute shell cho việc thực hiện export database.
Ví dụ ở đây tôi dùng postgresql:
#!/bin/sh
# define filename for db backup
FILE=db_on_server_test_backup.sql
NAME=${FILE%.*}
EXT=${FILE#*.}
DATE_TIME=`date +%y-%m-%d-%H%M%S`
FILE_EXPORT=${NAME}_${DATE_TIME}.${EXT}
# remove all file before export
rm /var/lib/jenkins/workspace/Dump\ Database\ From\ TEST\ server/*
# export db to folder share
pg_dump -h localhost -U postgres db_for_testing | gzip > /var/lib/jenkins/workspace/Dump\ Database\ From\ TEST\ server/$FILE_EXPORT.gz
Sau khi export file database xong, ta cần tạo archive artifacts để cho phép users có thể tải xuống dễ dàng.

Vào Add post build action -> Archive the artifacts . Tạo pattern để archive file. Ví dụ ở đây ta chọn pattern là *.gz để archive fle database đã được export từ phần trên.
1 điều chú ý là: mặc định Jenkins sẽ lấy các archive affacts base trên wokspace cài đặt jenkins của project:
The base directory is the workspace. You can only archive files that are located in your workspace.
Quá trình builded và tạo archived file thành công:

2.4. Tạo Jobs backup database cuối ngày.
Trong Jenkins ta có thể dễ dàng tạo ra 1 Schedule cho phép thực thi 1 công việc bất kỳ, ví dụ như backup database cuối mỗi ngày.

Tạo 1 jobs mới với tên “Auto backup DB at last day every day” Vào Configure jobs -> Build Triggers -> Chọn Build periodically để tạo schedule cho việc build.
Tại đây ta đặt schedule để build jobs theo định dạng:
MINUTE HOUR DOM MONTH DOW
MINUTE Minutes within the hour (0–59)
HOUR The hour of the day (0–23)
DOM The day of the month (1–31)
MONTH The month (1–12)
DOW The day of the week (0–7) where 0 and 7 are Sunday.
Ví dụ ở đây ta sẽ đặt 59 23 * * * khi đó job backup database của chúng ta sẽ được chạy hàng ngày vào thời 23h59′.
Sau cùng là xuống hạng mục Build -> Excecute Shell để tạo script backup database hàng ngày.
#!/bin/sh
# define filename for db backup
FILE=db_on_server_test_backup.sql
NAME=${FILE%.*}
EXT=${FILE#*.}
DATE_TIME=`date +%y-%m-%d-%H%M%S`
FILE_EXPORT=${NAME}_${DATE_TIME}.${EXT}

# backup db
pg_dump -h localhost -U postgres db_for_testing | gzip > /home/datvv/Documents/Jenkins/DB_Backup/$FILE_EXPORT.gz

3.Xây dựng hệ thống thông báo.
3.1. Sử dụng thông báo qua email:
3.1.1. Setting mail Jenkins cho mục đích gửi mail tới users sau khi build xong.
Chọn Manage Jenkins -> Configure System. Tại E-mail Notification ta sẽ setting các thông tin, giao thức gửi mail
3.1.2. Cài đặt plug-in Email-ext cho phép tùy biến các chiến lược gửi email thông báo.

3.1.3. Setting thông báo qua email:
Vào Configure -> Add post-build action -> Editable Email Notification Tại đây ta có thể setup các tùy chọn người nhận, nội dung gửi với các tùy biến khác nhau:
3.2. Thông báo tới users/groups chatwork sử dụng chatwork API.
Tham khảo tài liệu chatwork API tại: http://download.chatwork.com/ChatWork_API_Documentation.pdf
Vào Configure -> Build -> Add build step -> Execute shell để tạo shell script cho mục đích thông báo tới users/groups trong chatwork
NOTIFICATION_COMPLETELY="The deployment process has been completed!"
curl -X POST -H "X-ChatWorkToken:efb89bedcdd62f6d4689719xxxxxxx" -d "body=$NOTIFICATION_COMPLETELY" https://api.chatwork.com/v2/rooms/49641999/messages

Chương trình chạy và gửi thông báo quá trình deployed thành công:
4. Tổng kết.
Trong bài này mình đã giới thiệu cho các bạn về cách phân quyền thực thi trong Jenkins, cũng như một số Jobs hữu ích có thể sử dụng trong quá trình setup. Rất mong các bạn có thể áp dụng một các linh động trong quá trình làm việc. Thanks for reading!

Categories

Recent posts