Tùy chỉnh dòng công việc của bạn với các biến môi trường

Đã hoàn thành

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:

  1. Chọn Thiết đặt.

    Thanh menu của giao diện web với các tab như Mã, Vấn đề và Wiki; Cài đặt được tô sáng.

  2. Trên ngăn bên trái, chọn Môi trường.

    Ảnh chụp màn hình menu Cài đặt bên dưới Chung với các mục dành cho Access, Mã và tự động hóa, Bảo mật và Tích hợp. Tùy chọn Môi trường được tô sáng.

  3. 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ệ.

    Ảnh chụp màn hình trang Cài đặt kho GitHub hiển thị phần Môi trường với thông báo cho biết không có môi trường nào tồn tại và nút Môi trường mới được tô sáng.

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ụng release/*/*.) Nếu bạn thêm làm main quy tắc nhánh, một nhánh có tên cũng có main thể 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.

    Ảnh chụp màn hình hiển thị trang Cài đặt để cấu hình Môi trường1 với các tùy chọn cho người xem lại, bộ hẹn giờ chờ, quy tắc tùy chỉnh và giới hạn nhánh.

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