Github Actions E07上下文和表达式语法

前言

如果没有这些内容,workflow照样可以运行起来;但利用上下文获取的信息和内置的表达式功能可以大大帮助我们轻松地完成更多的事情。另外,上下文和环境变量中的部分内容的目的是一样的,在选择时,用自己习惯的之一就好。

1. 介绍

可以使用表达式程序化设置工作流程文件中的变量和访问上下文。表达式可以是文字值、上下文引用或函数的任意组合。可以使用运算符组合文字、上下文引用和函数

在if条件条件下使用表达式时,不需要使用表达式语法,因为GitHub会自动将if条件条件计算为表达式。

1
2
3
4
# if 条件的示例表达式
steps:
- uses: actions/hello-world-javascript-action@master
if: <expression>

2. 上下文

Contexts are a way to access information about workflow runs, runner environments, jobs, and steps. 上下文使用表达式语法。

上下文名称 类型 描述
github 对象 工作流程运行的相关信息。 更多信息请参阅 github 上下文。
env 对象 Contains environment variables set in a workflow, job, or step. For more information, see env context .
job 对象 当前执行的作业相关信息。 更多信息请参阅 job 上下文。
steps 对象 此作业中已经运行的步骤的相关信息。 更多信息请参阅 steps 上下文。
runner 对象 运行当前作业的运行程序相关信息。 For more information, see runner context.
secrets 对象 用于访问仓库中设置的密码。 For more information about secrets, see “Creating and using encrypted secrets.”
strategy 对象 用于访问配置的策略参数及当前作业的相关信息。 策略参数包括 fail-fast、job-index、job-total 和 max-parallel。
matrix 对象 用于访问为当前作业配置的矩阵参数。 例如,如果使用 os 和 node 版本配置矩阵构建,matrix 上下文对象将包含当前作业的 os 和 node 版本。

2.1 github context

官网中也提到 你可以在环境变量中读取到大多数的 github 上下文

作为表达式的一部分,您可以使用以下两种语法之一访问上下文信息。

索引语法:github[‘sha’]
属性解除参考语法:github.sha

注意: 在使用敏感信息时,需要更加小心。在控制台日志输出时,Github 会遮掩sercrets。但是当导出或打印上下文时应谨慎行事。

2.2 env context

env上下文包含在工作流,作业或步骤中设置的环境变量。 有关在工作流中设置环境变量的更多信息,可参见之前的文章–Github Actions E05环境变量

env上下文语法允许您在工作流文件中使用环境变量的值。 如果要在runner中使用环境变量的值,请使用runner操作系统的常规方法读取环境变量。

2.3 job context

job 上下文包含当前正在运行的作业相关信息。

2.4 steps context

steps 上下文包含当前作业中已经运行的步骤相关信息。

2.5 runner context

2.6 secrets context

2.7 strategy context

2.8 matrix context

各种上下文列表(还没看得到 strategy、matrix的使用)

属性名称 类型 描述
github object 工作流程中任何作业或步骤期间可用的顶层上下文。
github.event object 完整事件 web 挂钩有效负载。 更多信息请参阅“触发工作流程的事件”。
github.event_path string The path to the full event webhook payload on the runner.
github.workflow string 工作流程的名称。 如果工作流程文件未指定 name,此属性的值将是仓库中工作流程文件的完整路径。
github… github上下文还有很多,详情请见xx
env object 此上下文针对作业中的每个步骤而改变。 您可以从作业中的任何步骤访问此上下文。
env.<env name> string 某一个具体环境变量的值。 (完)
job object 此上下文针对工作流程运行中的每项作业而改变。 您可以从作业中的任何步骤访问此上下文。
job.status string 作业的当前状态。 可能的值包括 success、failure 或 cancelled。
job.container object 作业的容器相关信息。 有关容器的更多信息,请参阅“GitHub 操作 的工作流程语法”。
job.container.id string 容器的 id。
job… job 上下文还有很多,详情请见xx
steps object 此上下文针对作业中的每个步骤而改变。 您可以从作业中的任何步骤访问此上下文。
steps..outputs object 为步骤定义的输出集。 更多信息请参阅“GitHub 操作 的元数据语法”。
steps..outputs. string 特定输出的值。(完)

3. 文字

作为表达式的一部分,您可以使用 boolean、null、number 或 string 数据类型。 Boolean 文字不区分大小写,因此可以使用 true 或 True。

数据类型 文字值
boolean true 或 false
null null
number JSON 支持的任何数字格式。
string 必须使用单引号。 使用单引号逸出文字单引号。

4. 运算符

运算符 描述
( ) 逻辑分组
[ ] 索引
. 属性解除参考
!
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
&&
| |

GitHub 进行宽松的等式比较。

  • 如果类型不匹配,GitHub 强制转换类型为数字。 GitHub 使用这些转换将数据类型转换为数字:
  • 一个 NaN 与另一个 NaN 的比较不会产生 true。
  • GitHub 在比较字符串时忽略大小写。
  • 对象和数组仅在为同一实例时才视为相等。

5. 函数

GitHub 提供一组内置的函数,可用于表达式。 有些函数抛出值到字符串以进行比较。 GitHub 使用这些转换将数据类型转换为字符串。 函数有 contains、startsWith、 endsWith、 format、 join、 toJson、 hashFiles,还有一类作业状态检查函数,有 success、always、 cancelled、 failure。有些类似Jenkins中的post使用的一些判断条件,但github actions是使用于step中的。具体使用详情可见官网

6. 对象过滤器

可以使用 * 语法应用过滤条件并从集合中选择匹配的项目。

例如,考虑名为 fruits 的对象数组。

1
2
3
4
5
[
{ "name": "apple", "quantity": 1 },
{ "name": "orange", "quantity": 2 },
{ "name": "pear", "quantity": 1 }
]

过滤条件 fruits.*.name 返回数组 [ “apple”, “orange”, “pear” ]


由于项目实践还不多,等我哪天需要用到这些功能,以完成一些特殊情况的需求时,再来一一举例。

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:

请我喝杯咖啡吧~