Sử dụng miễn phí Shared Runners CI/CD của Gitlab

Sử dụng miễn phí Shared Runners CI/CD của Gitlab

Threads
  • Tuôi" để ý là cứ đợt nào ham đọc cái là lại lười viết, tuần nay tuôi đang đọc một lúc 3 cuốn, à phải là đọc 2 và nghe 1.

    Cuốn sách ám ảnh nhất đến thời điểm hiện tại: Đại dương đen - thuật lại 12 câu chuyện của 12 người mắc bệnh trầm cảm. Thần kinh vững, nhưng mới đọc 2 câu truyện đầu thôi mà cảm giác ngộp thở, bứt rứt thật khó tả 😰

    Câu chuyện tiếp theo đó thì mang lại cảm giác dễ thở hơn vì họ kiểm soát được bản thân. Nhưng sang tiếp câu chuyện thứ 4, thứ 5 thì lại như một có một bàn tay siết họng mình lại. Không thể nhắm mắt mà nghe được á, có gì đó rất đáng sợ.

    Một câu mà mình cảm thấy ám ảnh nhất là khi ba mẹ của người mắc trầm cảm luôn miệng hỏi tại sao con lại như thế mỗi khi sắp lên cơn và gào thét. Họ chỉ đành bất lực trả lời là "Làm sao mà con biết! Cũng giống như hỏi một người bị ốm là tại sao lại ốm? Làm sao mà biết được chứ! Có ai muốn đâu!".

    » Xem thêm
  • Mistral.ai là một công ty AI có trụ sở tại Pháp, được biết đến với nhiều mô hình ngôn ngữ lớn Mistral. Mới đây họ vừa ra mắt thêm một số mô hình có kích thước siêu lớn, siêu mạnh... Nhưng tạm khoan nói đến vì Mistral Chat cũng vừa được ra mắt với nhiều tính năng hay ho tương tự như Chat GPT mà lại miễn phí 😇

    » Xem thêm
  • Qwen2.5-Coder-32B đang là tâm điểm của sự chú ý khi điểm số của nó đánh bại cả GPT-4o hay kể cả là Claude Sonet 3.5. Điều đáng chú ý là nó là mã nguồn mở. Điều đó đồng nghĩa với việc bạn hoàn toàn có thể kéo models về máy và chạy cục bộ dưới máy tính của mình. Nhưng...

    Để chạy được mô hình thì GPU máy tính phải đạt cấp độ quái vật. Cụ thể trong một bài đăng của người dùng thử nghiệm Qwen2.5-Coder-32B trên GTX 3090 thì tốc độ tối đa models cho ra nằm ở mức hơn 30 tokens/s.

    Hy vọng vài nữa sẽ có một bên như Groq hay SambaNova dựng lên để "kiểm thử" hiệu năng con chip của họ, và quan trọng hơn hết là cho anh em dùng "chùa" thì hay biết mấy 🫣

    Tham khảo: Qwen2.5-Coder-32B is an LLM that can code well that runs on my Mac

    » Xem thêm

Vấn đề

CI/CD bao gồm CI (Continuous Integration) và CD (Continuous Delivery) là quá trình tích hợp (integration) thường xuyên, nhanh chóng khi phát hành phiên bản mới (delivery). CI/CD giúp cho quá trình từ viết mã đến khi triển khai ứng dụng lên máy chủ trở nên nhanh và tự động hơn.

Thông thường chúng ta trải qua các bước viết mã -> test (unit test) -> commit code -> build -> deploy... Nhưng nếu tích hợp CI/CD có thể tự động được rất nhiều bước trong viết mã -> deploy.

CI/CD được hỗ trợ trong các nền tảng quản lý mã như Gitlab, Github... và được kích hoạt qua các sự kiện như commit code. Để sử dụng được CI/CD cần phải thiết lập các Runners kết nối đến tài khoản. Các Runners đóng vai trò cho việc xử lý mã và logic ứng dụng của bạn.

Trong phạm vi bài viết này tôi sẽ nói về cách sử dụng Shared Runner của Gitlab.

Gitlab Shared Runner

Nếu dùng Gitlab để quản lý mã thì bạn có thể sử dụng các Shared Runners với thời gian miễn phí lên đến 400 phút cho dự án Private và không giới hạn với dự án Public cộng đồng.

Nghe có vẻ không nhiều nhưng với các dự án cá nhân mà tiết kiệm chi phí đồng thời lại có thể tích hợp CI/CD thì quả là đáng để sử dụng. Blog của tôi đang dùng cách này để triển khai tự động cho môi trường Development.

Để kích hoạt Shared runner các bạn vào Project > Settings > CI/CD và tích vào Enable shared runners for this project.

Bật gitlab shared runners

