aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions timeout-minutes: đặt giới hạn cho cả job và từng step

Suong Nguyen by Suong Nguyen
02/11/2026
in DevOps
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Một lệnh test chờ dịch vụ không trả lời có thể giữ runner lâu hơn dự kiến. Đặt giới hạn ở từng lệnh hữu ích, nhưng bạn vẫn cần giới hạn tổng thời gian của job. Bài này giúp bạn đọc đúng hai vị trí timeout-minutes và thiết kế một lần thử nhỏ trong repository thử nghiệm.

Tài liệu GitHub Actions được đối chiếu ngày 02/11/2026. YAML bên dưới đã được parse và kiểm tra cấu trúc cục bộ, script đã kiểm tra cú pháp Bash. Chưa gửi workflow lên GitHub, chưa chạy runner hay đo thời gian hủy thực tế. Các mốc một, hai và bốn phút là cấu hình minh họa, không phải số đo.

Hai cấp giới hạn phục vụ hai câu hỏi

Ở jobs.<job_id>.timeout-minutes, bạn giới hạn job. Ở jobs.<job_id>.steps[*].timeout-minutes, bạn giới hạn một step. Giới hạn step không tạo thêm ngân sách ngoài giới hạn job: nếu job hết thời gian trước, việc step còn ngân sách không giúp nó chạy tiếp.

Theo tài liệu hiện tại, job mặc định là 360 phút, còn step cần số nguyên dương và tối đa 360 phút. Giới hạn thực tế còn phụ thuộc loại runner; đừng dùng một con số lớn hơn để cố vượt giới hạn nền tảng. Với team nhỏ, giá trị hữu ích nên xuất phát từ các lần chạy bình thường và khoảng dự phòng hợp lý, thay vì sao chép một giá trị mặc định rất dài.

Một workflow thử không cần checkout hay secret

Lưu thành .github/workflows/timeout-demo.yml trong repository thử nếu bạn muốn chạy thử thủ công:

name: Timeout demonstration

on:
  workflow_dispatch:

permissions: {}

jobs:
  timeout-demo:
    runs-on: ubuntu-latest
    timeout-minutes: 4
    steps:
      - name: Quick setup
        timeout-minutes: 1
        shell: bash
        run: echo 'Setup completed'

      - name: Deliberately exceed step budget
        timeout-minutes: 1
        shell: bash
        run: |
          echo 'Waiting for the step timeout'
          sleep 120
          echo 'Reached end of long step'

Workflow chỉ có trigger thủ công. Không có action bên ngoài, repository checkout hay credential. Lệnh sleep 120 cố ý dài hơn ngân sách step để bạn quan sát trường hợp quá hạn. Nếu thực sự chạy, nó tiêu thụ thời gian runner của tài khoản; không cần thêm vào pipeline production để tìm hiểu cú pháp.

Kỳ vọng cần xác nhận trên GitHub là step dài không hoàn thành bình thường và job không thành công. Đừng dùng đúng một timestamp đến từng giây làm tiêu chí duy nhất: giao diện, quá trình dừng và cập nhật trạng thái có thể không xuất hiện đồng thời. Trong bài này chưa có bằng chứng thực thi để báo một thời lượng cụ thể.

Đọc kết quả và chọn ngân sách

Ghi lại bước nào quá hạn, thời điểm bắt đầu, log cuối cùng và kết luận của job. Sau đó kiểm tra lệnh có đang chờ một tài nguyên mà nó không thể tiếp cận hay không. Tăng timeout có thể phù hợp với test chậm hợp lệ, nhưng không sửa địa chỉ dịch vụ sai hoặc vòng chờ không có điều kiện dừng.

Trong workflow thật, có thể cấp ngân sách riêng cho cài dependency, build và test, đồng thời giữ giới hạn chung. Các ngân sách step không phải lịch đặt chỗ chạy tuần tự: step nhanh hơn sẽ kết thúc sớm. Cũng cần phân biệt thời gian chờ runner trong hàng đợi với thời gian job đã chạy; timeout của job không phải cam kết workflow sẽ xong sau đúng số phút tính từ lúc bạn bấm Run.

Những lỗi dễ làm mất tín hiệu

Đặt timeout-minutes ngang cấp jobs hoặc dưới env không tạo giới hạn job như mong muốn. Dùng giá trị thập phân cho step cũng sai hợp đồng được tài liệu nêu. Khi review YAML, nhìn rõ đường dẫn cấp lồng nhau thay vì chỉ tìm thấy tên key.

Không thêm continue-on-error: true chỉ để workflow nhìn xanh sau một bước test quá hạn. Hãy xác định chính sách lỗi trước. Ngoài ra, dừng một runner không chứng minh giao dịch đã gửi tới dịch vụ ngoài được hoàn tác. Với tác vụ deploy hay tạo tài nguyên, cơ chế kiểm tra kết quả và thu hồi tài nguyên cần thiết kế riêng.

Timeout là hàng rào thời gian, còn điều kiện thoát và xử lý tài nguyên vẫn thuộc trách nhiệm tác vụ. Bắt đầu từ một workflow thử nhỏ, kiểm chứng trên loại runner đang dùng, rồi đưa ngân sách phù hợp vào CI.

Nguồn tham khảo

  • GitHub: cú pháp timeout ở cấp step và job
  • GitHub: quá trình hủy workflow

Tags: CI/CDGitHub ActionsTimeout
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker Compose: bind port vào loopback khi chỉ dùng trên host

by Suong Nguyen
01/11/2026
0

Đọc đúng host IP, host port và container port để tránh vô tình mở dịch vụ nội bộ ra các interface của máy.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Bash pipefail: tránh pipeline lỗi nhưng CI vẫn xanh

by Suong Nguyen
31/10/2026
0

Dùng pipeline giả lập để kiểm tra exit status, bật pipefail và phân biệt lỗi pipeline với chính sách dừng script.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker restart policy: unhealthy chưa có nghĩa container sẽ tự khởi động lại

by Suong Nguyen
30/10/2026
0

Đọc riêng trạng thái tiến trình, healthcheck và restart policy để chẩn đoán container không phục hồi như mong đợi.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions cache-hit: vì sao cache npm trúng vẫn cần chạy npm ci?

by Suong Nguyen
29/10/2026
0

Phân biệt cache tải package với node_modules, đọc đúng cache-hit và giữ bước cài dependency khi dùng restore-keys.

Next Post
Minh họa phát triển ứng dụng mobile đa nền tảng với Flutter

Flutter RefreshIndicator: kéo làm mới cả danh sách ngắn

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native onLayout: đo vùng card thay vì lấy chiều rộng cửa sổ
  • Object.freeze chỉ đóng băng nông: giải thích bằng assertion
  • Android getString: dùng placeholder có thứ tự để dịch nguyên câu

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply