启动 GitHub Actions 环境变量和机密

如果你对 GitHub Actions 的环境变量还不太了解,可能还没有学会如何存储它们。但是,这是可能的吗?是的!

在本教程中,您将学到在使用 GitHub Actions 时保存不同方式的环境变量和需要时可用的秘密的方法。

准备好了吗?继续阅读,开始吧!

**先决条件**

这个教程将进行一个实际演示,需要安装了Git的任何操作系统即可,本教程中使用的是 Ubuntu 操作系统。此外,对 Git 操作的基本工作知识是必要的,以便将代码提交到 GitHub Actions 环境变量仓库。

**GitHub Actions 环境变量设置**

在使用GitHub Actions 工作流自动化流程时,您可能需要在工作流中附加环境变量。如何实现呢?首先,您需要使用env关键字在工作流中创建和指定自定义环境变量。

1. 创建一个名为.github/workflows的目录,您将在其中存储工作流文件。

2. 接下来,在 .github/workflows 目录中创建一个以您喜欢的名称命名的文件。但是,对于此示例,文件的名称为 main.yml。将下面的代码复制并粘贴到 main.yml 文件中。

下面的代码在代码触发 工作流程 时设置并显示 API_KEY 环境变量。

name: env_tutorial
## 在推送或 
## 拉取请求到主分支时触发工作流
on: [pull_request, push] 

env:
  ## 设置环境变量
  API_KEY: XXXXXXXXXXXX    

jobs:
  job1:
    ## 作业将运行的运行程序类型, 
    ## 在这里运行在最新的 ubuntu 上
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 引用您的环境变量
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 另一种引用您的环境变量的方式
        run: echo "The API key is:$API_KEY"

3. 提交并推送代码到您的 GitHub 存储库。

git add .
git commit -m "update"
git push
Pushing updates to the GitHub Actions environment variables repository

4. 现在,打开您的 Web 浏览器并导航到 GitHub 上的项目。点击 Actions 选项卡,然后点击当前提交。

您将看到类似下面图片的内容,显示 GitHub 已运行工作流程。

GitHub actions Environment variables for repository

5. 最后,单击job1job2,您将看到您已成功引用了初始化的环境变量。

Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

为作业定义环境变量

现在,您已经在工作流文件中初始化了环境变量,任何作业都可以引用该环境变量。但也许您只想让一个作业引用环境变量。如果是这样,请在作业本身放置env关键字。

1. 用下面的代码替换您的main.yml文件中的代码。

下面的代码显示了当您将环境变量放置在特定作业中时,其他作业无法引用该环境变量。

name: env_tutorial
## 当主分支推送或
## 拉取请求时触发工作流程
on: [pull_request, push] 

jobs:
  job1:
    ## 作业将在其中运行的运行器的类型
    runs-on: ubuntu-latest 
    env:
      ## 环境变量
      API_KEY: XXXXXXXXXXXX    
    steps:
      - name: step 1
        ## 引用您的环境变量
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 另一种引用您的环境变量的方式
        run: echo "The API key is:$API_KEY"  

2. 提交您的更改并将作业推送到 GitHub Actions 环境变量,就像您在前一节中所做的那样。

3. 最后,导航到 GitHub 上的项目,然后单击job1job2以查看它们的比较:

  • 工作1 – 您会注意到您已经完美引用了环境变量。
  • 工作2 – API密钥为空。
Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

为步骤定义环境变量

既然您已经学会了如何在工作中指定环境变量,您可能想知道如何在步骤中执行相同的操作。

对于工作中的步骤,您就像对待工作一样在步骤中指定环境变量。

1. 使用下面的代码替换您在main.yml文件中的代码。

在下面的代码中,您在步骤1中指定了环境变量,但在步骤2中没有指定,您将在接下来的步骤中看到效果。

name: env_tutorial
## 在推送或拉取请求主分支时触发工作流程
## 主分支上推送或拉取请求时触发
on: [pull_request, push] 

jobs:
  job1:
    ## 作业将在其上运行的运行器类型
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        env:
          ## 步骤1的环境变量
          API_KEY: XXXXXXXXXXXX    
        ## 引用您的环境变量
        run: echo "The API key is:${{env.API_KEY}}"   
      - name: step 2
        ## 引用您的环境变量
        run: echo "The API key is:${{env.API_KEY}}"   