Ở bên dưới mục Available shared runners là số lượng các Shared runners mà Gitlab cung cấp cùng với trạng trái của chúng. Hãy để ý vào các "label" bên dưới mỗi Runner, chúng ta sẽ cần nó để chỉ định Runner cần thiết cho mục đích sử dụng của mỗi stage.

gitlab runner

Cách sử dụng

.gitlab-ci.yml là tệp yml để kích hoạt CI/CD của Gitlab. Trong này chứa cấu hình và chỉ dẫn để chúng ta xử lý quá trình tự động hoá.

Trang blog 2coffee sử dụng Docker để build và đẩy image lên Gitlab registry, sau đó gửi một HTTP request đến server để cập nhật lại service tạo ra một quy trình CI/CD hoàn chỉnh.

Tôi chia thành 2 stage: build/push image và HTTP request:

stages:
  - build
  - curl-docker-ci

Ở stage build sẽ dùng Runner hỗ trợ Docker nên tôi xác định tags là docker. Các tham số như thông tin đăng nhập/mật khẩu của registry được truyền vào thông qua Variable là biến được thiết lập thông qua Gitlab. Thay vì chỉ dẫn các bước build & push image trực tiếp trong yml, tôi đã tạo một tệp có tên là build-dev.sh bên trong có chứa các câu lệnh bash để build & push image.

Cuối dùng vì tôi chỉ muốn thiết lập CI/CD cho môi trường Development nên tôi xác định CI chỉ được chạy khi commit code lên nhánh develop.

docker-build:
  stage: build
  image: docker:20.10.9
  tags:
    - docker
  services:
    - docker:dind
  before_script:
    - echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin
  script:
    - if [ "$CI_COMMIT_REF_NAME" = "develop" ]; then
      ./build/bin/build-dev.sh;
      fi
  only:
    - develop

Với nội dung của build-dev.sh đơn giản như:

#!/bin/sh -e

IMAGE=registry.gitlab.com/2coffee/page
VERSION=dev

name=${IMAGE}:${VERSION}

docker build -t ${name} -f ./Dockerfile .

docker push ${name}

Ở bước tiếp theo tôi cũng cho chạy một tệp curl-docker-ci.sh chứa lệnh CURL một HTTP request đến máy chủ để cập nhật lại service. Bởi vì lệnh bash này chỉ cần môi trường linux để chạy nên tôi xác định tags là linux.

curl-docker-ci:
  stage: curl-docker-ci
  tags:
    - linux
  script:
    - ./build/bin/curl-docker-ci.sh
  only:
    - develop

curl-docker-ci.sh đơn giả chỉ chứa một lệnh curl:

#!/bin/sh -e

curl --location --request POST $DOCKER_CI_ENDPOINT \
--header "Authorization: Basic $DOCKER_CI_BASIC_AUTH" \
--header 'Content-Type: application/json' \
--data '{"name": "'$DOCKER_CI_SERVICE_NAME'"}'

Ghép lại tôi sẽ có một file .gitlab-ci.yml hoàn chỉnh như sau:

stages:
  - build
  - curl-docker-ci

docker-build:
  stage: build
  image: docker:20.10.9
  tags:
    - docker
  services:
    - docker:dind
  before_script:
    - echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin
  script:
    - if [ "$CI_COMMIT_REF_NAME" = "develop" ]; then
      ./build/bin/build-dev.sh;
      fi
  only:
    - develop

curl-docker-ci:
  stage: curl-docker-ci
  tags:
    - linux
  script:
    - ./build/bin/curl-docker-ci.sh
  only:
    - develop

Bây giờ hãy thử commit code lên nhánh develop rồi vào Project > CI/CD > Pipelines xem CI đã được kích hoạt chưa nhé.

shared runner running

Tổng kết

CI/CD là quá trình tích hợp thường xuyên và nhanh chóng khi phát hành phiên bản mới. Nhờ có CI/CD mà có thể tự động được nhiều khâu từ lúc viết mã đến lúc triển khai ứng dụng trên máy chủ.

Nếu sử dụng Gitlab để quản lý mã chúng ta có thể sử dụng miễn phí lên đến 400 phút CI/CD. Một con số không nhiều tuy nhiên bạn hoàn toàn có thể đăng kí một Runners để gỡ bỏ giới hạn.

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (3)

Nội dung bình luận...
Avatar
Thành Đỗ2 năm trước
Cho mình xin cách dùng curl để update service với ad
Trả lời
Avatar
Thành Đỗ2 năm trước
Cảm ơn ạ        
Avatar
Xuân Hoài Tống2 năm trước
À mình viết một rest service bằng docker sdk để chọc vào docker mà update service thôi đó bạn
Avatar
Hương Trịnh2 năm trước
Không đăng nhập được bằng github ad ơi
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
Ok bạn mình kiểm tra lại ạ
Avatar
Tùng Nguyễn2 năm trước
Bạn có bài viết nào nói về ci cd không
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
Chào bạn, hiện chưa có ạ