Github 操作:在单个运行器中运行多个作业或在作业之间共享工作空间

Hau*_*ted 21 github runner github-actions

有什么方法可以在单个运行器中运行多个作业或在作业之间共享 Github 操作工作区?

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

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

  • 有没有办法在构建代码的运行器上运行我的可重用工作流程?
  • 有没有办法可以访问构建代码的工作区(我搜索了其他答案并了解到我可以使用操作uploadcache操作)。是否有其他方法可以完成此任务并在构建运行程序本身上运行可重用工作流程?
  • 通过复合操作而不是使用可重用工作流程可以更好地完成此任务吗?

我有下面的例子。

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

Run Code Online (Sandbox Code Playgroud)

analysis.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

Run Code Online (Sandbox Code Playgroud)

workflow.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

Run Code Online (Sandbox Code Playgroud)

Mig*_*Gil 7

您可以获取第一个作业的运行程序并将其作为输出传递给以下作业。

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:
      ...
Run Code Online (Sandbox Code Playgroud)

此方法仅适用于自定义跑步者。


fre*_*nky 5

不,据我所知,至少目前不可能在工作之间共享工作空间。

  • 有没有办法在构建代码的运行器上运行我的可重用工作流程?

  • 有没有办法可以访问构建代码的工作区(我搜索了其他答案并了解到我可以使用上传操作和缓存操作)。是否有其他方法可以完成此任务并在构建运行程序本身上运行可重用工作流程?

您可以通过使用独特的跑步者标签来强制执行此操作。通过在跑步者上定义唯一标签,您可以在两个作业中引用该跑步者runs-on

  • 通过复合操作而不是使用可重用工作流程可以更好地完成此任务吗?

这更多是基于意见的问题,但无论如何我都会回答。是的,我绝对认为在这种情况下复合操作将是更好的解决方案,特别是因为工作流程buildanalysis工作流程看起来都很简单并且不使用秘密。但是您应该检查文档以了解两者之间的差异,有一些限制。