- Posted by: Tommy Tran
- Wed, 15/02/2023, 13:14 (GMT+7)
- 1 Bình luận
Tạo CI/CD kết hợp Gitlab Runner và Docker Compose - Phần 1
Hôm nay mình sẽ làm một bài viết để giới thiệu về việc tạo CI/CD kết hợp Gitlab Runner và Docker Compose cho các bạn mới tìm hiểu
Trong bài này mình sẽ tạo CI/CD trên một project ngôn ngữ java 8 sử dụng framework Maven
Các khái niệm liên quan như CI, CD, Docker mình sẽ nêu ở cuối bài này.
Tạo file Dockerfile và docker-compose.yml cho project
Soạn nội dung cho file Dokerfile như sau:
FROM maven:3.6.0-jdk-8 ENV TZ=Asia/Ho_Chi_Minh RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN mkdir -p /app WORKDIR /app COPY src/ ./src COPY bin/ ./bin RUN mvn install CMD "./bin/run.sh"
Soạn nội dung cho file docker-compose.yml như sau:
version: "3" services: user-activities-feed-kafka-subscriber: build: context: . dockerfile: Dockerfile image: registry.admicro.vn/lotus/user_activities_feed:${IMAGE_TAG}
Để chạy service trên chúng ta chạy lệnh:
$ docker-compose up
Khi build docker image các bạn sẽ thấy việc download thư viện rất mất thời gian để hạn chế việc này chúng ta sẽ cache lại các dependency để dùng lại trong các lần build tiếp theo (trong trường hợp chúng ta không thay đổi file pom.xml) bằng cách làm như sau:
Copy file pom vào thư mục WORKDIR. Sau đó chạy lênh để maven download toàn bộ dependency để cache lại cho các lần sau:
FROM maven:3.6.0-jdk-8 ENV TZ=Asia/Ho_Chi_Minh RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN mkdir -p /app WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src/ ./src COPY bin/ ./bin RUN mvn install CMD "./bin/run.sh"
Để dừng service vừa chạy chúng ta dùng lệnh:
$ docker-compose down
Khi deploy các service trong thực tế chúng ta có thể gặp phải hai vấn đề:
- Chương cần phải đọc các configuration từ các file bên ngoài, các configuration này có thể thay đổi
- Cần phải đọc các file logging của chương trình cho các mục đích debugging hoặc monitor
Để thực hiện được hai công việc này một cách dễ dàng chúng ta cần phải ghi các file này ở ngoài host và sau đó mount vào trong doker container. Docker cung cấp Module Volumes giúp chúng ta dễ dàng thực hiện công việc này.
version: "3" services: user-activities-feed-kafka-subscriber: build: context: . dockerfile: Dockerfile image: registry.admicro.vn/lotus/user_activities_feed:${IMAGE_TAG} volumes: - ${RUN_DIR}/config:/app/config - ${RUN_DIR}/logs:/app/logs
Một số khái niệm cơ bản:
CI: Continuous Integration (tích hợp liên tục) là một khai niệm trong lĩnh vực software engineering. Trong thực tế nó ám chỉ việc các thành viên trong team khi thực hiện công việc của một project sẽ liên tục đẩy code của họ lên công cụ quản lý code như Git (ít nhất 1 ngày 1 lần) để tích hợp hợp lại với nhau. Code được đẩy lên sẽ được build và chạy qua các units test. Các lỗi phát sinh trong quá trình này sẽ được gưỉ đến team. Việc làm này giúp cho quá trình phát triển project giảm thiểu được các lỗi và giảm thời gian cho việc tích hợp
>> Sam Altman Người đứng sau siêu AI - ChatGPT
>> Chi 35.000 đồng để mua tài khoản ChatGPT
CD: Continuous Delivery (Chuyển giao liên tục) là một phương pháp được áp dụng trong các quy trình phát triển phần mềm với nhiều chu kỳ ngắn (short cycles). CD thường được kết hợp với CI một cách hiệu quả. Sau khi mã code thay đổi được build và test thành công sẽ được tự động triển khai (deploy) trên môi trường devevlop hoặc product. Phương pháp này giúp giảm thiểu được thời gian và chi phí test và deploy trong quá trình phát triển phần mềm.
Như vậy ở phần này chúng ta đã nắm được cách tạo script để làm việc với docker, doker-compose và các khái niệm cơ bản về CI/CD. Ở phần tiếp theo mình sẽ giới thiệu về Jenkins Pipeline một công cụ hổ trợ đắc lực trong CI/CD.
Tham khảo phần tiếp theo ở đây nhé.
Bình luận (1)
Ông Mansour chứng kiến Man City giành cú ăn ba lịch sử.
Trước Inter tại chung kết Champions League rạng sáng 11/6,Sheikh Mansour, chủ sở hữu của Man City, lần đầu trực tiếp dự khán một trận đấu sau 13 năm mua lại đội chủ sân Etihad.
Ông Mansour có mặt tại sân Olympic Ataturk để theo dõi trận chung kết Champions League giữa Man City và Inter Milan. Đây là lần đầu tiên ông dự khán một trận đấu của đội nhà sau 13 năm. Năm 2010, ông đến sân Etihad (lúc đó có tên là City of Manchester) để xem trận đấu giữa Man City và Liverpool. Kể từ đó, ông hiếm khi xuất hiện.
Tại Istanbul, ông Mansour đeo khăn quàng cổ của Man City, ngồi trên hàng ghế VIP cùng Mohamed bin Zayed al-Nahyan, Tổng thống UAE. Trước trận, ông gặp mặt HLV Pep Guardiola và các cầu thủ để chúc họ may mắn. Khi mãn cuộc, chủ sở hữu Man City lập tức bay về UAE.
Ông Mansour đã bỏ lỡ trận chung kết Champions League 2020/21 khi Man City thua Chelsea 0-1 ở Porto. Lần này, khi Man City sáng cửa vô địch hơn, ông đã góp mặt và chứng kiến đội nhà giành cú ăn ba lịch sử. Trước đó, Man City giành được Premier League và cúp FA.
Chủ sở hữu Man City thường xuyên xem Man City từ UAE nhưng ông chưa có lần nào dự khán một trận đấu của đội nhà ở Premier League. Dù vậy, các CĐV Man City thường xuyên hát vang tên Mansour trên khán đài. Ngoài ra, ông cũng chưa từng tham dự một trận đấu nào của các câu lạc bộ khác thuộc City Football Group gồm New York City, Melbourne City, Mumbai City và Yokohama F. Marinos.
Ông Mansour là em trai Tổng thống hiện tại của UAE, Mohamed bin Zayed Al Nayhan, người được ước tính có tài sản cá nhân trị giá 16,8 tỷ bảng Anh. Chủ sở hữu của Man City đang phụ trách quản lý quỹ tài sản của quốc gia, ước tính trị giá 799 tỷ bảng Anh.
Add Comment