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

Tin ngắn hàng ngày dành cho bạn
  • Manus đã chính thức mở cửa cho tất cả người dùng rồi đấy mọi người. Cho những ai chưa biết thì đây là một công cụ viết báo cáo (làm mưa làm gió) giống như Deep Research của OpenAI á. Mỗi ngày được miễn phí 300 Credits để nghiên cứu. Mỗi lượt nghiên cứu tiêu tốn tuỳ thuộc vào độ phức tạp của yêu cầu. À với cả họ đang có chương trình tặng miễn phí Credits hay sao á. Như mình thì vào thấy được hẳn 2000.

    Mình dùng thử, so sánh với cùng một lệnh giống như đợt trước dùng bên Deep Research thì nội dung khác biệt nhau hoàn toàn. Manus báo cáo như kiểu viết văn hơn so với OpenAI là các gạch đầu dòng và bảng biểu.

    À lúc đăng ký xong có bắt nhập số điện thoại để xác minh, nếu lỗi thì các bạn đợi qua ngày thử lại xem có được không nhé.

    » Xem thêm
  • Mọi người chắc nghe nhiều về xu hướng tìm kiếm thông tin bằng AI chứ không cần công cụ tìm kiếm như Google nữa rồi đúng không? Không đâu xa ánh xạ vào bản thân thì thấy đúng thật, thi thoảng mới tìm kiếm thôi chứ còn đâu toàn hỏi tụi AI.

    Ngay từ đầu viết blog, thứ mà mình hướng đến là chia sẻ kinh nghiệm chứ không phải là những bài mang nặng tính kỹ thuật, máy móc, hướng dẫn từ đầu... Vì thời điểm đó đã có quá nhiều người làm nội dung này rồi và họ làm rất tốt, tại sao mình phải cố phát minh lại bánh xe? Một điều nữa là tin tưởng độc giả của mình có khả năng tìm hiểu vấn đề. Nếu bạn đọc đủ nhiều các bài viết trên blog thì thấy mình luôn cố gắng chèn thêm các liên kết tham khảo ngoài bài viết, nêu ra vấn đề mở và rất ít khi kết luận chắc chắn một điều gì đó.

    Mình đã cố gắng rèn luyện kỹ năng viết, kỹ năng trình bày và cả cách tương tác với độc giả để mang lại giá trị cho họ. Nhiều lúc ngồi lật lại các con số thống kê thấy lượng đọc bài viết tăng lên lại cảm thấy vui. Nhưng khi nguồn truy cập đến từ Google thì lại thấy buồn, vì điều đó chứng tỏ họ biết đến mình chỉ khi đang cố đi tìm giải pháp, có thể họ chỉ đọc chớp nhoáng, may ra tìm được cách giải quyết và thế là đóng cửa sổ trình duyệt rồi đi như một cơn gió.

    Chừng vài tháng đổ lại đây, một điều khiến mình rất vui đó là lượng người truy cập thẳng vào trang chủ mà không thông qua công cụ tìm kiếm đang tăng dần lên, có nhiều hôm lượng truy cập tự nhiên còn cao hơn cả đến từ Google. Điều đó chứng tỏ độc giả đã có thói quen quay lại trang của mình nhiều hơn và họ tìm thấy được giá trị từ blog mang lại. Vui mừng khôn xiết 🤩

    Bên cạnh đó thì lượng truy cập vào chuyên mục Threads - tức là mục mình đang viết bài này đang cao hơn bao giờ hết. Điều đó chứng tỏ xu hướng đi theo tin nhanh là đúng đắn. Mình có thể ngồi cả ngày để viết tin ngắn cho bạn đọc vì nó rất nhanh mà tiện, không tốn công đi tìm tài liệu để viết, không tốn cả thời gian viết nữa, còn mình thì có rất nhiều thứ để chia sẻ 😅. Nhưng không vì thế mà bỏ bê các bài viết dài, vì dài thì có nhiều thông tin để chia sẻ hơn.

    Vài lời tâm sự thế thôi chứ hơn một tháng nay mình chưa viết bài viết mới nào vì công việc bận quá. Xong lâu dần cứ trì hoãn lại thành lười. À với cả tháng 5 này rất thích hợp để đọc các cuốn sách về cách mạng á. Có hôm đọc đến 2 giờ sáng mới đi ngủ 🥱

    » Xem thêm
  • Mình mới nhìn thấy một trang web khá thú vị nói về các cột mốc đáng nhớ trong lịch sử phát triển Internet toàn cầu: Internet Artifacts

    Chỉ từ 1977 - khi Internet còn nằm trong hộp thí nghiệm thì nhìn xem - giờ đây Internet đã khiến mọi thứ phát triển đến mức nào 🫣

    » 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

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên 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.

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
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
Thành Đỗ2 năm trước
Cảm ơ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ó ạ