GitHub Actions:在工作流之间共享/引用作业

11

此处所讨论的,在GitHub Actions中有一种很好的方式可以使用need关键字引用另一个job中的job,例如:

name: Share data between jobs
on: [push]

jobs:
  job_1:
    name: Add 3 and 7
    runs-on: ubuntu-latest
    steps:
        # Steps

  job_2:
    name: Multiply by 9
    needs: job_1
    # The rest of the job

我在文档中找不到答案的问题是:是否有一种方法可以引用/共享其他工作流程中的job?(即,将其放在单独的yml文件中)

我的项目由几个单独的工作流程组成,每个工作流程都需要执行相同的初始step。我正在尝试避免在不同的workflow中复制粘贴相同的步骤。

2个回答

8

目前我认为无法指定工作流之间的依赖关系。这个问题在GitHub社区论坛上有讨论:

如何指定在另一个工作流中运行的作业依赖关系?

What you can do is to use the same workflow file and then use conditions to trigger or not a specific job.

If you want to run a job only when there is a push to master branch you can do it like this:

   deploy:
       if: github.event_name == 'push' && github.ref == 'refs/heads/master'

谢谢!我编辑了你的答案,包括讨论中得票最高的答案,因为我认为在大多数情况下这是一个不错的解决方法。 - Tomasz Bartkowiak

4
看起来你想要重用单个作业在多个工作流之间,以保持你的工作DRY/SPOT(单一真相点),这样你就不必重复自己和引入错误。可以通过重用工作流程来实现。
基本上有一个“caller”工作流,它调用(运行)具有可选输入和输出的“called”工作流。
以下.yml文件使用被调用工作流的相对路径(但可以引用其他具有版本等的repo - 请参阅文档)。
name: Caller for a reusable workflow
on:
  push:
    branches:
      - main
jobs:
  example_job:
    uses: ./.github/workflows/reusable-workflow-example-called.yml
    with:
      BUILD_ENV: "Dev"
    secrets:
      TESTING: ${{ secrets.TESTING }}

上述工作流调用下面的工作流,并可选择传递变量和密码。

name: Called reusable workflow

on:
  workflow_call:
    inputs:
      BUILD_ENV:
        required: true
        type: string
    secrets:
      TESTING:
        required: true

jobs:
  called-workflow:
    name: Blippedy
    runs-on: ubuntu-latest
    steps:
      - id: do-a-thing
        run: |
          echo "${BUILD_ENV} is ${TESTING}!"
          echo $BUILD_ENV
          echo "${{ inputs.BUILD_ENV }} ${{ secrets.TESTING }}"

我使用这个工具来在配置为不同环境的多个工作流程中运行相同的任务(通过newman进行Postman测试)。
另外,如果你想要在作业/工作流程中使用单个步骤,请查看组合操作

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