Github Actions E05环境变量

前言

例如在使用Jenkins等其他CICD工具时那样,环境变量可以帮助我们在流水线中传递参数,然后使用这些变量方便利用,或是获取更多关于构建的信息(比如GITHUB_REPOSITORY)。 例如构建镜像时 app1:master-1app1:ffac53, 用分支名做判断等。

1. 介绍

GitHub为每个GitHub Actions工作流程运行设置默认环境变量。 您还可以在工作流文件中设置自定义环境变量。

2. 默认的环境变量

环境变量 描述
HOME 用于存储用户数据的 GitHub 主目录路径。 例如 /github/home
GITHUB_WORKFLOW 工作流程的名称。
GITHUB_RUN_ID 仓库中每次运行的唯一编号。 如果重新运行工作流运行,此数字不会更改。
GITHUB_RUN_NUMBER 存储库中特定工作流程的每次运行的唯一编号。 对于工作流程的第一次运行,此数字从1开始,并在每次新运行时递增。 如果重新运行工作流运行,则此数字不会更改。
GITHUB_ACTION 操作唯一的标识符 (id)。
GITHUB_ACTIONS 当GitHub操作正在运行工作流时,请始终为true。可以使用此变量来区分何时在本地或通过GitHub运行测试.
GITHUB_ACTOR 发起工作流程的个人或应用程序的名称。 例如 octocat。
GITHUB_REPOSITORY 所有者和仓库名称。 例如 octocat/Hello-World。
GITHUB_EVENT_NAME 触发工作流程的 web 挂钩事件的名称。
GITHUB_EVENT_PATH 具有完整 web 挂钩事件有效负载的文件路径。 例如 /github/workflow/event.json
GITHUB_WORKSPACE GitHub 工作空间目录路径。 如果工作流程使用 actions/checkout 操作,工作空间目录将包含存储仓库副本的子目录。 如果不使用 actions/checkout 操作,该目录将为空。 例如 /home/runner/work/my-repo-name/my-repo-name
GITHUB_SHA 触发工作流程的提交 SHA。例如 ffac537e6cbbf934b08745a378932722df287a53。
GITHUB_REF 触发工作流程的分支或标记参考。例如 refs/heads/feature-branch-1,如果分支或标记都不适用于事件类型,则变量不会存在。
GITHUB_HEAD_REF 仅为复刻的仓库设置。 头部仓库的分支。
GITHUB_BASE_REF 仅为复刻的仓库设置。 基础仓库的分支。

作用域: 整个workflow中

在例子env_usage1.yml中,从上到下依次输出如下(如果需要测试,可去掉后缀 .backup):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Show Default environment variables
>> In this example <<
HOME is : /home/runner
GITHUB_WORKFLOW is: my workflow demo
GITHUB_RUN_ID is : 62167662
GITHUB_RUN_NUMBER is : 3
GITHUB_ACTION is : run
GITHUB_ACTIONS is : true
GITHUB_ACTOR is : qinrui777
GITHUB_REPOSITORY is : cicd-draft/api-test-demo
GITHUB_EVENT_NAME is : push
GITHUB_EVENT_PATH is : /home/runner/work/_temp/_github_workflow/event.json
GITHUB_WORKSPACE is : /home/runner/work/api-test-demo/api-test-demo
GITHUB_SHA is : 3eb054249e103ab3d8a85e23384472433b9815a8
GITHUB_REF is : refs/heads/master
GITHUB_HEAD_REF is :
GITHUB_BASE_REF is :

可以观察到:GitHub 会保留GITHUB_环境变量前缀供GitHub内部使用。设置有 GITHUB_ 前缀的环境变量或密码将导致错误。

3. 自定义环境变量

默认的环境变量有时候,不足以满足我们的要求,这是就需要自定义一些,以便使用。最好定义在yml文件靠前的部分,一目了然。

环境变量可用于工作流程中的所有作业和步骤,还可以设置仅适用于作业或步骤的环境变量,需要注意环境变量作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
name: my workflow demo 

on:
push:
branches:
- master

# 用于该workflow的所有job和steps
env:
SERVER: production

jobs:
env_usage_job1:
name: job1
runs-on: ubuntu-latest
steps:
- name: My step one
run: |
echo "this is job1"
echo $SERVER
# 不能写成 echo ${{ SERVER }}
second_job:
name: job2
runs-on: macos-latest
steps:
- name: My step one
run: |
echo "this is job2"
echo $SERVER
1
2
3
4
5
6
7
8
9
10
11
12
13
14
### job 级别的
jobs:
job1:
env:
FIRST_NAME: Mona

### steps 级别的
steps:
- name: Hello world
run: echo Hello world $FIRST_NAME $middle_name $Last_Name!
env:
FIRST_NAME: Mona
middle_name: The
Last_Name: Octocat

搞不懂为什么官网示例 steps 中的 env放在 run后面?

4. context 与 environment variables 的关系

The github context contains information about the workflow run and the event that triggered the run. You can read most of the github context data in environment variables. For more information about environment variables, see “Using environment variables.”

  • Todo

More Ref:

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~