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

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Một phần mềm giúp chuyển đổi văn bản thành giọng nói do một lập trình viên người Việt làm ra - J2TEAM - Text to Speech (Free). Bạn có thể chuyển đổi hàng chục ngôn ngữ sang hàng chục giọng đọc tự nhiên khác nhau. Điều đặc biệt là nó miễn phí.

    Đánh giá sơ bộ thì chuyển đổi văn bản dài hoặc văn bản bằng tiếng Việt thuần thì rất tốt. Còn dính thêm các từ tiếng Anh thì nó đọc hơi buồn cười 😅

    » Xem thêm
  • Quá ghê ghớm, Codeium - vốn được biết đến như một đối thủ của Github Copilot, khi nó cho người dùng dùng miễn phí không giới hạn. Mới đây họ giới thiệu thêm Windsurf Editor - không chỉ còn là VSCode Extentions nữa mà là một trình Editor luôn - cạnh tranh trực tiếp với Cursor. Và điểm chính là nó... hoàn toàn miễn phí 🫣.

    » Xem thêm
  • Tin vui đầu này, Github Copilot đã chính thức có bản Free cho tất cả mọi người.

    Github Copilot là một trợ lý AI code cùng chúng ta, nó có thể tự động hoàn thành mã, trò chuyện hoặc sửa lỗi. Hiện đang hỗ trợ nhiều trình soạn thảo, IDE phổ biến như VSCode, JetBrains, XCode...

    Phiên bản miễn phí đang bị giới hạn 2000 Suggestions, và khoảng 50 requests đến tính năng Chat hàng tháng. Sau đó bạn có thể nâng cấp lên các phiên bản cao cấp hơn với giá từ 10$.

    Theo đánh giá của mình thì Copilot rất tốt và xứng đáng trong tầm giá, đang dùng hàng ngày 😄

    » 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.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

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ó ạ