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 env: biến ở step chỉ ghi đè trong step đó

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

Bạn đặt chế độ mặc định cho toàn workflow, đổi chế độ cho một job rồi thử một giá trị riêng trong một step. Step kế tiếp lại thấy giá trị của job. Đó là phạm vi bình thường của env; cấu hình ở step không tự sửa bản mặc định của job.

Bài đọc tài liệu GitHub Actions ngày 06/11/2026. YAML được parse và các script Bash được kiểm cú pháp cục bộ. Script báo cáo cũng được chạy với môi trường giả lập được truyền rõ ràng; chưa gửi workflow lên GitHub hoặc chạy hosted runner. Các kết quả cần quan sát trên Actions được nêu như tiêu chí kiểm tra, không phải log của một lần triển khai thật.

Vẽ phạm vi trước khi đọc giá trị

Khi cùng tên được khai báo ở nhiều cấp env, cấp cụ thể hơn được ưu tiên trong phạm vi tương ứng: step ghi đè job và workflow; job ghi đè workflow. Một khai báo ở step chỉ áp dụng trong lúc step ấy chạy.

Điều này hữu ích khi một job kiểm tra nhiều cấu hình nhưng bạn chỉ muốn một bước dùng giá trị thử nghiệm. Đọc file từ ngoài vào trong và đánh dấu từng nơi khai báo cùng tên sẽ dễ hơn việc tìm một dòng env rồi mặc định nó là giá trị duy nhất.

1. Workflow tối thiểu với ba cấp

Lưu mẫu vào .github/workflows/env-scope-demo.yml trong repository thử nghiệm. Workflow chạy thủ công, không checkout code và không deploy:

name: Env scope demo
'on':
  workflow_dispatch:
permissions: {}
env:
  DEMO_MODE: workflow
jobs:
  inspect:
    runs-on: ubuntu-latest
    env:
      DEMO_MODE: job
    steps:
      - name: Read job value
        shell: bash
        run: |
          printf 'mode=%s\n' "$DEMO_MODE"
      - name: Read step override
        env:
          DEMO_MODE: step
        shell: bash
        run: |
          printf 'mode=%s\n' "$DEMO_MODE"
      - name: Read job value again
        shell: bash
        run: |
          printf 'mode=%s\n' "$DEMO_MODE"
  inspect_default:
    runs-on: ubuntu-latest
    steps:
      - name: Read workflow value
        shell: bash
        run: |
          printf 'mode=%s\n' "$DEMO_MODE"

File workflow_dispatch cần có trên nhánh mặc định để được nhận diện theo quy trình chạy thủ công của GitHub. ubuntu-latest là nhãn image có thể thay đổi; demo chỉ dùng printf của shell, không yêu cầu phiên bản package riêng trên image.

Trong job inspect, ba step phải lần lượt báo job, step, job. Job inspect_default không khai báo env cùng tên nên phải thấy workflow. Hai job không có quan hệ needs, vì vậy đừng dùng thứ tự xuất hiện trong log giữa hai job làm bằng chứng về phạm vi biến.

2. Tách giá trị shell khỏi cấu hình workflow

$DEMO_MODE trong mẫu được shell Bash đọc khi script chạy. Context env dùng trong biểu thức workflow là một cơ chế truy cập ở nơi YAML cho phép biểu thức; nó không phải phép đọc mọi biến mà tiến trình runner tình cờ có.

Nếu đổi shell sang PowerShell, cách đọc biến môi trường trong script cũng phải đổi. Không sửa mỗi thuộc tính shell rồi giữ nguyên cú pháp Bash. Giữ ví dụ ở một shell rõ ràng sẽ giúp bạn tách lỗi phạm vi env khỏi lỗi cú pháp của lệnh.

Nếu một script tự gán biến, điều đó lại thuộc phạm vi tiến trình script. Bài này chỉ kiểm tra khai báo env ở workflow, job và step. Truyền giá trị được tạo động sang step khác hoặc sang job khác cần cơ chế tương ứng; không suy ra từ việc override ở step mà các bước sau sẽ tự nhận giá trị mới.

Kiểm tra bằng biến có tên riêng

Dùng tên DEMO_MODE để thử, không thử bằng một biến hệ thống như PATH. Thêm một step không có override ngay sau step có override; đây là ca giúp phân biệt cấu hình tạm thời với thay đổi lan sang phần còn lại.

Khi đưa về project thật, tìm tất cả khai báo cùng tên trong workflow trước khi sửa. Nếu job build và job test dùng giá trị khác nhau có chủ đích, ghi rõ lý do gần khai báo. Nếu muốn một giá trị chung cho mọi job, tránh override cùng tên rải rác mà không có nhu cầu cụ thể.

Lỗi thường gặp và giới hạn

Một lần chạy Bash cục bộ với DEMO_MODE bằng job chỉ chứng minh script in đúng biến được truyền. Nó không chứng minh GitHub đã áp dụng thứ tự ưu tiên env. Muốn xác nhận tích hợp, chạy workflow thử rồi đối chiếu đủ bốn step với bảng kỳ vọng ở trên.

Không nhầm env của workflow với GitHub Environment phục vụ deployment, hay vars và secrets trong các context khác. Chúng có tên gần nhau nhưng giải quyết những việc khác nhau. Với vấn đề đang xét, giữ đúng ba cấp khai báo cùng tên và đọc lại step kế tiếp là cách kiểm tra rõ nhất.

Nguồn tham khảo

  • GitHub: workflow syntax, env ở ba cấp
  • GitHub: env context
  • GitHub: chạy workflow thủ công

Tags: CI/CDEnvironmentGitHub Actions
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

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

by Suong Nguyen
02/11/2026
0

Phân biệt timeout ở cấp job với step bằng workflow thử thủ công, rồi đọc đúng kết quả khi tác vụ bị dừng quá hạ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 ActivityIndicator: dừng spinner có cần bỏ cả vùng giữ chỗ?
  • Array.reduce thiếu initialValue: mảng rỗng lỗi, một phần tử không gọi callback
  • Android SharedPreferences.apply: đọc lại được chưa chứng minh đã ghi xong xuống đĩa

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