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 needs: cho job báo cáo chạy khi job kiểm tra thất bại

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

Bạn tách kiểm tra và báo cáo thành hai job, nối chúng bằng needs. Khi kiểm tra thất bại, job báo cáo lại bị skip đúng lúc bạn cần thông tin nhất. needs mặc định yêu cầu các job phụ thuộc hoàn tất thành công; thứ tự khai báo job không thay đổi điều kiện này.

Bài đọc tài liệu GitHub Actions ngày 07/11/2026. Workflow được parse YAML, script được kiểm cú pháp và chạy cục bộ với biến kết quả giả lập. Chưa upload workflow hay chạy hosted runner. Các trạng thái trên GitHub bên dưới là tiêu chí bạn cần đối chiếu khi chạy thử, không phải log của một lượt CI đã triển khai.

Phân biệt chờ hoàn tất với yêu cầu thành công

Nếu một job lỗi hoặc bị skip, job cần nó cũng có thể bị skip theo chuỗi phụ thuộc, trừ khi có điều kiện phù hợp để tiếp tục. Với báo cáo chỉ đọc kết quả, có thể đặt điều kiện trạng thái ở cấp job để cho phép chạy sau lỗi.

Mẫu dùng !cancelled() theo hướng dẫn biểu thức GitHub: báo cáo được phép chạy khi workflow chưa bị hủy. Đây không phải điều kiện dành cho một job deploy. Luồng triển khai vẫn cần cổng kiểm tra thành công theo yêu cầu của dự án.

1. Workflow chỉ in kết quả job trước

Lưu file .github/workflows/needs-report-demo.yml trong repository thử nghiệm. File cần có trên nhánh mặc định để được nhận diện cho thao tác chạy thủ công:

name: Needs report demo
'on':
  workflow_dispatch:
permissions: {}
jobs:
  probe:
    runs-on: ubuntu-latest
    timeout-minutes: 2
    steps:
      - name: Deliberately fail
        shell: bash
        run: |
          printf '%s\n' 'Probe fails intentionally'
          exit 7
  report:
    needs: probe
    if: ${{ !cancelled() }}
    runs-on: ubuntu-latest
    timeout-minutes: 2
    steps:
      - name: Print upstream job result
        env:
          PROBE_RESULT: ${{ needs.probe.result }}
        shell: bash
        run: |
          printf 'probe result=%s\n' "$PROBE_RESULT"

Không có checkout, deploy, secret hoặc action bên ngoài trong demo. ubuntu-latest là nhãn image có thể thay đổi; các script chỉ dùng lệnh shell đơn giản, không phụ thuộc package phiên bản cụ thể của image.

Khi tự chạy, job probe phải thất bại do exit 7. Nếu workflow không bị hủy, report cần chạy và in kết quả failure. Việc report thành công không xóa thất bại của probe; workflow thử vẫn phải thể hiện lỗi gốc.

2. Làm ca đối chứng với điều kiện mặc định

Trong bản workflow thử thứ hai, bỏ dòng if của job report rồi chạy lại với probe vẫn lỗi. Đối chiếu report bị skip với bản có điều kiện trạng thái. Thử thêm probe exit 0 để xác nhận report đọc success ở đường chạy thành công.

Không thêm continue-on-error cho probe chỉ để khiến report chạy. Cách đó đổi chính sách chấp nhận lỗi của bước hoặc job. Ở bài này, yêu cầu là giữ lỗi nhưng vẫn đọc được kết quả trong một job báo cáo riêng.

Đọc đúng context và phạm vi phụ thuộc

needs.probe.result là kết quả của job phụ thuộc trực tiếp. Nó có thể là success, failure, cancelled hoặc skipped. Đừng lấy steps.probe.outcome để thay thế: steps là context của các step trong cùng một job, không phải danh sách mọi job của workflow.

Context needs cũng không tự chứa mọi tổ tiên gián tiếp. Nếu cấu trúc là build rồi test rồi report, xác định rõ report trực tiếp cần job nào và đọc đúng các kết quả tương ứng. Không thêm nhiều dependency chỉ vì tên job ấy có tồn tại trong YAML.

Kiểm tra các đường chạy còn lại

Thử thành công, lỗi và hủy thủ công trong repository demo trước khi áp dụng vào CI chính. !cancelled() có ý nghĩa khác always(), nhất là lúc người dùng đã yêu cầu dừng. Tránh hứa job báo cáo chắc chắn chạy trong mọi sự cố runner, quota hoặc hạ tầng chỉ từ một điều kiện YAML.

Nếu job phải tải artifact của job lỗi, kiểm tra artifact có thật sự được tạo ra trước khi bước lỗi xảy ra hay không. Workflow mẫu chưa upload hoặc download artifact, nên nó chỉ chứng minh cấu trúc cần thử cho việc đọc result.

Giữ job báo cáo nhỏ, chỉ nhận quyền cần thiết và giới hạn thời gian. Khi đưa vào dự án, đọc đồ thị phụ thuộc cùng trạng thái của từng job; một job báo cáo xanh không đồng nghĩa toàn bộ kiểm tra trước đó đã qua.

Nguồn tham khảo

  • GitHub: jobs.needs và điều kiện job
  • GitHub: needs context và result
  • GitHub: status check functions
  • GitHub: chạy workflow thủ công

Tags: CI/CDDebuggingGitHub Actions
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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.

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

GitHub Actions continue-on-error: đọc outcome để biết step thật sự lỗi

by Suong Nguyen
05/11/2026
0

Phân biệt outcome và conclusion sau continue-on-error để báo cáo đúng kết quả và đặt lại cổng kiểm tra bắt buộc.

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

Docker ARG và ENV: phân biệt tham số build với cấu hình image

by Suong Nguyen
04/11/2026
0

Đọc ARG, ENV và LABEL trên một Dockerfile chỉ chứa metadata để biết giá trị nào được đưa vào cấu hình image và giá trị nào chỉ là...

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

GitHub Actions GITHUB_ENV: giá trị mới dành cho step tiếp theo

by Suong Nguyen
03/11/2026
0

Phân biệt ghi environment file với cập nhật biến shell hiện tại bằng workflow thử hai step và một fixture Bash cục bộ.

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 FlatList hai cột: numColumns không tạo layout masonry
  • JavaScript Set với object: cùng id vẫn có thể là hai phần tử
  • Android elapsedRealtime và uptimeMillis: thời gian máy ngủ có được tính không?

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