我最近将我的项目与 github 操作连接起来以进行持续集成。我创建了两个单独的作业:第一个检查拉取请求中的代码是否被我们的 linter 接受,第二个检查代码是否通过了测试套件。我喜欢这样的两个工作在 Github 网页中显示为拉取请求的两个单独的复选标记:
我现在遇到的问题是工作流 YAML 文件中有一些重复的代码:前 3 个步骤,安装 Lua 和 Luarocks。不仅维护起来很烦人,而且两次运行相同的操作也会浪费 CI 分钟。有没有办法避免这种情况?这样设置代码只写在一个地方,并且只在工作流执行时运行一次?
但我很困惑什么是正确的方法:
这是我的工作流程的当前 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
Run Code Online (Sandbox Code Playgroud)
我尝试搜索类似的问题,但找不到完全回答我的问题的任何内容:
Krz*_*tof 19
截至今天(2021 年 8 月),复合动作不再限于run. GitHub Actions:通过动作组合减少重复
name: "Publish to Docker"
description: "Pushes built artifacts to Docker"
inputs:
registry_username:
description: “Username for image registry”
required: true
registry_password:
description: “Password for image registry”
required: true
runs:
using: "composite"
steps:
- uses: docker/setup-buildx-action@v1
- uses: docker/login-action@v1
with:
username: ${{inputs.registry_username}}
password: ${{inputs.registry_password}}
- uses: docker/build-push-action@v2
with:
context: .
push: true
tags: user/app:latest
Run Code Online (Sandbox Code Playgroud)
旧答案
您正在寻找的是复合操作,它可以帮助您重用已定义的一组步骤。
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: octocat/say-hello@v1
- run: luarocks install luacheck
- run: ./run-linter.sh
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: octocat/say-hello@v1
- run: luarocks install busted
- run: ./build-project.sh
- run: ./run-test-suite.sh
Run Code Online (Sandbox Code Playgroud)
octocat/say-hello/action.yml:
runs:
using: "composite"
steps:
- run: echo "Nice to meet you!"
shell: pwsh
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,您还可以在此处查看 ADR 。
以及为什么你不能简单地为所有作业运行一次,因为每个作业可能在不同的机器上运行。
作业是在同一个运行器上执行的一组步骤。默认情况下,具有多个作业的工作流将并行运行这些作业。您还可以配置工作流以按顺序运行作业。例如,一个工作流可以有两个顺序作业来构建和测试代码,其中测试作业取决于构建作业的状态。如果构建作业失败,则测试作业将不会运行。
| 归档时间: |
|
| 查看次数: |
9063 次 |
| 最近记录: |