我有一个动作(一个<?php
$arrayWithPrettyLongName = [
'level_1' => [
'key_1' => 10,
'key_2' => 20,
'key_3' => 30,
]
];
// Test-1 // Works fine!
$result_1 =
$arrayWithPrettyLongName['level_1']['key_1'] +
$arrayWithPrettyLongName['level_1']['key_2'] +
$arrayWithPrettyLongName['level_1']['key_3'] ;
echo $result_1;
echo "\n";
//Just create an array reference here, by preceding the name with an `&`
$path = &$arrayWithPrettyLongName['level_1'];
//Also remove the `.` symbol here. That's not the correct syntax
$result_2 =
$path['key_1'] +
$path['key_2'] +
$path['key_3'] ;
echo $result_2;
文件)用于将docker映像部署到Google Cloud Run。
我希望收到Slack或Email消息,通知构建并推送结果。
构建操作完成后如何触发消息操作?
是否可以获得构建操作的结果?
答案 0 :(得分:33)
有两种选择:
workflow.yml
中使用第二个作业和 the needs
keywordnotify.yml
工作流,使用 the workflow_run
event as a trigger1.相同的工作流程,带有 needs
关键字
在您的 workflow.yml
文件中,您只需定义两个这样的作业(利用第二个作业中的 needs: build
配置):
name: CI build and notify
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
notify:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
As the docs state,第二个 notify
作业只有在第一个 build
作业成功时才会开始:
标识在此作业之前必须成功完成的所有作业 将运行。
以下屏幕截图显示了这种方法实际上看起来像 from my own project(我有第二份 publish-snapshot
工作而不是您的 notify
工作 - 但概念保持不变):>
还有 a way to always let the notify
job run,即使 build
作业失败。然后,您必须使用 needs
配置增强 if: always()
。
2.单独的工作流程,使用 the workflow_run
event as a trigger
使用 workflow_run
event as a trigger,我们最终拥有 2 个单独的 GitHub Actions 工作流 yaml 文件:
build.yml
name: CI build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
notify.yml
name: CI notify
# Only trigger, when the build workflow succeeded
on:
workflow_run:
workflows: ["CI build"]
types:
- completed
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
这里的一个关键点是第一个 yaml 文件的 name: CI build
定义必须与第二个 yaml 文件中的 workflow_run: workflows: ["CI build"]
定义完全匹配。还有一点是这种方法需要在默认分支上完成(主要是main
或master
)as the docs state:
注意:此事件仅在工作流文件 位于默认分支上。
如果您有兴趣,这里还有一个使用第一个选项的 full example project。
答案 1 :(得分:2)
首先,您在此处混用术语。根据{{3}},单个YAML文件称为工作流程(不是动作),由 jobs 组成。作业包含一个接一个执行的一系列步骤(包括动作)。特定的工作流程执行称为运行。牢记这一点就可以解决问题。
构建工作流程完成后,如何触发消息工作流程?
您可以使用GitHub API触发名为GitHub Actions documentation(仅针对基本分支)或repository_dispatch
的webhook事件。使用构建工作流程中的专用workflow_dispatch
操作可以轻松完成此操作。
是否可以获得构建工作流程的结果?
是的,可以使用Repository Dispach
获得工作流程运行的结果但是,如果您只想发送当前执行的工作流的构建结果通知,则无需创建单独的工作流并从父级触发它。您可以使用专用的GitHub API或Slack actions。
答案 2 :(得分:2)
您可以在第 2 步中尝试以下指令:
needs: step-1-job-name
就在职位名称之后
答案 3 :(得分:1)
构建操作完成后如何触发消息操作?
现在(2020年8月)可以通过“ GitHub Actions improvements for fork and pull request workflows”来实现
Actions的另一个经常要求的功能是一种基于另一个工作流的完成来触发一个工作流的方法。
例如,您可能想要获取CI工作流程的结果并进行一些进一步的分析。
新的工作流程运行事件使您能够在请求或完成一个或多个工作流程时触发新的工作流程。
由workflow_run
事件触发的运行始终使用存储库的默认分支,并且有权访问读/写令牌以及机密。
例如,作为维护人员,您可以设置一个工作流,该工作流将接收拉取请求工作流生成的工件,进行一些分析,然后将评论发布回拉取请求。
此事件也可以作为网络挂钩使用。