Tùy chỉnh dòng công việc của bạn với các biến môi trường
Trong đơn vị này, bạn tìm hiểu cách cấu hình và quản lý hành vi dành riêng cho môi trường bằng cách sử dụng các biến, ngữ cảnh và tập lệnh tùy chỉnh trong dòng công việc Hành động GitHub.
Để thực hiện quy trình này, bạn sẽ tìm hiểu cách:
- Dùng các biến môi trường mặc định và tùy chỉnh.
- Truy nhập thông tin ngữ cảnh trong dòng công việc.
- Đặt biến môi trường tại các phạm vi dòng công việc khác nhau.
- Sử dụng tập lệnh tùy chỉnh với từ khóa chạy.
- Áp dụng các biện pháp bảo vệ môi trường cho triển khai.
Biến môi trường và ngữ cảnh mặc định
Trong dòng công việc Hành động GitHub, một số biến môi trường mặc định có sẵn cho bạn sử dụng, nhưng chỉ trong runner đang thực hiện một công việc. Các biến mặc định này phân biệt chữ hoa chữ thường và chúng tham chiếu đến giá trị cấu hình cho hệ thống và cho người dùng hiện tại. Chúng tôi khuyên bạn nên sử dụng các biến môi trường mặc định này để tham chiếu hệ thống tệp thay vì sử dụng đường dẫn tệp được mã hóa cứng. Để sử dụng biến môi trường mặc định, hãy xác $ theo sau là tên của biến môi trường.
jobs:
prod-check:
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
Ngoài các biến môi trường mặc định, bạn có thể sử dụng các biến được xác định làm ngữ cảnh. Ngữ cảnh và biến số mặc định tương tự nhau ở chỗ cả hai đều cung cấp quyền truy nhập vào thông tin môi trường, nhưng chúng có một số khác biệt quan trọng. Mặc dù các biến môi trường mặc định chỉ có thể được sử dụng trong runner, bạn có thể sử dụng biến ngữ cảnh tại bất kỳ điểm nào trong dòng công việc. Ví dụ: biến ngữ cảnh cho phép bạn chạy một câu lệnh if để đánh giá một biểu thức trước khi runner được thực thi.
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
Ví dụ này đang sử dụng github.ref cảnh để kiểm tra nhánh kích hoạt dòng công việc. Nếu nhánh là , runner mainđược thực hiện và in "Deploying to production server on branch $GITHUB_REF" (Triển khai máy chủ sản xuất trên $GITHUB_REF). Biến môi trường mặc định $GITHUB_REF được sử dụng trong runner để tham chiếu đến nhánh. Lưu ý rằng các biến môi trường mặc định là tất cả các chữ hoa trong đó các biến ngữ cảnh đều là chữ thường.
Thông tin ngữ cảnh sẵn có trong dòng công việc
Dùng ngữ cảnh để truy nhập thông tin về dòng công việc chạy, biến số, môi trường người chạy, công việc và các bước. Mỗi ngữ cảnh là một đối tượng có chứa các thuộc tính có thể là các đối tượng hoặc chuỗi khác. Các ngữ cảnh có sẵn githubbao gồm , envvars, job, jobssteps, runner, secrets, strategy, , matrix, needs, và inputs.
Bảng sau đây liệt kê ngữ cảnh và mô tả dòng công việc:
| Ngữ cảnh | Sự miêu tả |
|---|---|
github |
Thông tin về dòng công việc chạy. Để biết thêm thông tin, hãy xem github ngữ cảnh. |
env |
Chứa các biến mà bạn đặt trong dòng công việc, công việc hoặc bước. Để biết thêm thông tin, hãy xem env ngữ cảnh. |
vars |
Chứa các biến mà bạn đặt ở cấp độ kho, tổ chức hoặc môi trường. Để biết thêm thông tin, hãy xem vars ngữ cảnh. |
job |
Thông tin về công việc hiện đang chạy. Để biết thêm thông tin, hãy xem job ngữ cảnh. |
jobs |
Đối với dòng công việc có thể tái sử dụng, chỉ chứa đầu ra của công việc từ dòng công việc có thể tái sử dụng. Để biết thêm thông tin, hãy xem jobs ngữ cảnh. |
steps |
Thông tin về các bước chạy trong công việc hiện tại. Để biết thêm thông tin, hãy xem steps ngữ cảnh. |
runner |
Thông tin về người chạy đang chạy công việc hiện tại. Để biết thêm thông tin, hãy xem runner ngữ cảnh. |
secrets |
Chứa tên và giá trị bí mật sẵn dùng cho dòng công việc chạy. Để biết thêm thông tin, hãy xem secrets ngữ cảnh. |
strategy |
Thông tin về chiến lược thực thi ma trận cho công việc hiện tại. Để biết thêm thông tin, hãy xem strategy ngữ cảnh. |
matrix |
Chứa các thuộc tính ma trận được xác định trong dòng công việc áp dụng cho công việc hiện tại. Để biết thêm thông tin, hãy xem matrix ngữ cảnh. |
needs |
Chứa kết quả của tất cả các công việc được xác định là phụ thuộc của công việc hiện tại. Để biết thêm thông tin, hãy xem needs ngữ cảnh. |
inputs |
Chứa đầu vào của dòng công việc được kích hoạt lại hoặc thủ công. Để biết thêm thông tin, hãy xem inputs ngữ cảnh. |
Các ngữ cảnh khác nhau có sẵn tại các thời điểm khác nhau trong một quy trình chạy dòng công việc. Ví dụ: bạn chỉ có thể sử dụng ngữ secrets cảnh tại những nơi cụ thể trong công việc. Ngoài ra, bạn có thể sử dụng một số hàm, chẳng hạn như hashFiles hàm, chỉ ở những nơi cụ thể.
Bảng sau đây liệt kê các hạn chế cho từng ngữ cảnh và chức năng đặc biệt trong dòng công việc. Các ngữ cảnh được liệt kê chỉ sẵn dùng cho khóa dòng công việc được chỉ định. Bạn không thể sử dụng chúng ở bất cứ nơi nào khác. Bạn có thể sử dụng hàm ở bất cứ đâu trừ khi hàm đó được liệt kê trong bảng sau đây.
| Khóa dòng công việc | Ngữ cảnh | Hàm đặc biệt |
|---|---|---|
run-name |
github, , inputsvars |
Không ai |
concurrency |
github, , inputsvars |
Không ai |
env |
github, , secretsinputs,vars |
Không ai |
jobs.<job_id>.concurrency |
github, , needsstrategy, matrix, inputs,vars |
Không ai |
jobs.<job_id>.container |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.container.credentials |
github, , needsstrategy, matrix, envvars, , secrets, ,inputs |
Không ai |
jobs.<job_id>.container.env.<env_id> |
github, needs, strategy, matrixjob, runner, env, vars, , , secretsinputs |
Không ai |
jobs.<job_id>.container.image |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.continue-on-error |
github, , needsstrategy, vars, matrix,inputs |
Không ai |
jobs.<job_id>.defaults.run |
github, needs, strategy, matrixenv, , varsinputs |
Không ai |
jobs.<job_id>.env |
github, needs, strategy, matrixvars, , secretsinputs |
Không ai |
jobs.<job_id>.environment |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.environment.url |
github, needs, strategy, matrixjob, runner, env, vars, , , stepsinputs |
Không ai |
jobs.<job_id>.if |
github, , needsvars,inputs |
always, , canceledsuccess,failure |
jobs.<job_id>.name |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.outputs.<output_id> |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
Không ai |
jobs.<job_id>.runs-on |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.secrets.<secrets_id> |
github, needs, strategy, matrixsecrets, , inputsvars |
Không ai |
jobs.<job_id>.services |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.services.<service_id>.credentials |
github, , needsstrategy, matrix, envvars, , secrets, ,inputs |
Không ai |
jobs.<job_id>.services.<service_id>.env.<env_id> |
github, needs, strategy, matrixjob, runner, env, vars, , , secretsinputs |
Không ai |
jobs.<job_id>.steps.continue-on-error |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
HashFiles |
jobs.<job_id>.steps.env |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
hashFiles |
jobs.<job_id>.steps.if |
github, needs, strategy, matrixjob, runner, env, vars, , , stepsinputs |
always, canceled, success, failurehashFiles |
jobs.<job_id>.steps.name |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
hashFiles |
jobs.<job_id>.steps.run |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
hashFiles |
jobs.<job_id>.steps.timeout-minutes |
github, needs, strategy, matrix, jobrunner, env, vars, secrets, , , stepsinputs |
hashFiles |
jobs.<job_id>.steps.with |
github, needs, strategy, matrix, job, runnerghen, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.working-directory |
github, needs, strategy, matrix, job, runnerghen, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.strategy |
github, nhu cầu, vars, , inputs |
Không ai |
jobs.<job_id>.timeout-minutes |
github, , needsstrategy, matrix, vars,inputs |
Không ai |
jobs.<job_id>.with.<with_id> |
github, , needsstrategy, matrix, inputs,vars |
Không ai |
on.workflow_call.inputs.<inputs_id>.default |
github, , inputsvars |
Không ai |
on.workflow_call.outputs.<output_id>.value |
github, việc làm, vars, inputs |
Không ai |
Biến môi trường tùy chỉnh
Tương tự như dùng các biến môi trường mặc định, bạn có thể dùng các biến môi trường tùy chỉnh trong tệp dòng công việc của bạn. Để tạo biến tùy chỉnh, bạn cần xác định biến đó trong tệp dòng công việc của mình bằng cách sử dụng env cảnh tùy chỉnh. Nếu bạn muốn sử dụng giá trị của một biến môi trường bên trong một runner, bạn có thể sử dụng phương pháp bình thường của hệ điều hành Á hậu để đọc các biến môi trường.
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: echo "Nice work, $First_Name. Deploying to production server on branch $GITHUB_REF"
env:
First_Name: Mona
Đặt biến môi trường tùy chỉnh trong dòng công việc
Bạn có thể xác định các biến môi trường được đặt phạm vi trong toàn bộ dòng env công việc bằng cách sử dụng ở mức cao nhất của tệp dòng công việc. Phạm vi nội dung của công việc trong dòng công việc bằng cách dùng jobs.<job_id>.env. Bạn có thể đặt phạm vi biến môi trường ở một bước cụ thể trong công việc bằng cách sử dụng jobs.<job_id>.steps[*].env.
Đây là ví dụ hiển thị cả ba kịch bản trong tệp dòng công việc:
name: Greeting on variable day
on:
workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
Dùng ngữ cảnh mặc định trong dòng công việc
Nền tảng GitHub đặt các biến môi trường mặc định. Chúng không được xác định trong dòng công việc, nhưng bạn có thể dùng biến môi trường mặc định trong dòng công việc trong ngữ cảnh thích hợp. Hầu hết các biến số này, ngoài CI, bắt đầu bằng GITHUB_* hoặc RUNNER_*. Hai loại sau không thể bị ghi đè. Ngoài ra, các biến mặc định này có thuộc tính ngữ cảnh tương ứng và được đặt tên tương tự. Ví dụ: chuỗi RUNNER_* các biến mặc định có thuộc tính ngữ cảnh phù hợp là runner.*.
Đây là ví dụ về cách truy nhập các biến mặc định trong dòng công việc bằng cách áp dụng các phương pháp sau:
on: workflow_dispatch
jobs:
if-Windows-else:
runs-on: macos-latest
steps:
- name: condition 1
if: runner.os == 'Windows'
run: echo "The operating system on the runner is $env:RUNNER_OS."
- name: condition 2
if: runner.os != 'Windows'
run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."
Để biết thêm thông tin, hãy xem Các biến môi trường mặc định.
Truyền biến môi trường tùy chỉnh đến dòng công việc
Bạn có thể truyền biến môi trường tùy chỉnh từ một bước của công việc dòng công việc đến các bước tiếp theo trong công việc. Tạo giá trị trong một bước của công việc và gán giá trị cho biến môi trường hiện có hoặc mới. Tiếp theo, bạn ghi cặp biến/giá trị vào tệp môi GITHUB_ENV khác. Bạn có thể sử dụng tệp môi trường trong một hành động hoặc từ lệnh shell trong công việc dòng công việc bằng cách sử dụng từ run khóa.
Bước tạo hoặc cập nhật biến môi trường không có quyền truy nhập vào giá trị mới nhưng tất cả các bước tiếp theo trong công việc đều có quyền truy nhập.
Dưới đây là ví dụ:
steps:
- name: Set the value
id: step_one
run: |
echo "action_state=yellow" >> "$GITHUB_ENV"
- name: Use the value
id: step_two
run: |
printf '%s\n' "$action_state" # This will output 'yellow'
Thêm bảo vệ môi trường
Bạn có thể thêm quy tắc bảo vệ cho các môi trường được xác định cho kho GitHub của bạn.
Để thêm một môi trường, trong kho lưu trữ của bạn:
Chọn Thiết đặt.
Trên ngăn bên trái, chọn Môi trường.
Chọn nút Môi trường mới để thêm và đặt cấu hình môi trường và thêm bảo vệ.
Giới thiệu về môi trường
Sử dụng môi trường để mô tả mục tiêu triển khai chung như sản xuất, dàn dựng hoặc phát triển. Khi dòng công việc Hành động GitHub triển khai đến môi trường, môi trường sẽ xuất hiện trên trang chính của kho. Bạn có thể sử dụng môi trường để yêu cầu phê duyệt cho công việc để tiếp tục, hạn chế nhánh nào có thể kích hoạt dòng công việc, cổng triển khai bằng cách sử dụng quy tắc bảo vệ triển khai tùy chỉnh hoặc giới hạn quyền truy nhập vào các bí mật.
Mỗi công việc trong dòng công việc có thể tham chiếu đến một môi trường. Bất kỳ quy tắc bảo vệ mà bạn thiết lập cho môi trường phải vượt qua trước khi một công việc tham chiếu môi trường được gửi đến một runner. Công việc có thể truy cập bí mật của môi trường chỉ sau khi công việc được gửi đến một runner.
Khi dòng công việc tham chiếu môi trường, môi trường sẽ xuất hiện trong triển khai của kho.
Quy tắc bảo vệ môi trường
Quy tắc bảo vệ triển khai môi trường yêu cầu các điều kiện cụ thể để vượt qua trước khi một công việc tham chiếu đến tiến độ môi trường. Bạn có thể sử dụng quy tắc bảo vệ triển khai để yêu cầu phê duyệt thủ công, trì hoãn công việc hoặc hạn chế môi trường đối với các nhánh cụ thể. Bạn cũng có thể tạo và triển khai các quy tắc bảo vệ tùy chỉnh được hỗ trợ bởi Ứng dụng GitHub để sử dụng các hệ thống đối tác nhằm kiểm soát các triển khai tham chiếu môi trường được đặt cấu hình trên GitHub.
Dưới đây là giải thích về các quy tắc bảo vệ sau:
Quy tắc bảo vệ người xem lại bắt buộc. Dùng quy tắc này để yêu cầu một người hoặc nhóm cụ thể phê duyệt công việc dòng công việc tham chiếu môi trường. Bạn có thể liệt kê tối đa sáu người dùng hoặc nhóm là người đánh giá. Người xem lại ít nhất phải có quyền Đọc đối với kho lưu trữ. Chỉ có một người xem xét yêu cầu phải chấp thuận công việc để nó tiếp tục.
Bạn cũng có thể ngăn chặn tự đánh giá cho việc triển khai đến môi trường được bảo vệ. Nếu bạn bật thiết đặt này, người dùng khởi tạo triển khai không thể phê duyệt công việc triển khai, ngay cả khi họ là người xem lại bắt buộc. Bằng cách bật tính năng tự đánh giá, tính năng này đảm bảo rằng nhiều người sẽ đánh giá các triển khai đến các môi trường được bảo vệ.
Để biết thêm thông tin về việc xem lại công việc tham chiếu đến môi trường với người xem lại bắt buộc, hãy xem Xem lại triển khai.
Quy tắc chiếu hẹn giờ chờ. Bạn có thể sử dụng một quy tắc bảo vệ bộ hẹn giờ để trì hoãn một công việc trong một khoảng thời gian cụ thể sau khi công việc được kích hoạt ban đầu trước khi tiến hành triển khai môi trường. Thời gian (theo phút) phải là một số nguyên từ 1 đến 43.200 (30 ngày). Thời gian chờ không tính vào thời gian lập hóa đơn của bạn.
Quy tắc bảo vệ thẻ và nhánh. Bạn có thể sử dụng quy tắc bảo vệ thẻ và nhánh triển khai để hạn chế nhánh và thẻ được sử dụng để triển khai môi trường. Bạn có một vài tùy chọn cho quy tắc bảo vệ thẻ và nhánh triển khai cho môi trường.
- Không giới hạn không đặt giới hạn nào mà nhánh hoặc thẻ có thể triển khai cho môi trường.
- Các nhánh được bảo vệ chỉ cho phép các nhánh có các quy tắc bảo vệ nhánh được kích hoạt để triển khai đến môi trường. Nếu không có quy tắc bảo vệ nhánh nào được xác định cho bất kỳ nhánh nào trong kho, thì tất cả các nhánh đều có thể triển khai. Thiết đặt Nhánh và thẻ đã chọn đảm bảo Chỉ các nhánh và thẻ khớp với mẫu tên đã xác định của bạn mới có thể triển khai đến môi trường.
- Nếu bạn chỉ định
releases/*làm nhánh triển khai hoặc quy tắc thẻ,releases/chỉ một nhánh hoặc thẻ có tên bắt đầu bằng mới có thể triển khai đến môi trường. (Ký tự đại diện không khớp/. Để khớp các nhánh hoặc thẻ bắt đầu bằng vàrelease/chứa một dấu sổ chéo đơn khác, hãy sử dụngrelease/*/*.) Nếu bạn thêm làmmainquy tắc nhánh, một nhánh có tên cũng cómainthể triển khai cho môi trường.
Quy tắc bảo vệ triển khai tùy chỉnh. Bạn có thể tạo quy tắc bảo vệ tùy chỉnh để cổng triển khai để sử dụng dịch vụ đối tác. Ví dụ: bạn có thể sử dụng các hệ thống quan sát, thay đổi hệ thống quản lý, hệ thống chất lượng mã hoặc các cấu hình thủ công khác mà bạn sử dụng để đánh giá mức độ sẵn sàng và cung cấp phê duyệt tự động để triển khai đến GitHub.
Sau khi bạn tạo quy tắc bảo vệ triển khai tùy chỉnh và cài đặt chúng trên một kho, bạn có thể bật quy tắc bảo vệ triển khai tùy chỉnh cho bất kỳ môi trường nào trong kho.
Ghi
Nếu bạn có gói GitHub Free, GitHub Pro hoặc GitHub Team, quy tắc chiếu triển khai môi trường chỉ sẵn dùng cho các kho lưu trữ công cộng; ngoại trừ các quy tắc bảo vệ thẻ và nhánh. Đối với những người dùng có gói GitHub Pro hoặc GitHub Team, các quy tắc bảo vệ thẻ và nhánh cũng có sẵn cho các kho lưu trữ riêng tư.
Tập lệnh trong dòng công việc của bạn
Trong ví dụ đoạn mã dòng công việc trước đó, từ run được dùng để in chuỗi văn bản. Vì từ run này yêu cầu công việc thực thi lệnh trên runner nên bạn sử dụng từ khóa run để chạy các hành động hoặc tập lệnh.
jobs:
example-job:
steps:
- run: npm install -g bats
Trong ví dụ này, bạn sử dụng npm để cài đặt gói kiểm bats tra phần mềm bằng cách sử dụng từ run khóa. Bạn cũng có thể chạy tập lệnh dưới dạng hành động. Bạn có thể lưu trữ tập lệnh trong kho của mình, thường được thực hiện trong thư mục .github/scripts/, sau đó cung cấp đường dẫn và kiểu vỏ bằng cách sử dụng từ khóa run bạn.
jobs:
example-job:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash