我在monorepo中有一个CI的工作流,对于这个工作流,有两个项目最终被构建。作业运行得很好,但是我想知道是否有一种方法可以通过设置作业的运行器来消除这个workflow.yml文件中的重复项。我将它们分开,这样它们就可以并行运行,因为它们彼此不依赖,完成起来也更快。与等待CI完成时的10+相比,这在5分钟内有很大的时间差。
jobs:
job1:
name: PT.W Build
runs-on: macos-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v1
- name: Setup SSH-Agent
uses: webfactory/ssh-agent@v0.2.0
with:
ssh-private-key: |
${{ secrets.SSH_PRIVATE_KEY }}
- name: Setup JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Setup Permobil-Client
run: |
echo no | npm i -g nativescript
tns usage-reporting disable
tns error-reporting disable
npm run setup.all
- name: Build PT.W Android
run: |
cd apps/wear/pushtracker
tns build android --env.uglify
job2:
name: SD.W Build
runs-on: macos-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v1
- name: Setup SSH-Agent
uses: webfactory/ssh-agent@v0.2.0
with:
ssh-private-key: |
${{ secrets.SSH_PRIVATE_KEY }}
- name: Setup JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Setup Permobil-Client
run: |
echo no | npm i -g nativescript
tns usage-reporting disable
tns error-reporting disable
npm run setup.all
- name: Build SD.W Android
run: |
cd apps/wear/smartdrive
tns build android --env.uglify你可以在这里看到,这些作业几乎有一个相同的过程,只是构建不同的应用程序本身。我想知道是否有一种方法可以在作业中获取重复的块,并创建一种只写入一次的方法,然后在两个作业中重用它。
发布于 2020-04-29 03:15:22
据我所知,目前还没有重用步骤的方法
但在这种情况下,您可以使用strategy进行并行构建和不同的变体:
jobs:
build:
name: Build
runs-on: macos-latest
strategy:
matrix:
build-dir: ['apps/wear/pushtracker', 'apps/wear/smartdrive']
steps:
- name: Checkout Repo
uses: actions/checkout@v1
- name: Setup SSH-Agent
uses: webfactory/ssh-agent@v0.2.0
with:
ssh-private-key: |
${{ secrets.SSH_PRIVATE_KEY }}
- name: Setup JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Setup Permobil-Client
run: |
echo no | npm i -g nativescript
tns usage-reporting disable
tns error-reporting disable
npm run setup.all
- name: Build Android
run: |
cd ${{ matrix.build-dir }}
tns build android --env.uglify如需更多信息,请访问网址:https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstrategy。
发布于 2021-11-30 12:04:58
自2021年10月以来,"“
可重用工作流现在已普遍可用。
可重用工作流使您能够像重用操作一样重用整个工作流,从而帮助您减少重复。自10月份发布测试版以来,已经进行了许多改进:
更多信息请参见"Reusing workflows“。

使用另一个工作流的工作流称为"caller“workflow。
可重用的工作流是一个“称为”工作流的。
一个调用者工作流可以使用多个被调用的工作流。
每个被调用的工作流在一行中被引用。
结果是,调用者工作流文件可能只包含几行YAML,但在运行时可能会执行大量任务。重用工作流时,将使用整个调用的工作流,就像它是调用者工作流的一部分一样。
示例:
在可重用工作流中,使用
inputs和secrets关键字来定义将从调用者工作流传递的输入或机密。
# .github/actions/my-action.yml
# Note the special trigger 'on: workflow_call:'
on:
workflow_call:
inputs:
username:
required: true
type: string
secrets:
envPAT:
required: true引用可重用工作流中的输入或密码。
jobs:
reusable_workflow_job:
runs-on: ubuntu-latest
environment: production
steps:
- uses: ./.github/actions/my-action
with:
username: ${{ inputs.username }}
token: ${{ secrets.envPAT }}使用./.github/actions/my-action表示您自己的存储库中的my-action.yml文件的名称。
可重用工作流不必位于同一存储库中,也可以位于另一个公共存储库中。
在"Avoid Duplication! GitHub Actions Reusable Workflows“中说明了这一点,其中:
发布于 2021-01-13 16:58:04
按照this answer中的建议,使用composite actions重用步骤。
https://stackoverflow.com/questions/59757355
复制相似问题