Xây dựng CI/CD Pipeline sử dụng Jenkins
Khóa học này đề cập đến pipeline CI (Continuous Integration - Tích hợp liên tục) và CD (Continuous Deployment - Triển khai liên tục), một trong 4 yếu tố cốt lõi cấu thành nên ứng dụng cloud native (MSA, CI/CD, DevOps, Container). Thông qua khóa học này, bạn có thể hiểu và thực hành quy trình cần thiết để xây dựng và triển khai pipeline tự động hóa của riêng mình trên môi trường local và môi trường cloud bằng cách sử dụng Jenkins - công cụ CI/CD.
4,748 học viên
Độ khó Cơ bản
Thời gian Không giới hạn

Tin tức
5 bài viết
Xin chào, đây là Lee Do-won.
Trong bài giảng "Xây dựng đường ống CI/CD bằng Jenkins" và "Công nghệ ảo hóa Docker cho DevOps (Private Harbor Register)", một môi trường thực hành được xây dựng bằng phương pháp DinD (Docker in Docker) để chạy các container Docker một cách trơn tru và chạy các ví dụ. tôi đang làm việc đó
Tuy nhiên, môi trường Windows và MacOS là khác nhau và đối với MacOS, hình ảnh Docker phải được định cấu hình sẽ khác nhau tùy thuộc vào chip Intel hoặc chip Apple. Trong hình ảnh này, máy chủ SSH và công cụ Docker được cấu hình để cài đặt, giúp dễ dàng sử dụng khi cần nhiều bộ chứa Docker trong quá trình thực hành. Tuy nhiên, sự thật là rất khó để sản xuất nó để phù hợp với tất cả môi trường của sinh viên. Tuy nhiên, chúng tôi đang cố gắng cập nhật hình ảnh Docker để có thể thực hành mà không gặp khó khăn trong môi trường điển hình nhiều nhất có thể.
Gần đây, khi thực hành sử dụng hình ảnh docker-server:m1 được sử dụng trong chip MacOS Apple, người ta đã xác định được một lỗi khiến việc thực hành không thể thực hiện được do các lỗi sau.
exec /docker-entrypoint.sh: invalid argumentTôi đã kiểm tra và sửa lỗi qua nhiều đường dẫn khác nhau, nhưng có vẻ như lỗi xảy ra trong phương thức DinD, sử dụng kiến trúc arm64 được sử dụng trong chip MacOS Apple và cài đặt Docker engine trong vùng chứa Docker. (Không có thông báo lỗi hoặc nhật ký nên việc tìm ra nguyên nhân bị hạn chế.)
Nó được đánh giá là khó giải quyết với hình ảnh này nên chúng tôi đã xây dựng lại và phân phối một phiên bản với công cụ SSH + Docker được cài đặt trên nền tảng Ubuntu như hình bên dưới.
https://hub.docker.com/repository/docker/edowon0623/docker-server/general
Chúng tôi xác nhận rằng mọi vấn đề phát sinh nêu trên đã được giải quyết. Để khởi động dịch vụ Docker trên Ubuntn, trước tiên hãy chạy lệnh bên dưới rồi thực hành.
service start dockerChúng tôi sẽ tiếp tục cung cấp môi trường thực hành cập nhật ngay khi các vấn đề liên quan đến thực hành, chẳng hạn như vấn đề DinD, được xác định.
Tuần tới là ngày nghỉ lễ. Năm 2024 là một năm có nhiều sự kiện đối với cá nhân tôi, nhưng tôi sẽ bắt đầu một năm mới với một tinh thần mới mẻ. Năm nay tôi sẽ quay lại thường xuyên với những bài giảng hay hơn. Chúc một năm mới may mắn .
Cảm ơn
** Tham khảo khi test từ ansible-server đến K8s trên Windows
Khi kiểm tra bằng cách kết nối với Kubernetes của docker-desktop được cài đặt trên Windows bằng ansible-server, vui lòng kiểm tra thông tin bên dưới.
Khi cố gắng sao chép nội dung của tệp khóa id_rsa.pub sang Windows bằng lệnh ssh-copy-id trong ansible-server, chuỗi ECHO~ có thể được chèn thay vì nội dung của tệp khóa thông thường. Trong trường hợp này, bạn phải sao chép trực tiếp và sử dụng nội dung của tệp khóa id_rsa.pub thay vì sử dụng lệnh ssh-copy-id. Bất kể bạn sử dụng phương pháp nào, kết quả là nội dung của tệp khóa id_rsa.pub được tạo bởi ansible-server đều được lưu trữ trong tệp ủy quyền trong thư mục .ssh của Windows. Một điều cần lưu ý lúc này là tài khoản đăng nhập vào ansible-server và tài khoản đăng nhập vào máy chủ Windows phải khớp nhau, đồng thời tài khoản phải có quyền quản trị viên trong Windows để tránh xảy ra lỗi khi sử dụng các lệnh như docker hoặc kubectl. Không. Tóm lại, bạn cần tạo một tài khoản ansible-server có cùng tên tài khoản với tài khoản bạn sử dụng để đăng nhập vào Windows, sau đó sao chép khóa. Nếu quá trình này không thuận tiện, hãy sử dụng lệnh ssh-copy-id để kết nối mà không cần xác thực khi kết nối qua ssh. Tiếp tục với phần này bằng cách nhập nguyên mật khẩu và trong ansible-playbook, ghi lại thông tin kết nối Windows trong tệp máy chủ của Ansible. bạn sử dụng nó, bạn có thể chạy playbook mà không gặp vấn đề gì.
Vui lòng xem mô tả quá trình thực hiện bên dưới.
Hệ điều hành Windows (cài docker-desktop, chạy Kubernetes, IP: 192.168.0.7)
docker-server (Bộ chứa Docker, IP: 172.17.0.3)
ansible-server (Bộ chứa Docker, cài đặt Ansible, IP: 172.17.0.4)
Đầu tiên, sao chép khóa id_rsa.pub được tạo trong ansible-server sang docker-server bằng lệnh ssh-copy-id. Bạn cũng có thể sao chép khóa docker-server và kiểm tra xem ssh có thể được kết nối mà không cần mật khẩu hay không.

