我最近为我的项目使用了Github Actions进行持续集成。我创建了两个独立的任务:第一个任务检查拉取请求中的代码是否被我们的linter接受,第二个任务检查代码是否通过测试套件。我喜欢这样设置的好处是,Github网页上的拉取请求会显示出两个单独的复选标记:
我现在遇到的问题是,工作流YAML文件中存在一些重复的代码:前3个步骤安装Lua和Luarocks。这不仅麻烦而且浪费CI时间,因为同样的操作运行了两次。有没有办法避免这种情况?使得设置代码只写在一个地方并且在工作流执行时只运行一次?
但我不确定下一步应该怎么做:
- 我应该使用具有共享设置代码的自己的Github Action吗?
- 我应该创建一个已经预先安装了Lua和Luarocks的Docker镜像吗?
- 我应该使用单个任务?如果它们是同一个任务的步骤,那么还能有独立的linter和测试套件复选标记吗?
- 其他什么办法?
以下是我当前工作流程的YAML文件:
name: Github Actions CI
on: [ pull_request ]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: leafo/gh-actions-lua@v8.0.0
- uses: leafo/gh-actions-luarocks@v4.0.0
- run: luarocks install luacheck
- run: ./run-linter.sh
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: leafo/gh-actions-lua@v8.0.0
- uses: leafo/gh-actions-luarocks@v4.0.0
- run: luarocks install busted
- run: ./build-project.sh
- run: ./run-test-suite.sh
我尝试搜索类似的问题,但找不到确切回答我的问题的内容:
- 在 GitHub Actions 工作流中缓存 APT 包:我不能使用此解决方案,因为我没有一种精确指定我正在使用的所有依赖项的所有版本以进行缓存的方法。我也不介意分开运行工作流程不被缓存。我更担心的是代码重复。
- Github actions 如何在作业之间共享工作区 / 构件?:我不想管理将构件上传到独立服务然后再删除它们的过程。
- 如何跨作业重用部分 Github Action 代码:在那个问题中,作业之间唯一的区别是一个变量,所以接受的答案是使用构建矩阵。但我认为构建矩阵在我的情况下不会很好地发挥作用,因为只有安装设置代码是相同的?