我有一个GitHub操作工作流,其中包含一个setup作业:
setup:
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2.4.0
- name: Install .NET
uses: actions/setup-dotnet@v1.8.2
with:
dotnet-version: 6.0.x一旦setup完成,我就为我的目标平台构建:
build:
needs:
- setup
runs-on: windows-latest
strategy:
matrix:
target:
- win-x64
- linux-x64
- linux-arm64
- osx-x64
self-contained:
- self-contained
- framework-dependent
steps:
- name: Checkout Repository
uses: actions/checkout@v2.4.0
- name: Install .NET
uses: actions/setup-dotnet@v1.8.2
with:
dotnet-version: 6.0.x
- name: Build
run: >-
dotnet publish -r ${{matrix.target}} --self-contained ${{
matrix.self-contained == 'self-contained' }} ${{ matrix.self-contained
&& '' || '/p:DisablePatch="--nopatch"' }}在build中,我最终复制了setup完成的工作--8次。有没有办法避免这种情况,也许只需将机器状态从setup复制到build作业中即可?
发布于 2022-03-22 18:31:42
当您运行一个操作(在作业步骤中)时,它将只应用于用于执行作业步骤的运行程序。
根据关于矩阵的Github文档,每个矩阵作业并行运行。因此,它们都需要执行设置,因为每个提供的运行程序都是在没有配置Checkout Repository和Install .NET步骤的情况下启动的。
您不能在Github提供的运行程序之间共享这些设置,因为每个作业都将使用一个新的(和不同的)运行程序。
这意味着您的setup作业不会做任何需要在build作业上进行needs配置的操作,因为它所做的仅仅适用于它本身。
因此,删除needs: setup上的build作业将与您所做的相同。
例如,可以代替使用自托管跑步者和已经安装的dotnet,或者使用码头形象。在这种情况下,您不需要每次都安装dotnet,但是是否值得这样做呢?(因为构建一个码头映像需要更多的时间来完成设置,所以您应该首先评估这一点)。
https://stackoverflow.com/questions/71531414
复制相似问题