Jun*_*ang 21 github github-actions
我有一个操作(一个yaml文件)用于将 docker 映像部署到 Google Cloud Run。
我想接收通知构建和推送结果的 Slack 或电子邮件消息。
构建操作完成后如何触发消息操作?
是否有可能获得构建操作的结果?
jon*_*ckt 56
有 2 个选项可以执行此操作:
workflow.yml连同该needs关键字notify.yml工作流程,使用该workflow_run事件作为触发1. 相同的工作流程,不同的工作与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: ...
Run Code Online (Sandbox Code Playgroud)
正如文档所述,notify只有在第一个build工作成功时才会开始第二个工作:
标识在此作业运行之前必须成功完成的任何作业。
这是我自己的项目中这种方法实际上看起来如何的屏幕截图(我有第二publish-snapshot份工作而不是你的notify工作 - 但概念保持不变):
还有一种方法可以始终让notify作业运行,即使build作业失败。然后您必须needs使用if: always()配置来增强它。
2.独立的工作流程中,使用该workflow_run事件作为触发
使用该workflow_run事件作为触发器,我们最终拥有 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: ...
Run Code Online (Sandbox Code Playgroud)
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: ...
Run Code Online (Sandbox Code Playgroud)
这里的一个关键点是name: CI build第一个 yaml 文件的workflow_run: workflows: ["CI build"]定义必须与第二个 yaml 文件中的定义完全匹配。另一点是,这种方法需要在默认分支(主要是mainor master)上完成,如文档所述:
注意:如果工作流文件位于默认分支上,此事件只会触发工作流运行。
如果您有兴趣,这里还有一个使用第一个选项的完整示例项目。
Sgt*_*oki 23
我在同一存储库中找到的可重用工作流程的最佳方法是https://docs.github.com/en/actions/using-workflows/reusing-workflows
在您想要重用的工作流程中(我们称之为wf1):
# wf1.yml
on:
workflow_call:
Run Code Online (Sandbox Code Playgroud)
在您想要调用的工作流程中wf1(我们称之为wf2)
# wf2.yml
jobs:
call-wf1:
uses: ./.github/workflows/wf1.yml
secrets: inherit
Run Code Online (Sandbox Code Playgroud)
为了将数据从一个工作流程获取到另一个工作流程,请查看https://docs.github.com/en/actions/using-workflows/reusing-workflows#using-outputs-from-a-reusable-workflow。
首先,设置可重用的工作流程来输出数据:
name: Reusable workflow
on:
workflow_call:
# Map the workflow outputs to job outputs
outputs:
firstword:
description: "The first output string"
value: ${{ jobs.example_job.outputs.output1 }}
secondword:
description: "The second output string"
value: ${{ jobs.example_job.outputs.output2 }}
jobs:
example_job:
name: Generate output
runs-on: ubuntu-latest
# Map the job outputs to step outputs
outputs:
output1: ${{ steps.step1.outputs.firstword }}
output2: ${{ steps.step2.outputs.secondword }}
steps:
- id: step1
run: echo "::set-output name=firstword::hello"
- id: step2
run: echo "::set-output name=secondword::world"
Run Code Online (Sandbox Code Playgroud)
现在在调用工作流程中使用它:
name: Call a reusable workflow and use its outputs
on:
workflow_dispatch:
jobs:
job1:
# local repo
# uses: ./.github/workflows/called-workflow.yml@v1
# other repo
uses: octo-org/example-repo/.github/workflows/called-workflow.yml@v1
job2:
runs-on: ubuntu-latest
needs: job1
steps:
- run: echo ${{ needs.job1.outputs.firstword }} ${{ needs.job1.outputs.secondword }}
Run Code Online (Sandbox Code Playgroud)
小智 10
您可以在步骤 2 中尝试以下指令:
needs: step-1-job-name
Run Code Online (Sandbox Code Playgroud)
就在工作名称之后
首先,您在这里混合了术语。根据GitHub Actions 文档,单个 YAML 文件称为工作流(不是操作)并且由jobs组成。作业包含一系列依次执行的步骤(包括操作)。特定的工作流执行称为run。考虑到这一点,让我们来回答问题。
构建工作流完成后如何触发消息工作流?
您可以使用 GitHub API 触发名为repository_dispatch(仅适用于基础分支)或workflow_dispatch. 这可以通过在构建工作流程中使用专用的Repository Dispach操作轻松完成。
是否有可能获得构建工作流程的结果?
是的,可以使用给定的GitHub API获得工作流运行的结果
但是如果您只想发送当前执行的工作流的构建结果通知,则不需要创建单独的工作流并从父级触发它。您可以使用专用的Slack 操作或电子邮件操作。
| 归档时间: |
|
| 查看次数: |
14884 次 |
| 最近记录: |