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: truyền giá trị từ step sang job bằng GITHUB_OUTPUT

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

Một bước đã ghi mã bản dựng vào GITHUB_OUTPUT nhưng job kế tiếp vẫn nhận chuỗi rỗng. Thường thiếu một tầng ánh xạ: output của step chưa tự trở thành output công khai của job. Bài này dựng workflow hai job nhỏ để nhìn rõ đường đi của một giá trị và xác định chỗ cần kiểm tra khi dữ liệu bị mất.

Tài liệu được đối chiếu ngày 08/11/2026. YAML được phân tích tại máy; các script Bash được kiểm tra cú pháp và chạy với file output, biến môi trường giả lập. Chưa gửi workflow lên GitHub, chưa chạy hosted runner hoặc thực hiện build, upload hay deploy. Workflow không dùng action bên ngoài.

Ba địa chỉ khác nhau của cùng một giá trị

Trong một job, bước tạo dữ liệu cần có id và ghi một output có tên vào file do GITHUB_OUTPUT trỏ tới. Bước sau trong cùng job đọc bằng steps.<id>.outputs.<name>, theo workflow commands.

Muốn qua job khác, khai báo thêm jobs.<id>.outputs. Job nhận khai báo needs rồi đọc từ needs.<id>.outputs.<name>. Hướng dẫn job outputs mô tả hai mắt xích này. Hãy vẽ đường đi cụ thể thay vì dùng chung từ “biến” cho cả ba vị trí.

Workflow tối thiểu có cả người đọc cùng job và khác job

Lưu thành .github/workflows/output-demo.yml trên repository thử nghiệm nếu bạn muốn chạy trên GitHub:

name: Output demo
"on": workflow_dispatch
permissions: {}

jobs:
  describe:
    runs-on: ubuntu-latest
    outputs:
      build_label: ${{ steps.metadata.outputs.label }}
    steps:
      - name: Create label
        id: metadata
        shell: bash
        run: |
          set -euo pipefail
          printf 'label=%s\n' 'demo-r8' >> "$GITHUB_OUTPUT"
      - name: Read inside the same job
        env:
          BUILD_LABEL: ${{ steps.metadata.outputs.label }}
        shell: bash
        run: |
          set -euo pipefail
          test "$BUILD_LABEL" = 'demo-r8'
          printf 'Same job: %s\n' "$BUILD_LABEL"

  consume:
    runs-on: ubuntu-latest
    needs: describe
    steps:
      - name: Read from the previous job
        env:
          BUILD_LABEL: ${{ needs.describe.outputs.build_label }}
        shell: bash
        run: |
          set -euo pipefail
          test "$BUILD_LABEL" = 'demo-r8'
          printf 'Next job: %s\n' "$BUILD_LABEL"

label là tên output của step; build_label là tên output của job. Hai tên có thể khác nhau vì dòng ánh xạ chỉ rõ nguồn và đích. Ví dụ cố tình dùng hai tên để dễ nhận ra lỗi gõ nhầm đường dẫn. Giá trị demo-r8 là dữ liệu cố định cho bài học, không phải version sinh từ Git hoặc một hệ thống phát hành.

Quan sát từng mắt xích khi chạy thật

Trong lần chạy thử trên GitHub, kiểm tra bước Create label thành công, sau đó bước đọc cùng job in Same job: demo-r8. Cuối cùng bước ở job consume cần in Next job: demo-r8. Hai lệnh test sẽ làm bước thất bại nếu chuỗi không khớp, giúp tránh một log xanh nhưng dữ liệu thực tế đang rỗng.

Nếu bước cùng job đã đúng mà job sau sai, bắt đầu ở outputs của describe và needs của consume. Nếu cả hai đều sai, quay về id: metadata, tên label và dòng ghi file. Contexts reference giúp kiểm tra địa chỉ của output trong từng phạm vi.

Ghi file output không giống export một biến shell

Trong kiểm tra local, ghi label=demo-r8 vào một file tạm chỉ tạo ra đúng nội dung file. Máy local không có GitHub runner để biến dòng ấy thành context. Tương tự, export BUILD_LABEL=... trong một shell không tự tạo job output cho một máy chạy job khác.

Vì vậy, kiểm tra local của bài chỉ xác nhận script ghi đúng dòng và script nhận xử lý đúng giá trị giả lập. Nó không chứng minh việc GitHub phân giải expression hoặc truyền output qua job; muốn xác nhận phần ấy, chạy workflow thử nghiệm ở trên và đọc kết quả từng job.

Giữ ví dụ đơn giản trước khi truyền dữ liệu động

Ví dụ chỉ truyền chuỗi ngắn một dòng. Với dữ liệu chứa newline, cần dùng định dạng nhiều dòng được GitHub hướng dẫn và chọn delimiter không xuất hiện trong giá trị. Không nối trực tiếp nội dung không tin cậy thành mã shell. Trong workflow này, expression đi qua env, còn Bash đọc biến trong dấu nháy kép.

Đừng dùng output để thay cho kho bí mật hoặc kênh chuyển file lớn. Trước hết hãy chứng minh đường truyền bằng một giá trị nhỏ, sau đó mới nối kết quả build thực tế. Khi đường dẫn step → job → needs rõ ràng, phần lớn lỗi chuỗi rỗng sẽ có vị trí kiểm tra cụ thể.

Nguồn tham khảo

  • GitHub: Setting an output parameter
  • GitHub: Passing information between jobs
  • GitHub: Contexts reference

Tags: CI/CDGitHub ActionsWorkflow outputs
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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.

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

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 Platform.select: native và default được chọn theo thứ tự nào?
  • Phỏng vấn JavaScript: vì sao regex.test cùng chuỗi lại đổi kết quả?
  • Android TextView.setText(Int): số đếm có thể bị hiểu thành resource ID

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