Sao chép khóa id_rsa.pub từ máy chủ ansible sang máy chủ windows. (Hình ảnh bên dưới nằm trong docker-server, nhưng bạn có thể tiếp tục trong ansible-server). Tuy nhiên, tài khoản dùng để tạo key id_rsa.pub và tài khoản dùng để truy cập openssh trên Windows phải giống nhau và tài khoản Windows phải có đặc quyền quản trị viên để chạy lệnh docker hoặc kubectl. Tại thời điểm này, nếu bạn cố gắng sao chép khóa id_rsa.pub bằng lệnh ssh-copy-id, nội dung của khóa id_rsa.pub có thể không được sao chép vào tệp ủy quyền_keys của Windows, nhưng chuỗi ECHO~ có thể được sao chép. Trong trường hợp này, bạn có thể sao chép khóa trực tiếp vào tệp ủy quyền của Windows bằng phương pháp COPY-PASTE. (Nếu tệp ủy quyền không tồn tại trong Windows, bạn có thể tự tạo tệp)

Trước khi sao chép khóa id_rsa.pub , hãy kiểm tra xem bạn có thể kết nối với máy chủ Windows bằng lệnh ssh trong Windows như minh họa trong bước 4) bên dưới hay không. (Nếu openssh chưa được cài đặt, vui lòng cài đặt nó.)

Lần này, vui lòng kiểm tra kết nối với máy chủ openssh trên Windows bằng lệnh ssh trực tiếp từ ansible-server.

