gpt4 book ai didi

github-actions - 在github Action 工作流中,是否有办法让多个作业重复使用相同的设置?

转载 作者:行者123 更新时间:2023-12-03 16:09:02 24 4
gpt4 key购买 nike

我最近将我的项目与github操作 Hook ,以进行持续集成。我创建了两个单独的作业:第一个作业检查pull请求中的代码是否被我们的linter接受,第二个作业检查代码是否通过测试套件。我喜欢这样的两项工作,在Github网页中针对拉取请求显示为两个单独的复选标记:
enter image description here
我现在遇到的问题是工作流YAML文件中存在一些复制的代码:前3个步骤,它们安装Lua和Luarocks。维护不仅烦人,而且通过运行两次相同的操作也浪费了CI分钟。有办法避免这种情况吗?以便设置代码只写在一个地方,并且在工作流程执行时只运行一次
但是我感到困惑的是继续进行的正确方式是什么:

  • 我应该使用共享的设置代码创建自己的Github Action吗?
  • 我应该创建一个已经预先安装了Lua和Luarocks的Docker镜像吗?
  • 我应该使用一份工作吗?如果lint和测试套件是同一工作的步骤,我是否仍可以使用它们的独立复选标记?
  • 还有别的吗?

  • 这是我的工作流程的当前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
    我尝试搜索类似的问题,但找不到能完全回答我问题的内容:
  • Caching APT packages in GitHub Actions workflow:我无法使用此解决方案,因为我没有一种方法可以精确地指定我正在使用的所有依赖项的所有版本,以便可以对其进行缓存。我也不介意是否不缓存工作流的单独运行。我更担心代码重复。
  • Github actions share workspace/artifacts between jobs?我不需要管理将上传工件上传到单独的服务,然后再将其删除。
  • Reuse portion of github action across jobs:在该问题中,作业之间的唯一区别是单个变量,因此可以接受的答案是使用构建矩阵。但是我认为构建矩阵在仅设置代码相同的情况下不能很好地工作吗?
  • 最佳答案

    您正在寻找的是composite action,它可以帮助您重新使用定义好的步骤集。

    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
    octocat/say-hello/action.yml:
    runs:
    using: "composite"
    steps:
    - uses: actions/checkout@v2 # to my understanding you can't use "uses" in steps of an action because an action can't encapsulate another action, but only run-s
    - uses: leafo/gh-actions-lua@v8.0.0
    - uses: leafo/gh-actions-luarocks@v4.0.0
    有关更多详细信息,您还可以检查ADR here
    以及为什么不能简单地对所有作业运行一次,因为每个作业可能在不同的计算机上运行。

    A job is a set of steps that execute on the same runner. By default, a workflow with multiple jobs will run those jobs in parallel. You can also configure a workflow to run jobs sequentially. For example, a workflow can have two sequential jobs that build and test code, where the test job is dependent on the status of the build job. If the build job fails, the test job will not run.

    关于github-actions - 在github Action 工作流中,是否有办法让多个作业重复使用相同的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65242830/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com