【问题标题】:What does double colon :: stand for in YAML for GitHub Actions?GitHub Actions 的 YAML 中的双冒号 :: 代表什么?
【发布时间】:2022-06-22 20:20:27
【问题描述】:

我正在尝试使用 GitHub Actions 在我的 GitHub 存储库中编写一个文件。在阅读文档时,我偶然发现了this

Actions 可以与 runner 机器通信来设置环境 变量,其他操作使用的输出值,添加调试消息 输出日志和其他任务。

大多数工作流命令以特定格式使用echo 命令, 而其他人则通过写入文件来调用。了解更多信息, 见"Environment files"

echo "::workflow-command parameter1={data},parameter2={data}::{command value}"

我不知道 Ansible,所以我不明白这是 YAML 语法还是 Ansible 语法。

我已尝试搜索 Google 和 Stack Overflow,但没有找到双冒号或 ::

谁能给我指向相应文档的链接:: 或解释这个命令的作用?

换句话说,我帖子中的示例在 shell 中抛出了什么?如果定义了 data 和 parameter1 和 parameter2(在 yml 中,在 shell/env 中),它们在哪里定义?命令值是我可以在 yml 或 shell 中重用的值吗?

【问题讨论】:

  • 这是工作流命令的语法。那合适的文档。
  • 好吧,我不明白,谁能解释一下它的作用?
  • 我不知道还能说什么 - 它允许您调用工作流命令并将参数传递给它们,正如您引用中的示例所示。
  • 你问这个问题的原因是什么?除了您的问题首先陈述之外,您是否正在尝试完成其他事情?双冒号只是命令输出的一种语法。例如,如果您正在运行debug: msg="foobar",那么该命令的语法输出将类似于:: debug msg="foobar"::foobar
  • 换句话说,我帖子中的示例在 shell 中抛出了什么?如果定义了 data 和 parameter1 和 parameter2(在 yml 中,在 shell/env 中),它们在哪里定义?命令值是我可以在 yml 或 shell 中重用的值吗?

标签: github ansible yaml github-actions


【解决方案1】:

::command 可以通过任何脚本或可执行文件记录到控制台。它们是 GitHub 运行程序将检测、解释并采取适当措施的特殊字符串。

它们本质上是 runner 和它当前运行的东西之间的通信机制。任何可以写入控制台的东西都可以发出这些字符串。

构建这些刺,注入这些“魔术字符串”运行所需的任何参数完全取决于您。

您找到的文档是关于这些文档的正确文档,用于了解如何记录字符串以及您可以使用哪些命令。

如果您使用 JavaScript/Typescript 工具包构建 GitHub 操作,那么它为这些命令提供了很好的包装函数。 The JavaScript SDK also gives you a sneak peak into how to composekthese strings.

如果您正在构建复合操作、容器任务或直接从工作流中的脚本块发出命令,则由您来构建正确的字符串并将其记录到控制台。

更多细节:

通过控制台进行通信是在几乎任何平台上运行的任何工具之间的最低公分母,并且不需要任何类型的进程间通信。这是从子进程与其父进程进行通信的最简单方法。

您将使用该命令来设置输出变量。

echo "::set-output name=name::value"

为了能够引用交叉点的值,您可以从任何操作中引用任何输出变量。

或者设置一个为下一个作业设置的环境变量:echo "action_state=yellow" >> $GITHUB_ENV

见:https://stackoverflow.com/a/57989070/736079

【讨论】:

  • 感谢您的解释。你能举个例子吗?它的作用是什么?
  • 不确定要添加什么...您的自定义操作或脚本可以将这些魔术字符串记录到控制台以执行许多操作,所有这些都在您已经引用的文档中进行了解释。他们可以向跑步者发出信号以设置一个变量,该变量将可用于同一作业中的其他步骤。它可以向跑步者发出信号,将日志消息分组在一起。它可以向跑步者发出信号,某些值必须被视为机密,并且永远不会被记录到控制台。
  • 例如 ::debug msg="foobar"::cmdresult 在控制台中启动命令 debug msg="foobar" 还是在控制台中调试 "foobar"? cmdresult 是命令的结果对吗? cmdresult 变量在哪里分配?在 github 运行器中,我可以在以后或在控制台中重用它?
  • 如果作业在 dubug 模式下运行,::debug msg=abc 会将消息 abc 记录到作业日志中。没有用于调试消息的 cmdresult。
  • 好吧,这是一个不好的例子,但如果它是 ::echo "test"::cmdresult ,我想在哪里以及如何重用具有 test 值的 cmdresult?
猜你喜欢
  • 2011-08-21
  • 2018-11-08
  • 2016-05-16
  • 2011-03-01
  • 2014-11-24
  • 2019-09-14
  • 1970-01-01
  • 2014-02-05
相关资源
最近更新 更多