GitHub Actions 添加环境变量

GitBeginner
立即练习

介绍

在 GitHub Actions 中,环境变量是工作流(workflow)的步骤中可用的键值对。你可以为整个工作流、特定的任务(job)或特定的步骤(step)定义环境变量。

在这个 Lab 中,你将学习如何:

  1. 创建一个 GitHub Actions 工作流文件。
  2. 在工作流级别定义一个环境变量。
  3. 在一个步骤中访问和使用该环境变量。
  4. 更新变量并再次触发工作流。

这个 Lab 基于你在先前 Lab 中创建的仓库。你将克隆 github-actions-demo 仓库并创建一个使用环境变量的工作流。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 100%。获得了学习者 100% 的好评率。

添加 env 部分,并将变量 GREETING 设置为 'Hello'

在这一步中,你将克隆仓库并创建一个带有全局环境变量的新 GitHub Actions 工作流文件。

  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
  1. 进入克隆的仓库:
cd ~/project/github-actions-demo
  1. .github/workflows 目录下创建一个名为 env-demo.yml 的新文件:
touch .github/workflows/env-demo.yml
  1. 在 WebIDE 中打开 .github/workflows/env-demo.yml 并添加以下内容。这定义了工作流的名称、触发事件(push)以及带有名为 GREETING 的变量的 env 部分。
name: Environment Variable Demo

on: [push]

env:
  GREETING: "Hello"
  • name: 你的工作流的名称。
  • on: 指定当发生 push 事件时运行此工作流。
  • env: 定义一个环境变量映射,这些变量可用于工作流中的所有 job 和 step。这里,我们将 GREETING 设置为字符串 'Hello'

添加一个步骤来输出变量,使用 run echo "${{ env.GREETING }}, World!"

在此步骤中,你将定义一个 job 和一个 step 来使用你创建的环境变量。你在工作流文件(workflow file)中使用 ${{ env.VARIABLE_NAME }} 语法来访问环境变量。

在 WebIDE 中打开 .github/workflows/env-demo.yml 文件,并将以下内容追加到文件末尾:

jobs:
  print-greeting:
    runs-on: ubuntu-latest
    steps:
      - name: Print Greeting
        run: echo "${{ env.GREETING }}, World!"

你的完整文件应如下所示:

name: Environment Variable Demo

on: [push]

env:
  GREETING: "Hello"

jobs:
  print-greeting:
    runs-on: ubuntu-latest
    steps:
      - name: Print Greeting
        run: echo "${{ env.GREETING }}, World!"
  • jobs: 定义工作流运行的 job。
  • print-greeting: job 的 ID。
  • runs-on: 配置运行该 job 的机器类型(runner)。
  • steps: 将在 job 中运行的所有步骤组合在一起。
  • run: 在 runner 的 shell 中执行一个命令。我们使用 echo 来打印 GREETING 的值,后跟 , World!

提交并推送包含 env 的更新后的工作流文件

在这一步,你将提交新的工作流文件并将其推送到 GitHub。推送此文件将使工作流在 GitHub Actions 中注册,并触发第一次运行。

  1. 确保你位于仓库目录中:
cd ~/project/github-actions-demo
  1. 暂存工作流文件:
git add .github/workflows/env-demo.yml
  1. 提交更改:
git commit -m "Add workflow with environment variable"
  1. 将更改推送到 GitHub 上的远程仓库:
git push

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

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

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

通过推送更改来触发工作流

该工作流被配置为在 push 事件上运行。尽管上一次推送已经触发了工作流,但让我们看看更新环境变量并再次触发它有多么简单。

  1. 在 WebIDE 中打开 .github/workflows/env-demo.yml
  2. GREETING 的值从 "Hello" 更改为 "Hi"
env:
  GREETING: "Hi"
  1. 提交并推送此更改:
git add .github/workflows/env-demo.yml
git commit -m "Update greeting variable"
git push

关于身份验证的注意事项:
如果你最近没有进行身份验证,当你运行 git push 时,WebIDE 会自动提示你进行身份验证。请遵循与上一步中描述的相同的身份验证步骤。

隐私声明: WebIDE 将请求对你的 GitHub 账户的完全访问权限用于身份验证目的。你无需担心隐私问题——在你完成当前实验(lab)后,LabEx 虚拟机将立即销毁,并且你的凭证和授权信息不会被保留。

这次推送将触发工作流的新一次运行,使用更新后的变量。

在 GitHub 上验证运行日志中的环境变量输出

推送代码后,工作流将自动在 GitHub 上触发。你可以查看工作流运行日志,以验证环境变量是否被正确使用。

  1. 在网页浏览器中访问你的 GitHub 仓库:https://github.com/your-username/github-actions-demo
  2. 点击仓库页面顶部的 Actions 标签页。
  3. 你应该会看到一个新的工作流运行被列出,名称可能为 "Update greeting variable"。

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

  1. 点击运行标题,然后点击 print-greeting 任务(job)。
  2. 展开 Print Greeting 步骤以查看输出。

你应该会看到命令执行结果:

Run echo "Hi, World!"
  echo "Hi, World!"
  shell: /usr/bin/bash -e {0}
Hi, World!

请注意,${{ env.GREETING }} 已被其新值 Hi 替换。

GitHub Actions logs

总结

在这个实验(Lab)中,你已成功创建了一个使用环境变量的 GitHub Actions 工作流。你学会了如何:

  1. 使用 env 关键字在工作流级别定义环境变量。
  2. 使用 ${{ env.VARIABLE_NAME }} 语法在步骤(steps)中访问这些变量。
  3. 更新变量并通过推送更改再次触发工作流。

环境变量对于管理在不同环境或运行之间可能发生变化的配置值至关重要,而无需更改硬编码的命令逻辑。