Github Actions:在单个Runner中运行多个作业或在作业之间共享工作区

17

有没有办法在单个runner中运行多个工作流程或在工作之间共享Github actions的工作空间?

在我的组织中,开发团队使用多个由多个团队创建和管理的可重用工作流程。Team build 创建和管理构建应用程序的build.yaml。我的团队创建和管理执行应用程序构建数据分析并归档构建工件的analysis.yaml

开发团队计划在其应用程序工作流程中同时使用我们两个工作流程。为了使我的工作流程正常工作,我的工作流程需要访问所构建代码的目录(maven构建的target目录,gradle构建的build目录和npm构建的node_modules目录)。

  • 有没有办法在构建代码的runner上运行我的可重用工作流程?
  • 我是否可以访问构建代码所在的工作空间(我搜索了其他答案并学习到可以使用上传动作upload和缓存动作cache)?除此之外,还有其他方法可以实现这一点并在构建runner本身上运行我的可重用工作流程吗?
  • 使用组合动作而不是可重用工作流程是否更好实现此目的?

我有以下例子。

build.yaml

on:
  workflow_call
  inputs:
    build:
      description: Build type
      required: true

jobs:
  Build:
    runs-on: self-hosted
    steps:
      - name: Building apps
      - if: ${{inputs.build=='gradle'}}
        run: |
          gradle build

分析.yaml

on:
  workflow_call
  inputs:
    analysis:
      description: Build type
      required: true
      type: boolean

jobs:
  Build:
    runs-on: self-hosted
    steps:
      - name: Building apps
      - if: ${{inputs.analysis}}
        run: |
          #Run ML build analysis
          #Archive the build artifacts

工作流程.yaml

on:
  push:
    branches: [main]

jobs:
  Build:
    uses: buildteam/.github/workflows/build.yaml@main
    with:
      build: gradle

  Analysis:
    uses: analysis/.github/workflows/analysis.yaml@main
    with:
      analysis: true


我相信工作是有意孤立的。如果你仍然需要这两个进行通讯,最简单的方法可能是使用以下链接上传和下载工件:https://github.com/actions/upload-artifact - rethab
2个回答

5
您可以获取第一个工作的运行者,并将其作为输出传递给后续的工作。
name: main
on: 
  push: { branches: [main] }

jobs:
  get-runner:
    name get a runner to use for this workflow
    if: ${{ always() }}
    runs-on: custom-runner
    outputs:
     RUNNER: ${{ runner.name }}
    steps:
      - run: echo "selected runner = ${{ runner.name }}"

 other-job:
    name: another job
    needs: get-runner
    runs-on: ${{needs.get-runner.outputs.RUNNER}}
    steps:
      ...

这种方法只适用于自定义的运行器。

4
据我所知,目前无法在作业之间共享工作区。
  • 是否有方法可以在构建代码的运行器上运行可重用的工作流程?

  • 是否有方法可以访问构建代码的工作区(我查找了其他答案并学到了可以使用上传操作和缓存操作)?是否有其他方法可以完成此操作并在构建运行器本身上运行可重用的工作流?

您可以通过使用唯一的运行器标签来强制执行。通过在运行器上定义唯一标签,您可以在两个作业中使用runs-on引用该运行器。
  • 与使用可重用工作流相比,组合操作是否更好?

这更多是基于意见的问题,但我仍然会回答。是的,我认为在这种情况下,组合操作肯定是更好的解决方案,特别是因为buildanalysis工作流似乎都很简单,不使用密码。但您应该查看文档以了解这两种方法之间的区别,因为它们存在某些限制。

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