Như đã giải thích ở số 2 ở trên, khi sao chép key id_rsa.pub , key id_rsa.pub phải được tạo bằng cùng một tài khoản với tài khoản Windows. Nếu quá trình này bất tiện, hãy nhập thông tin kết nối Windows vào tệp máy chủ Ansible như hình. bên dưới. Chúng tôi khuyên bạn nên ghi lại và sử dụng nó. Vì sẽ có nhiều trường hợp xử lý bằng lệnh ansible hơn là cố gắng kết nối trực tiếp bằng lệnh ssh, hãy lưu thông tin kết nối trực tiếp vào tệp máy chủ ansible và sử dụng nó mà không cần tiếp tục tác vụ ssh-copy-id. Trong phần này, bạn có thể lưu thông tin tài khoản truy cập Windows (tôi đã nhập thông tin tài khoản người dùng và mật khẩu với đặc quyền của quản trị viên) trong các trường ansible_user và ansible_password. Sau khi hoàn thành thông tin tệp máy chủ ansible, hãy sử dụng lệnh ansible sau để kiểm tra xem mô-đun ping có chạy bình thường hay không.
cửa sổ ansible -m in_ping -u [tài khoản windows]

Trước khi chạy ansible-playbook, hãy kiểm tra xem tệp kê khai K8s được lưu trữ ở đâu trong Windows và kiểm tra tài nguyên Kubernetes bằng lệnh kubectl. Trong ví dụ bên dưới, chúng tôi đang kiểm tra danh sách Dịch vụ của K8s và xác nhận rằng các dịch vụ do người dùng tạo không phải là các dịch vụ được tạo theo mặc định sẽ không hiển thị.

Kiểm tra nội dung của tệp playbook trong ansible-server. Vì lệnh sẽ được chuyển tới Windows, hãy sử dụng lệnh win_command như trong ví dụ bên dưới (đối với MacOS, hãy sử dụng lệnh lệnh) và chỉ định vị trí của tệp kê khai mà bạn muốn chạy dưới dạng đường dẫn tuyệt đối. Bạn có thể chạy tệp playbook và kiểm tra kết quả thực hiện.

Cuối cùng, bạn có thể sử dụng lệnh kubectl để kiểm tra xem các tài nguyên được thực thi trong Windows có được phản ánh đúng hay không.