2. 现在提交更改并推送代码到GitHub。

3. 最后,转到GitHub Actions环境变量中的项目,并点击工作1

尽管在同一作业(job1)的两个步骤中引用了两个API密钥,在第2步中,API密钥(空白)无法被识别,如下所示。为什么呢?因为您在代码中没有在第2步内指定环境变量。

Setting environment variables for steps

通过GitHub Actions环境变量和Secrets管理环境变量

与硬编码不同,您可能希望安全地存储环境变量,GitHub Secrets可以做到这一点。 GitHub Actions环境变量加密您放入Secrets的值,因此它们在裸眼中是不可见且不可读的。

使用此方法创建的Secret对整个工作流程、作业和步骤都是可访问的;没有限制。

要在GitHub Secrets中存储环境变量:

1. 首先,像在前面的部分中一样,将您的代码推送到GitHub。

2. 接下来,导航到GitHub上的项目,单击设置选项卡。

单击下方的Secrets开始添加一个Secret。

Storing environment variables in Secrets

3. 接下来,单击新存储库Secret,您将看到一个填写有关添加的Secret的详细信息的表单。

Creating new repository secret

4. 适当填写表单(名称)并单击添加Secret按钮提交。现在API_KEY已保存在GitHub Secrets中。在此表单中,GitHub安全地设置环境变量作为Secrets,您可以在GitHub Actions上引用它们。

Filling name and value of the new secret

5. 编辑您的main.yml文件,并将env关键字替换为secrets

如下图所示,您可以看到在${{secrets.API_KEY}}格式中引用了API密钥,而不是直接将API密钥硬编码在代码中。

name: env_tutorial
## 当推送或拉取请求在主分支上时触发工作流程
## 作业将在哪种类型的 Runner 上运行
on: [pull_request, push] 

jobs:
  job1:
    ## 引用您的环境变量
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 引用您的环境变量
        run: echo "The API key is:${{secrets.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 引用您的环境变量
        run: echo "The API key is:${{secrets.API_KEY}}"  

6. 最后,将代码提交并推送到GitHub,并导航到GitHub Actions环境变量中的项目。请参考第一部分。

您将看到类似下图的内容,但由于GitHub对放入secrets中的值进行了加密,因此您无法看到实际的API_key

Displaying API key from GitHub Actions environment variables secrets

引用默认的GitHub环境变量

GitHub提供了一些默认环境变量,您可以使用这些变量来访问存储库中的文件系统,而不是硬编码路径。默认的GitHub环境变量使您能够更加灵活地引用GitHub提供的环境变量。

一些默认环境变量提供的路径如下:

  • GITHUB_JOB – 提供当前作业的job_id。
  • GITHUB_ACTION – 提供当前操作的id。
  • GITHUB_ACTION_PATH – 提供操作所在路径。
  • GITHUB_ACTOR – 提供启动工作流的人或应用程序的名称,如您的 GitHub 用户名。
  • GITHUB_RUN_ID – 提供run命令的唯一编号。

使用以下代码替换您main.yml文件中的内容。以下代码显示了代码中声明的默认环境变量。

name: env_tutorial
## 当主分支上进行推送或拉取请求时触发工作流
## 运行作业的运行器类型
on: [pull_request, push] 

jobs:
  job1:
    ## 引用默认环境变量
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        run: |
          echo "The job_id is: $GITHUB_JOB"   # 引用默认环境变量
          echo "The id of this action is: $GITHUB_ACTION"   # 引用默认环境变量
          echo "The run id is: $GITHUB_RUN_ID" 
          echo "The GitHub Actor's username is: $GITHUB_ACTOR"
      - name: step 2
        run: |
          echo "The run id is: $GITHUB_RUN_ID"

提交并推送代码更改到 GitHub,检查您的 GitHub Actions 环境变量项目中的操作,您将看到类似下图的内容。

Referencing the Default GitHub environment variables

结论

在本教程中,您已经学会了如何管理 GitHub Actions 环境变量。现在,您应该已经具备了安全存储环境变量以及如何使用 GitHub 提供的默认环境变量的基础知识。

现在你计划如何在使用GitHub Actions时整合这些新学到的知识呢?也许保存部署所需的API密钥?

Source:
https://adamtheautomator.com/github-actions-environment-variables/