【案例】github actions不同yml复用job,减少费用和重复配置
【案例】github actions不同yml复用job,减少费用和重复配置
使用github actions已经有些年头了,虽然并不一定会用到什么高深的用法,但是每天都有稳定的使用量。自从知道github actions使用运行时长限制的,比如免费用户是2000分钟,付费用户可以达到3000分钟,企业用户可以达到50000分钟。

背景
同一个账号或者组织的所有项目共享这个运行分钟数的额度,当时为了避免问题,还特意新建了几个组织分散项目。可是随着项目的使用频率提升,终究这2000分钟的额度不够用了,于是对账号进行了升级。因为一个组织下有多个账号,升级组织时,旗下的每个账号都会升级,每个账号4美元/月,此时账号多了反而花费更高,所以无奈只有把其它用处不大的账号从组织里面移除了。
当时新建组织以及小号的原因是希望查看github workflow时方便看到各个触发来源使用量!!!

为了降低升级费用,这个办法不适用了,还是得回归到使用一个账号触发了,这样又无法区分各个触发来源使用量了。
案例实战
既然无法通知触发账号来区分各个触发来源使用量,那就相同的功能使用不同的yml文件名来区分吧。 也就原来用账号A运行workflow.yml,账号B运行workflow.yml,改成账号A运行workflow.yml,账号A运行workflow_B.yml,其中workflow_B.yml和workflow.yml内容一模一样
如果只有一两个workflow_B.yml还好,如果有N个,全部复制粘贴改名,后期维护也会比较麻烦,能否提取出公共的的部分呢,比如job_common.yml,然后新建workflow_A.yml,workflow_B.yml... workflow_N.yml,后期有功能变化只用更改job_common.yml即可。
重点是在yml里面声明workflow_call表示它可以被重用
name: workflow_common
on:
workflow_call: # 声明为可重用
# 声明期望接收的 inputs
inputs:
input_a:
description: 'input_a description'
required: true
default: 'input_a'
type: string
input_b:
description: 'input_b description'
required: true
default: 'input_b'
type: string
jobs:
job_common:
runs-on: ubuntu-24.04
...其它配置此处略过
那workflow_A.yml怎么调用这个workflow_common.yml呢
name: workflow_common
on:
workflow_dispatch:
inputs:
input_a:
description: 'input_a description'
required: true
default: 'input_a'
type: string
input_b:
description: 'input_b description'
required: true
default: 'input_b'
type: string
jobs:
job_a:
uses: ./.github/workflows/workflow_common.yml
with: # 每个yml的inputs相互独立,所以这里需要在写一遍,将workflow_A.yml的inputs选择性的透传到workflow_common.yml
input_a:
description: 'input_a description'
required: true
default: 'input_a'
type: string

这里可以藏在job_a后面的大功臣job_common了。
结论
- github actions支持跨yml进行job复用这个功能还是很方便的,满足了我的需求
- 目前workflow_common.yml的job只有一个(即job_common),如果有多个,并且我只想执行里面的某一个呢?自己没试过,是不是有点为难github actions了😅
- 分类:
- Devops
相关文章
通过github actions将佳明数据同步高驰平台脚本(支持国际区与国区)
最近发现了一个能将佳明数据同步高驰平台github脚本(支持国际区与国区) github地址 https://github.com/XiaoSiHwang/garmin-sync-coros 阅读更多…
githubaction提示The `set-output` command is deprecated and will be disabled soon怎么解决
这是github官方的改动,github actions不再推荐使用过时的写法 过时的写法 - name: Save state run: echo "::save-st 阅读更多…
github actions/checkout@v4 清空当前文件(Deleting the contents of xxx)怎么办
我们在使用github actions时几乎都会用到actions/checkout@v4,它的主要目的是把我们github项目的源代码给拉下来,它在拉代码之前会先把目标文件夹给清空了,但是有时我们 阅读更多…
web新开窗口场景降低加载耗时实战
背景 在PC端web项目中经常会出现要开新窗口打开某个页面的场景,一般来说这个新窗口(窗口B)很可能跟之前的窗口(窗口A)功能基本一致,只不过之前的窗口A打开的是a页面,新窗口B打开的B页面,其 阅读更多…
通过github actions实现佳明数据与高驰运动记录双向同步
之前分享过一个 《通过github actions将佳明数据同步高驰平台脚本(支持国际区与国区)》 ,fork了里面的github项目,经过测试后发现确实可以将佳明的运动记录定时同步到高驰呢,可是不 阅读更多…
Github actions如何让某个step自动重试
最近有个github action项目中的某个步骤step需要执行下载文件,但是近期开始出现下载超时的情况,并且还有点频繁。自己除了找服务器的原因以外,还想通过优化github actions来尽量 阅读更多…
