Mic*_*elB 5 github github-actions
如果我们要使用最少的资源,执行这些步骤将类似于:
setup --- 签出,通过缓存安装固定版本
然后并行触发1个命令运行:
全部并行。
不幸的是,根据我发现的当前选项,我能找到的最佳方案是为 lint、测试、e2e 提供一个单独的工作流程文件,由主工作流程调用,并在成功构建工件后。
这个问题是。
这可以通过缓存来缓解,但是每个作业的这些步骤仍然需要 10-15 秒的额外时间。
有没有办法优化它并仍然保留可重用的步骤?
即使我将所有内容保留在 1 个巨大文件中,我仍然会将 lint、测试、e2e 步骤定义为单独的作业,而不是作业的 1 个单步部分。
我们可以调用“工作流程”并以某种方式在同一环境中运行它吗?
小智 2
此示例调用 checkout 并使用 ${{ github.run_id }} 缓存存储库,以防止缓存与其他运行发生冲突。然后,子工作流程将使用缓存来代替签出。e2e、test 和 lint 将等待创建缓存,然后并行运行。
根据您的用例,为每个 run_id 创建新的缓存可能会过多,您可以根据需要进行调整。如果您追求的是速度,我还建议仅缓存子工作流程所需的文件,而不是像我在下面的示例中所做的那样采取一切。
name: main_caller
on: workflow_dispatch
jobs:
cache_checkout:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/upload-artifact@v3
with:
name: my-checkout-${{ github.run_id }}
path: ${{ github.workspace }}/**/*
run_lint:
needs: cache_checkout
uses: ./.github/workflows/lint.yml
run_test:
needs: cache_checkout
uses: ./.github/workflows/test.yml
Run Code Online (Sandbox Code Playgroud)
./.github/workflows/lint.yml 示例:(e2e 和测试将遵循此模式)
name: lint
on: workflow_call
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Get Cached Checkout
uses: actions/download-artifact@v3
with:
name: my-checkout-${{ github.run_id }}
- name: Do linting things
run: echo "I'm linting!"
Run Code Online (Sandbox Code Playgroud)