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 matrix: fail-fast false giữ các lượt kiểm tra, không bỏ qua lỗi

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

Bạn chạy test qua nhiều shard hoặc nhiều cấu hình, nhưng chỉ thấy log của cấu hình lỗi đầu tiên; các job khác bị hủy khi chưa hoàn tất. Khi cần thu đủ kết quả để chẩn đoán, hãy xem strategy.fail-fast. Đặt false giúp các lượt còn lại trong matrix tiếp tục theo chính sách đó, không biến lỗi thành một kết quả thành công.

Bài đối chiếu GitHub Docs ngày 10/11/2026. YAML được phân tích tại máy; script Bash được kiểm tra cú pháp và chạy riêng với các giá trị shard giả lập. Chưa gửi workflow lên GitHub, quan sát scheduler, hủy job hoặc đo chi phí hosted runner. Ví dụ không dùng action bên ngoài hay thao tác repository.

Hai câu hỏi cần tách riêng

Workflow syntax mô tả fail-fast áp dụng cho matrix, với mặc định true. Khi một job liên quan thất bại theo chính sách, các job matrix còn đang chạy hoặc chờ có thể bị hủy. Đặt false thay đổi quy tắc hủy này.

continue-on-error là lựa chọn khác, liên quan đến cách chấp nhận lỗi của job hoặc step ở phạm vi tương ứng. Đừng thêm nó chỉ vì mục đích là nhìn đủ log. Trong ví dụ bên dưới, không cấu hình continue-on-error, nên shard lỗi vẫn cần được xem là lỗi của kiểm tra.

Workflow ba shard có một lỗi cố ý

Lưu vào .github/workflows/matrix-demo.yml của repository thử nghiệm nếu bạn muốn kiểm tra trên GitHub:

name: Matrix failure demo
"on": workflow_dispatch
permissions: {}

jobs:
  probe:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        shard: [alpha, beta, gamma]
    steps:
      - name: Probe one shard
        env:
          SHARD: ${{ matrix.shard }}
        shell: bash
        run: |
          set -euo pipefail
          case "$SHARD" in
            alpha|gamma)
              printf 'PASS %s\n' "$SHARD"
              ;;
            beta)
              printf 'Intentional failure: %s\n' "$SHARD" >&2
              exit 7
              ;;
            *)
              printf 'Unknown shard\n' >&2
              exit 2
              ;;
          esac

Matrix khai báo ba giá trị shard nên tạo ba biến thể job. Beta cố tình trả exit code 7; alpha và gamma in thông báo rồi thành công. Expression đi qua env và script đọc biến được quote, giúp dữ liệu shard không bị ghép trực tiếp thành mã shell.

Chạy Bash local với từng giá trị xác nhận được đúng các nhánh 0, 7 và 0; thêm giá trị không biết trả 2. Nó không chứng minh GitHub sẽ xếp các job vào thời điểm nào. Phần hành vi của matrix cần được kiểm tra bằng lần chạy workflow thật nếu bạn áp dụng ví dụ.

Quan sát điều gì trên GitHub?

Với fail-fast false, kế hoạch kiểm tra là xem cả ba biến thể có cơ hội hoàn tất mà không bị quy tắc fail-fast hủy vì beta lỗi. Beta vẫn cần hiển thị thất bại. Nếu lượt chạy bị hủy thủ công, timeout hoặc chịu một cơ chế hủy khác, false không phải lời bảo đảm rằng mọi job luôn hoàn tất.

Để so sánh, tạo một lượt thử riêng chỉ đổi fail-fast thành true. Các job đã xong trước khi phát hiện lỗi vẫn có thể đã có kết quả; không suy từ một lần chạy rằng shard nào luôn chạy trước hoặc luôn bị hủy. Tài liệu Running variations of jobs trình bày chính sách xử lý lỗi và matrix.

Chọn theo mục đích của lượt kiểm tra

Nếu đang điều tra lỗi trên nhiều cấu hình độc lập, thu đủ kết quả có thể hữu ích. Nếu một thất bại đã đủ để dừng một lượt không cần tiếp tục tiêu tốn tài nguyên, mặc định fail-fast có vai trò riêng. Quyết định này cần tính đến thời gian chạy và nhu cầu chẩn đoán, không chỉ mong workflow hiển thị nhiều ô xanh.

Không suy rằng fail-fast false đồng nghĩa vô hạn tài nguyên hoặc mọi job chạy song song ngay. Runner có thể chưa sẵn sàng; giới hạn song song và timeout là các cấu hình khác. Ví dụ không thay chúng và không có số đo chi phí để kết luận phương án nào rẻ hơn.

Lỗi thường gặp khi review

  • Đặt fail-fast ở một step: kiểm tra lại vị trí dưới strategy của job matrix.
  • Thêm continue-on-error để giữ log: xác nhận bạn có thật sự muốn chấp nhận lỗi hay chỉ muốn các job khác tiếp tục.
  • Cho rằng false vô hiệu hóa mọi loại cancellation: rà cả thao tác hủy và các chính sách workflow khác.
  • Chỉ thử shard thành công: giữ một ca lỗi có mã trả về biết trước để quan sát chính sách.

Hãy bắt đầu bằng một matrix nhỏ như fixture này. Khi bạn phân biệt được “tiếp tục thu kết quả” với “cho phép thất bại”, cấu hình pipeline sẽ thể hiện đúng điều nhóm cần.

Nguồn tham khảo

  • GitHub: Workflow syntax, strategy.fail-fast
  • GitHub: Running variations of jobs

Tags: CI/CDGitHub ActionsMatrix
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

Bash wrapper: dùng “$@” để giữ nguyên từng đối số khi gọi lệnh

by Suong Nguyen
09/11/2026
0

Kiểm tra wrapper Bash với đường dẫn có khoảng trắng, chuỗi rỗng và ký tự sao để thấy khác biệt giữa "$@", "$*" và $@ không quote.

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

GitHub Actions: truyền giá trị từ step sang job bằng GITHUB_OUTPUT

by Suong Nguyen
08/11/2026
0

Nối đúng ba tầng step output, job output và needs để job sau đọc được giá trị do một bước trước tạo ra.

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

GitHub Actions needs: cho job báo cáo chạy khi job kiểm tra thất bại

by Suong Nguyen
07/11/2026
0

Dùng needs cùng điều kiện trạng thái để đọc kết quả job trước mà vẫn giữ lỗi của workflow, thay vì vô tình bỏ qua bước báo cáo.

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

GitHub Actions env: biến ở step chỉ ghi đè trong step đó

by Suong Nguyen
06/11/2026
0

Đặt cùng tên biến ở workflow, job và step để kiểm tra phạm vi ghi đè và tránh cấu hình thử nghiệm lan sang bước sau.

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 Text selectable: cho người dùng chọn và sao chép mã hiển thị
  • Phỏng vấn JavaScript: object mặc định của tham số được tạo khi nào?
  • Android runOnUiThread và Handler.post: chạy ngay hay đưa vào hàng đợi?

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