👉 先决条件

如果您是 GitHub Actions 的新手,建议您阅读我的Github Actions 简介 - GitHub Actions (Part 1)文章。

GitHub Actions 中的环境变量主要分为三种。

1.自定义环境变量。

  1. 默认环境变量。

  2. 加密环境变量。

1\。自定义环境变量

自定义环境变量可以由我们自己在任何工作流文件中声明。

我们可以在工作流文件中声明不同访问范围下的自定义环境变量。

  • 工作流级别

  • 工作级别

  • 步级

因此,声明的变量只能由特定范围访问。

例子:

  • 工作流级别自定义环境变量

在这里,我在工作流级别声明了一个名为 PUBLICENV 的变量,并尝试在不同的级别对其进行回显。

name: workflow-level-custom-environment-variables

on: [push]
# Here the environment variable is declared in workflow level
env:
    PUBLICENV: Available for all jobs in this workflow

jobs:
    sample-job-1:
        runs-on: ubuntu-latest
        steps:
            - name: step-1
              run: echo "${PUBLICENV}"
              # This will echo the value/string of PUBLICENV

            - name: step-2
              run: echo "${PUBLICENV}"
              # This will echo the value/string of PUBLICENV

    sample-job-2:
        runs-on: ubuntu-latest
        steps:
            - run: echo "${PUBLICENV}"
            # This will echo the value/string of PUBLICENV


进入全屏模式 退出全屏模式

  • 作业级自定义环境变量

在这里,我在“sample-job-1”级别声明了一个名为 JOBENV 的变量,并尝试在不同级别进行回显。


name: job-level-custom-environment-variables

on: [push]

jobs:
    sample-job-1:
        env:
            JOBENV: Available for this specific job only
            # Here the environment variable is declared in job level
        runs-on: ubuntu-latest
        steps:
            - name: step-1
              run: echo "${JOBENV}"
              # This will echo the value/string of JOBENV

            - name: step-2
              run: echo "${JOBENV}"
              # This will echo the value/string of JOBENV

    sample-job-2:
        runs-on: ubuntu-latest
        steps:
            - run: echo "${JOBENV}"
            # This will NOT echo the value/string of JOBENV


进入全屏模式 退出全屏模式

  • 步骤级自定义环境变量

在这里,我在“sample-job-1”内的“step-1”级别中声明了一个名为 STEPENV 的变量,并尝试在不同级别中回显它。


name: step-level-custom-environment-variables

on: [push]

jobs:
    sample-job-1:
        runs-on: ubuntu-latest
        steps:
            - name: step-1
              env:
                  STEPENV: Available for this specific job only
                  # Here the environment variable is declared in step level

              run: echo "${STEPENV}"
              # This will echo the value/string of STEPENV

            - name: step-2
              run: echo "${STEPENV}"
              # This will NOT echo the value/string of STEPENV

    sample-job-2:
        runs-on: ubuntu-latest
        steps:
            - run: echo "${STEPENV}"
            # This will NOT echo the value/string of STEPENV

进入全屏模式 退出全屏模式


2\。默认环境变量

GitHub 为存储库的许多有用参数提供了一些默认环境变量。我们可以在工作流程中的任何地方使用它们。

这是 GitHub Actions 中默认环境变量的列表

  • GITHUB_WORKFLOW 工作流的名称。

  • GITHUB_RUN_ID 存储库中每次运行的唯一编号。如果您重新运行工作流运行,此数字不会更改。

  • GITHUB_RUN_NUMBER 存储库中特定工作流每次运行的唯一编号。对于工作流的第一次运行,此数字从 1 开始,并随着每次新运行而递增。如果您重新运行工作流运行,此数字不会更改。

  • GITHUB_ACTION 操作的唯一标识符 (id)。

  • GITHUB_ACTIONS 当 GitHub Actions 运行工作流时,始终设置为 true。您可以使用此变量来区分测试是在本地运行还是由 GitHub Actions 运行。

  • GITHUB_ACTOR 启动工作流的人员或应用程序的名称。

  • GITHUB_REPOSITORY 所有者和存储库名称。

  • GITHUB_EVENT_NAME 触发工作流的 webhook 事件的名称。

  • GITHUB_EVENT_PATH 带有完整 webhook 事件负载的文件的路径。

  • GITHUB_WORKSPACE GitHub 工作区目录路径。

  • GITHUB_SHA 触发工作流的提交 SHA。

  • GITHUB_REF 触发工作流的分支或标签引用。

  • GITHUB_HEAD_REF 仅为分叉存储库设置。头存储库的分支。

  • GITHUB_BASE_REF 仅针对分叉存储库设置。基础存储库的分支。

  • GITHUB_SERVER_URL 返回 GitHub 服务器的 URL。

  • GITHUB_API_URL 返回 API URL。

  • GITHUB_GRAPHQL_URL 返回 GraphQL API URL。

