GitHub Actions 设置 Secret

GitBeginner
立即练习

介绍

在这个 Lab 中,你将学习如何使用 GitHub Actions Secrets。Secrets 是你在组织 (organization)、仓库 (repository) 或仓库环境 (repository environment) 中创建的加密的环境变量。你创建的 secrets 可用于你的 GitHub Actions 工作流 (workflows) 中。

这对于保护 API 密钥、访问令牌 (access tokens) 和密码等敏感信息至关重要。GitHub Actions 会自动从日志中删除 (redacts) secrets,确保它们不会泄露。

这个 Lab 基于你在先前 Lab 中创建的仓库。你将向你的 github-actions-demo 仓库添加一个 secret,并创建一个使用该 secret 的工作流。

你将完成以下步骤:

  1. 向你现有的 GitHub 仓库添加一个仓库 secret。
  2. 克隆 (clone) 该仓库并创建一个引用该 secret 的工作流文件。
  3. 添加步骤来使用该 secret。
  4. 将工作流推送到 GitHub。
  5. 验证该 secret 在执行日志中是否被屏蔽 (masked)。

在 GitHub 设置中创建一个名为 MY_SECRET 的仓库 Secret

在此步骤中,你将在 GitHub 上的现有 github-actions-demo 仓库中添加一个 Secret,并将该仓库克隆到你的 LabEx 环境中。

添加仓库 Secret

  1. 打开你的网页浏览器,导航到 GitHub 上的 github-actions-demo 仓库:https://github.com/your-username/github-actions-demo
  2. 点击 Settings 标签页。
  3. 在左侧边栏中,向下滚动到 Security 部分,点击 Secrets and variables,然后选择 Actions
  4. 点击绿色的 New repository secret 按钮。
  5. 输入以下详细信息:
    • Name: MY_SECRET
    • Secret: SuperSecretValue123
  6. 点击 Add secret
GitHub Actions secrets

现在,你应该在 "Repository secrets" 下方看到 MY_SECRET 列表。

克隆仓库

现在,切换回 LabEx 环境以克隆仓库。

  1. 在你的 github-actions-demo GitHub 仓库页面上,点击绿色的 Code 按钮。
  2. 确保选择了 HTTPS 标签页,并复制该 URL。它应该看起来像 https://github.com/your-username/github-actions-demo.git
  3. 打开 LabEx 环境中的终端。默认路径是 ~/project
  4. 使用 git clone 命令下载仓库。将 your-username 替换为你的实际 GitHub 用户名。
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git

示例输出:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. 进入克隆的仓库目录:
cd ~/project/github-actions-demo

在工作流中使用 ${{ secrets.MY_SECRET }} 引用 Secret

在这一步,你将创建一个引用了你刚刚创建的 Secret 的工作流文件。

  1. 确保你位于仓库目录中:
cd ~/project/github-actions-demo
  1. .github/workflows 目录下创建一个名为 secrets-demo.yml 的新文件:
touch .github/workflows/secrets-demo.yml
  1. 在 WebIDE 中打开 .github/workflows/secrets-demo.yml 并添加以下内容。这定义了一个在 push 事件触发时的基础工作流。
name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

这设置好了 Job。在下一步中,我们将添加使用 Secret 的逻辑。

添加一个步骤以安全地输出 Secret 值

在此步骤中,你将修改工作流(workflow)以访问 Secret。GitHub Actions 允许你使用 ${{ secrets.SECRET_NAME }} 语法来访问 Secret。

修改工作流

打开 .github/workflows/secrets-demo.yml 文件,并将以下步骤追加到 steps 列表中。请确保缩进正确。

- name: Print Secret
  env:
    MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
  run: |
    echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
    echo "Printing secret from env (masked): $MY_SECRET_VAL"

你完整的 .github/workflows/secrets-demo.yml 文件应如下所示:

name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Print Secret
        env:
          MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
        run: |
          echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
          echo "Printing secret from env (masked): $MY_SECRET_VAL"

关键概念

当你使用 Secret 时,GitHub 会自动在日志中屏蔽(mask)它。即使你尝试使用 echo 命令输出它,输出结果也会显示星号(***)而不是实际值。

提交并推送包含 Secret 引用的工作流

在这一步,你将提交你的更改并将其推送到 GitHub。这将触发 GitHub Action。

  1. 确保你位于仓库目录中:
cd ~/project/github-actions-demo
  1. 暂存工作流文件:
git add .github/workflows/secrets-demo.yml
  1. 使用描述性的消息提交更改:
git commit -m "Add workflow to test secrets"
  1. 将更改推送到 GitHub 上的远程仓库:
git push

关于认证的注意事项:
当你运行 git push 时,WebIDE 会自动提示你进行认证。请遵循以下详细步骤:

  1. 会弹出一个提示框,显示消息:“The extension 'GitHub' wants to sign in using GitHub.”点击 Allow
  2. 会出现一个新的通知。点击 "Copy&Continue to GitHub",然后在下一个提示中点击 "Open"
  3. 在打开的浏览器窗口中登录你的 GitHub 账户,并输入已复制的授权码。确认授权后,页面将自动关闭。
  4. 等待几秒钟,你将看到终端成功完成推送操作。

隐私声明: WebIDE 会请求完全访问你的 GitHub 账户以进行认证。你无需担心隐私问题——在当前实验(lab)完成后,LabEx VM 将立即销毁,你的凭证和授权信息将不会被保留。

检查日志以确保 Secret 在不暴露的情况下被使用

推送代码后,工作流将自动在 GitHub 上触发。你可以查看工作流运行日志,以验证密钥是否被安全使用。

  1. 在网页浏览器中访问你的仓库:https://github.com/your-username/github-actions-demo
  2. 点击仓库页面顶部的 Actions 标签页。
  3. 你应该会看到一个工作流运行列表,名称可能为 "Add workflow to test secrets" 或 "Secrets Demo"。

注意: 当你推送代码时,如果仓库中有多个工作流文件,可能会触发多个 Actions。请通过检查左侧边栏中的工作流名称或使用右侧的工作流运行列表来识别正确的工作流运行。

  1. 点击工作流运行标题,然后点击 use-secret 任务(job)。
  2. 展开 Print Secret 步骤以查看输出。

你应该会看到类似以下内容:

Printing secret directly (masked): ***
Printing secret from env (masked): ***

请注意,即使工作流尝试打印密钥值,GitHub Actions 也会自动在日志中用 *** 对其进行掩码处理。这是一个关键的安全特性——它能防止敏感信息意外地暴露在日志中,即使你尝试打印它。这确认了你的密钥已安全配置并在工作流中使用,而没有暴露其真实值。

GitHub Actions logs

总结

在这个实验 (Lab) 中,你已成功学习了如何:

  1. 在 GitHub 设置中创建一个 仓库 Secret (Repository Secret) 来存储敏感数据。
  2. 创建一个 GitHub Actions 工作流文件。
  3. 使用 ${{ secrets.MY_SECRET }} 语法引用该 Secret。
  4. 将 Secret 传递给任务 (job) 步骤中的环境变量 (environment variables)。
  5. 验证 GitHub 是否自动在构建日志中屏蔽了 Secret 值。

这种做法确保了你的敏感数据,例如部署密钥 (deployment keys) 和 API 令牌 (API tokens),在整个 CI/CD 流程中保持安全。