我最近将我的项目与github操作连接起来,用于持续集成。我创建了两个独立的作业:第一个检查拉取请求中的代码是否被我们的linter接受,第二个检查代码是否通过测试套件。我喜欢有两个这样的工作在Github网页上显示为两个单独的选中标记,用于拉取请求:
我现在遇到的问题是工作流YAML文件中有一些重复的代码:前3个步骤,安装Lua和Luarock。不仅维护起来很烦人,而且运行两次相同的操作也会浪费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
我试图搜索类似的问题,但找不到任何准确回答我问题的答案:
下面的代码片段应该为您完成这项工作。您可以使用一个作业并创建多个任务,而不是创建两个作业,一个用于lint,另一个用于测试
name: Github Actions CI
on: [ pull_request ]
jobs:
lint:
name: Lint and 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
- name: Install Luacheck
run: luarocks install luacheck
- name: Run Lint Check
- run: ./run-linter.sh
- name: Install Busted
run: luarocks install busted
- name: Build Project
run: ./build-project.sh
- name: Run Test Suite
- run: ./run-test-suite.sh
从今天(2021年8月)开始,复合动作不再局限于run
。GitHub动作:用动作合成减少重复
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
旧答案
您正在寻找的是复合操作,它可以帮助您重用一旦定义的步骤集。
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
章鱼猫/打招呼/行动。yml:
runs:
using: "composite"
steps:
- run: echo "Nice to meet you!"
shell: pwsh
有关更多详细信息,您也可以在此处查看公司的ADR。
为什么不能对所有作业运行一次,因为每个作业可能在不同的机器上运行。
作业是在同一运行程序上执行的一组步骤。默认情况下,具有多个作业的工作流将并行运行这些作业。您还可以配置工作流以按顺序运行作业。例如,工作流可以有两个生成和测试代码的连续作业,其中测试作业取决于生成作业的状态。如果生成作业失败,测试作业将不会运行。
设置容器要使用的卷数组。可以使用卷在服务或作业中的其他步骤之间共享数据。可以在主机上指定命名Docker卷、匿名Docker卷或绑定挂载。 工作流程 第一个作业(build)有一个build目录,但当第二个作业(deploy)运行时,它没有,只包含源代码。 这个项目是一个mono repo,我试图部署的代码位于路径,因此所有标志。
我想设置我的工作流程来执行以下操作: 在任何事件上(拉请求,在任何分支上推送) 结账码 构建项目 运行测试 为其他作业上传工件 从以前的工作下载工件 推送页面 从以前的工作下载工件 创建发行版 将工件上传到发行版 在我的中,指令适用于所有作业,因此在我的情况下不起作用。另一方面,仅在同一工作流中工作。 实现所述工作流程的正确方法是什么?
我在GitHub中有一个包含多个服务的monorepo 我想在两个条件下同时构建它们(使用GitHub操作): 标记-使用标记名称构建图像() 分支main-使用带有缓存的标签构建图像。 我找不到如何创建通用工作流和修改参数(如函数)的方法。 我能想到的唯一解决方案是创建一个复合操作,如下所示: 但现在我遇到了一个问题,需要在两个工作流中指定服务的所有作业,例如: 主要分支机构工作流: 标记分支工
在正常情况下,一个工作流是否会由多个工作流工作人员同时执行?因为多个工作流工作者可以投票决定任务来执行,如果没有,他该怎么做?
问题内容: 我有一个名为“开发”的工作,另一个名为“代码分析”的项目。目前,我们有两个不同的作业和不同的工作区,但是代码相同。有什么办法可以将同一工作空间用于多个作业? 我检查了Jenkins中可用的插件,但是没有找到合适的插件。 问题答案: 假设您的“开发” Jenkins工作空间为。在“代码分析”作业配置页面中,在选项卡下单击并选择选项,并提供与“开发”作业相同的工作空间。
今天早上,我发现了我的GitHub Actions BETA版邀请,并开始玩它,目的是迁移一些我目前在CircleCi上运行的简单构建、测试和部署管道。 我仍然在试图理解操作,但我心目中的流程是,在推动之后,工作流中的第一个操作将启动一个Docker容器。在这个容器中,我将运行一些简单的构建过程,比如最小化资产和移除人工制品。接下来的操作将在构建上运行一些测试。管道中的下一个操作将部署到许多环境中