例子:


name: default-environment-variables

on: [push]

jobs:
    sample-job:
        runs-on: ubuntu-latest
        steps:
            - name: echo-default-env-variables
              run: |
                  echo "Home: ${HOME}"
                  echo "GITHUB_WORKFLOW: ${GITHUB_WORKFLOW}"
                  echo "GITHUB_ACTIONS: ${GITHUB_ACTIONS}"
                  echo "GITHUB_ACTOR: ${GITHUB_ACTOR}"
                  echo "GITHUB_REPOSITORY: ${GITHUB_REPOSITORY}"
                  echo "GITHUB_EVENT_NAME: ${GITHUB_EVENT_NAME}"
                  echo "GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}"
                  echo "GITHUB_SHA: ${GITHUB_SHA}"
                  echo "GITHUB_REF: ${GITHUB_REF}"


进入全屏模式 退出全屏模式

输出:

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--UwsbUO31--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/akospckj1wyqlbvwk434.png)


3\。加密环境变量

在 GitHub Actions 中,我们也可以创建加密的环境变量。我们可以使用 GitHub Secrets 来存储 API 密钥和密码之类的东西。

1.点击存储库中的设置

2.点击秘密

3.点击“新建仓库密码”

  1. 提供 YOUR\SECRET\NAME 和 VALUE 并点击“添加秘密”

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--jdJo-Zho--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// dev-to-uploads.s3.amazonaws.com/i/n45by6hur4tktp8gpujl.JPG)

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--j9iuHwZA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/vjt2cgwcx4p48i67jidd.JPG)

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--L5n8jngm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/4mbxbc48mvf31e3sqmk3.JPG)

例子:

这是一个示例代码,我们如何在不暴露值的情况下重新使用加密变量。


name: working-with-encrypted-environment-variables

on:
  push: 
    branches: [main, develop]

jobs:
    sample-job:
        runs-on: ubuntu-latest
        steps:

            - name: Deploy-to-staging
              if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
              # Here this will be triggered only when the "push" event is performed only to the specific "develop" branch
              run: npx surge --project ./build --domain eight-circle.surge.sh
              env:
                  SURGE_LOGIN: ${{secrets.SURGE_LOGIN}}
                  SURGE_TOKEN: ${{secrets.SURGE_TOKEN}}
                  # SURGE_LOGIN & SURGE_TOKEN is stored as github secrets


进入全屏模式 退出全屏模式


👏 额外提示:

在 Actions 日志屏幕中,当任何步骤通过时,它会显示一个绿色复选标记,当一个步骤失败时,它会显示一个红色复选标记,但除非启用调试,否则我们无法看到确切的错误。

要在 GitHub Actions 中启用调试,请将这两个加密的环境变量存储在特定存储库的 github 机密中。然后,当某个步骤失败时,您将在同一日志屏幕中看到调试消息,这使您更容易调试错误。


Secret : ACTIONS_STEP_DEBUG 
Value  : TRUE

Secret : ACTIONS_RUNNER_DEBUG
Value  : TRUE

进入全屏模式 退出全屏模式

👉下一步是什么?

使用外部操作 - GitHub 操作(第 3 部分)

谢谢

希望你们都喜欢并从中学到了一些东西。让我知道您在讨论部分的意见和建议

👉 拜访我 -https://mihinduranasinghe.com/

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