环境变量与机密信息
学习如何在 GitHub Actions 中安全地管理敏感信息和特定于环境的配置
环境变量与机密信息 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
环境变量与机密:基础知识
欢迎学习第 3 课!在持续集成/持续交付中,您经常需要使用动态值或敏感信息来配置流水线。
这时,环境变量和机密就必不可少了。它们可以让工作流适应不同场景,并安全地处理敏感数据。
为什么在持续集成/持续交付中使用它们
假设您需要将应用部署到不同环境(开发、预发布和生产环境),或使用应用程序接口密钥连接外部服务。
- 灵活性:环境变量让您无需修改工作流文件即可更改行为。
- 安全性:机密可以保护密码和应用程序接口令牌等敏感数据,防止其泄露。
- 可复用性:只需定义一次配置,即可在多个作业或步骤中使用。
自动化工作流中的环境变量
环境变量是一个具有动态名称的值,可以影响正在运行的进程的行为。在 GitHub 的自动化工作流中,环境变量是实现工作流可配置性的关键。
您可以定义自己的环境变量,也可以使用 GitHub 的自动化工作流提供的许多内置变量。
GitHub 自动化工作流内置环境变量
GitHub 的自动化工作流会自动提供许多有用的预定义环境变量。这些变量可以提供代码库、工作流运行情况等上下文信息。
例如,GITHUB_SHA 是提交哈希值,GITHUB_REF 是触发工作流的分支或标签名称。
您可以在表达式中使用 github 上下文对象访问它们;如果将它们映射到 env,也可以直接将其作为命令行变量使用。
name: Print Context Variables
on: [push]
jobs:
display_info:
runs-on: ubuntu-latest
steps:
- name: Show commit SHA
run: echo "Commit SHA: ${{ github.sha }}"
- name: Show branch/tag ref
run: echo "Ref: ${{ github.ref }}"自定义环境变量:工作流作用域
您可以在工作流级别或作业级别定义自己的环境变量。在工作流级别定义的变量可供该工作流中的所有作业和步骤使用。
在工作流文件的顶层使用 env 关键字即可设置这些变量。
name: Workflow-level Env Var
on: [push]
env:
GREETING_MESSAGE: "Hello from Workflow!"
jobs:
my_job:
runs-on: ubuntu-latest
steps:
- name: Access workflow variable
run: echo "${{ env.GREETING_MESSAGE }}" # Access via env context
- name: Access workflow variable (shell)
env:
MY_VAR_IN_SHELL: ${{ env.GREETING_MESSAGE }}
run: echo "$MY_VAR_IN_SHELL" # Access as shell variable自定义环境变量:作业与步骤作用域
如果有更具体的需求,您可以在作业级别或步骤级别定义环境变量。为作业定义的变量可供该作业的所有步骤使用,而步骤级别的变量只能供单个步骤使用。
这样可以更细粒度地控制配置。
name: Job & Step-level Env Vars
on: [push]
jobs:
my_job:
runs-on: ubuntu-latest
env:
JOB_VAR: "Value for this job"
steps:
- name: Access Job-level variable
run: echo "Job Var: ${{ env.JOB_VAR }}"
- name: Step-specific variable
env:
STEP_VAR: "Value for this step"
run: echo "Step Var: ${{ env.STEP_VAR }}"
- name: Try to access step var in another step
run: echo "Trying to access: ${{ env.STEP_VAR }}" || true # Will be empty介绍 GitHub 机密
环境变量非常适合存储非敏感数据,但对于应用程序接口密钥、数据库密码或私有令牌等机密信息,该怎么办呢?
这时就需要使用 GitHub 机密了。它可以让您安全地存储敏感信息,并在工作流中访问这些信息,而不会将其暴露在代码库的代码或日志中。
- 已加密:由 GitHub 安全存储。
- 已脱敏:自动从工作流日志中隐藏。
- 受控访问:仅特定工作流可用。
创建 GitHub 机密
机密需要通过 GitHub 上的代码库设置或组织设置创建和管理,不能直接在工作流文件中创建。
- 打开代码库的设置。
- 进入机密和变量 > 操作。
- 点击新建代码库机密(如果需要更大范围的使用,也可以创建组织机密)。
- 填写名称(例如
MY_API_KEY),然后粘贴值。
保存后,您将无法再次查看机密的值,只能更新或删除它。
在工作流中使用机密
要使用机密,您需要在工作流中使用 secrets 上下文对象引用它,方式类似于使用 env 引用环境变量。
GitHub 会自动从日志中隐藏机密,将其值替换为 ***,以防止意外暴露。
name: Use a Secret Demo
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Display a secret (redacted)
run: echo "My secret key is: ${{ secrets.MY_API_KEY }}"
# GitHub Actions automatically redacts the value in logs.
- name: Pass secret to an environment variable
env:
API_KEY_ENV: ${{ secrets.MY_API_KEY }}
run: echo "API Key in env: $API_KEY_ENV"机密安全最佳实践
安全管理机密对于持续集成/持续交付流水线的完整性至关重要。请始终遵循以下准则:
- 最小权限:仅在绝对必要的范围内授予机密访问权限。
- 切勿硬编码:不要将机密直接写入工作流文件或代码库中的任何代码。
- 避免记录日志:尽管 GitHub 会进行脱敏,也应避免使用可能意外暴露机密部分内容的自定义输出命令。
- 定期轮换:定期更换机密,以尽量降低泄露风险。
- 按环境区分:为开发、预发布和生产环境使用不同的机密。
快速检查:环境变量与机密
哪个陈述准确描述了 GitHub 操作中环境变量和机密信息的一个关键区别或特性?
回顾:安全配置
太棒了!您已成功了解如何管理 GitHub 操作工作流程中的配置。
- 环境变量 可帮助您将非敏感的动态数据注入工作流程运行中,并且可以在工作流程、作业或步骤级别进行调整。
- 机密信息 对于安全处理应用程序接口密钥等敏感信息至关重要,可确保这些信息保持加密状态,不会出现在您的公开代码中。
- 使用机密信息时,请始终遵循安全最佳实践,保护您的部署免受漏洞影响。
掌握这些概念可以确保您的持续集成/持续交付流水线既灵活又安全!
常见问题解答
「环境变量与机密信息」课时是免费的吗?
是的 — 「环境变量与机密信息」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「环境变量与机密信息」这节课中我会学到什么?
学习如何在 GitHub Actions 中安全地管理敏感信息和特定于环境的配置 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「环境变量与机密信息」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 持续部署简介
- 部署到预发布环境
- 环境变量与机密信息
- 通过审批门部署到生产环境