如何使用GitHub Actions从另一个工作流触发工作流程?

6
我想从文件中读取版本号,并使用工作流创建标签v11.0.5.1.aws。然后,我想在Docker镜像中使用该标签。 为此,我已经创建了一个名为devops的分支。
首先创建了一个VERSION文件。
1.1.3 20 Apr, 2022

创建了一个名为release-version.yml的工作流程。
name: Release Version
on:
  push:
    branches:
      - devops
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Bump version and push tag
    uses: melheffe/version_release_composer@master
    env:
      PREPEND: 'v'
      APPEND: '.aws' # must include '.' or it will append without separation
      DRAFT: 'false'
      PRERELEASE: 'true'
      TOKEN: ${{ secrets.AUTH_TOKEN }}
      TRIGGER: ${{ github.event.pull_request.base.ref }} # can use the triggering branch or define a     fixed one like this: 'master'
      REPO_OWNER: rohit
      VERSION_FILE_NAME: 'VERSION'

然后创建了另一个名为ci.yml的工作流程,该工作流程将从release-version工作流程获取标签

name: CI

# Only trigger, when the build workflow succeeded
on:
  workflow_run:
    workflows: ["Release Version"]
    types:
      - completed

jobs:
  # This workflow contains a single job called "build"
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

  DeployDev:
    # Steps represent a sequence of tasks that will be executed as part of the job
    name: Deploy to Dev
    needs: [Build]
    runs-on: ubuntu-latest
    environment:
      name: Dev

    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.AUTH_TOKEN }}

      - name: Build, tag, and push image to Amazon ECR
        id: build-image
        #env:
        #  IMAGE_TAG: ${{ github.sha }}
        run: |
          # Build a docker container and push it to ECR so that it can
          # be deployed to ECS.
          echo "$GITHUB_REF_NAME"
          docker build -t ${{secrets.ECR_REPO_URI}}/${{secrets.REPO_NAME}}:$GITHUB_REF_NAME .
          docker push ${{secrets.ECR_REPO_URI}}/${{secrets.REPO_NAME}}:$GITHUB_REF_NAME
          

我能够在devops分支上进行更改后触发发布版本工作流程,但是在触发发布版本后ci工作流程没有被触发。 任何建议对我都有帮助。


你的意思是 workflow_run 触发器没有按预期工作吗? - GuiFalourd
是的,workflow_run没有按照我的预期工作,它应该触发CI工作流程。 - ROHIT BANSAL
你的工作流程没有任何语法问题,所以我认为第二个工作流程无法被触发的唯一原因是,第一个工作流程还没有完成。但这很奇怪。我能想到的另一个选项是,在第一个工作流程中使用 workflow_dispatchrepository_dispatch 事件来触发第二个工作流程,并将 TAG 版本作为输入发送。这是一个选择吗?如果您愿意,我可以分享关于这两个选项的完整答案和一些参考资料。 - GuiFalourd
正如GuiFalourd所提到的,我会在初始工作流程中添加另一个步骤“Dispatch CI”。在“CI”工作流程中,我会添加workflow_dispatch,并提供相关输入。如果您打算使用Bash来调度工作流程,这是我所做的方式-https://github.com/unfor19/hero-action/blob/87eebe6c644fb03f294d70e2e76a98d757d900e3/entrypoint.sh#L117-L147 - Meir Gabay
@GuiFalourd 我的第一个工作流已经完成,但是无法启动第二个。您可以分享完整的答案,这对我会很有帮助。 - ROHIT BANSAL
显示剩余3条评论
1个回答

5
如果 workflow_run 触发器未按预期工作,则有两种其他方法可以实现您想要的效果(从另一个工作流触发工作流,从第一个工作流发送输入参数以在第二个工作流中使用). 文档非常好地介绍了如何使用它们,但是我在此处添加一些也可以帮助的参考: 如您所见,您可以直接在步骤中使用Github API(使用CURL请求)或使用Github Marketplace中执行相同操作的一些操作触发这些事件。
下面的答案还解释了两个事件之间的区别(因为它们非常相似,CURL有效负载差异可能会令人困惑): 我还将在此处添加一个示例,可帮助您了解如何使用 repository_dispatch 事件从第二个工作流接收回调到第一个工作流: 请注意,您还需要使用PAT来使用分派事件触发工作流。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接