Nếu bạn có thêm bất kỳ câu hỏi nào về những điều trên, vui lòng để lại tin nhắn trên bảng câu hỏi.
Tôi hy vọng điều này sẽ giúp ích cho những ai đang quan tâm đến vấn đề này.
Cảm ơn
Xin chào, đây là Lee Do-won.
Khi giảng bài “Xây dựng đường ống CI/CD bằng Jenkins”, nhiều bạn gặp khó khăn trong việc cấu hình môi trường lab nên chúng tôi đã tạo và chia sẻ một bài giảng riêng về cách cấu hình môi trường với VM. Môi trường lab cho phép người dùng Windows và MacOS (chip Intell) định cấu hình VM trong môi trường sử dụng VirtualBox, thay vì môi trường Docker + SSH hiện có. Xin lưu ý rằng chúng tôi đã tạo môi trường phòng thí nghiệm một cách dễ dàng bằng cách sử dụng Docker được cài đặt trên máy ảo.
Cảm ơn
Xin chào, đây là Lee Do-won.
Trước hết tôi xin cảm ơn tất cả mọi người đã tham dự buổi thuyết trình.
Khóa học này là một khóa học đòi hỏi đào tạo thực tế làm cơ sở. Đặc biệt, chúng tôi khuyên bạn nên tự mình cài đặt và thực hành các máy chủ Jenkins, Tomcat hoặc Docker.
Thật không may, một số sinh viên (đặc biệt là người dùng Windows) đã viết rằng họ gặp khó khăn trong việc thiết lập môi trường cần thiết để tiến hành phòng thí nghiệm. Mặc dù chúng tôi chưa thể kiểm tra tất cả các môi trường nhưng chúng tôi đã chuẩn bị và thử nghiệm một số môi trường có thể được xây dựng và chia sẻ các tài nguyên và tập lệnh liên quan. Chúng tôi muốn gửi lời xin lỗi đến những sinh viên không thể giải quyết vấn đề.
Chúng tôi đã cung cấp hướng dẫn thực hành trong môi trường Windows + SSH + Dokcer thông qua các câu hỏi và câu trả lời cũng như các video bổ sung mà chúng tôi đã chia sẻ trước đó.
Windows) Lệnh thực thi máy chủ SSH (có Docker) (Phương pháp 1)
docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr /sbin/init
Windows) Lệnh thực thi máy chủ SSH (có Docker) (Phương pháp 2, nếu lệnh trên không thực thi)
docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v / var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init
Tất cả các bài tập bên dưới đều hoạt động bình thường trên một số PC Windows mà chúng tôi đã thử nghiệm, nhưng chúng tôi nhận thấy có lỗi trong bài tập 1 trên PC Windows mới mua gần đây (đã cài đặt WSL2). Nguyên nhân của lỗi mà chúng tôi hiện đã xác định là do lỗi sau đã xảy ra trong quá trình tạo iptables trong WSL2. Mặc dù chúng tôi đã tìm kiếm nhiều thông tin khác nhau và giải quyết vấn đề nhưng nó không hoạt động bình thường với hình ảnh chúng tôi đã tạo, vì vậy chúng tôi tạm thời. đã xóa chức năng iptables và tạo hình ảnh. Sau khi thử nghiệm, chúng tôi đã xác định rằng cho đến nay, việc thực hành có thể được thực hiện mà không gặp bất kỳ vấn đề lớn nào, vì vậy chúng tôi đang chia sẻ hình ảnh và Dockerfile.
https://hub.docker.com/r/edowon0623/docker/tags -> docker pull edowon0623/docker:no_iptables
https://github.com/joneconsulting/docker-files
Do đó, nếu máy chủ Docker không khởi động trong môi trường Windows bằng phương pháp Dind (thực hành phương pháp Scrib 1), vui lòng thử sử dụng lệnh bên dưới.
Windows) Lệnh thực thi máy chủ SSH (có Docker) (Phương pháp 3)
docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:no_iptables /usr /sbin/init
Tất nhiên, sau khi khởi động Docker container, bạn phải kết nối với SSH và chạy lệnh systemctl start docker để khởi động máy chủ Docker.
Một lần nữa xin cảm ơn các bạn đã quan tâm đến bài giảng Chúng tôi sẽ chuẩn bị những bài giảng mới với nội dung tốt hơn.
Cảm ơn
Xin chào, đây là Lee Do-won.
Chúng tôi đã thêm tài liệu bài giảng về cách triển khai các ứng dụng viết bằng Nodejs trong bài giảng về xây dựng Đường ống CI/CD bằng Jenkins. Bạn đã yêu cầu nội dung này từ tháng 9 năm ngoái và mặc dù số lượng không lớn nhưng cuối cùng chúng tôi cũng tải nó lên. Xin lỗi vì đã tải dữ liệu lên quá muộn.
Phần này giải thích quy trình khởi chạy ứng dụng Nodejs thông qua Trình quản lý quy trình có tên PM2, phân phối và thực thi nó dưới dạng hình ảnh Docker. Tuy thông tin còn chưa đầy đủ nhưng chúng tôi hy vọng sẽ giúp ích phần nào cho những ai cần, nếu có thắc mắc gì thêm vui lòng để lại tin nhắn trên bảng thông báo. Gần đây mình chưa thể kiểm tra ngay do deadline của dự án nhưng mình sẽ kiểm tra và phản hồi sớm nhất có thể.
Tôi hy vọng bạn sẽ kết thúc năm còn lại của năm 2022 một cách an toàn và đạt được thành công trong mọi việc mình làm.
Cảm ơn.

