使用 GitHub Actions 和 Testing Farm 测试 GitHub 项目

GitHub 上的每一个项目都是为了 红帽企业 Linux (RHEL), Fedora Linux、CentOS 7、CentOS Stream 8 和 CentOS Stream 9 在将其更改同步到 Git 分发存储库 (dist-git) 之前应该进行测试。 在向客户交付软件之前发现问题并帮助质量保证团队发现错误非常重要。 我们应该实施 左移 进入我们的工作流程。

介绍

测试农场 是作为服务提供的开源测试系统。 Testing Farm的思路类似 编译农场,但重点是执行自动化测试。 它的使命是提供可靠和可扩展的服务来执行来自不同用户的自动化测试,例如 Fedora CI、Packit 等。 我们用户的入口点是 基于 HTTP 的 API. Testing Farm 可扩展到许多基础设施,包括私有云和公共云。 使用复合材料 testing-farm-as-a-github-action,目前在 GitHub Marketplace 上可用,可让您有效地测试您的项目。

GitHub Marketplace 和在此处发布操作的优势

GitHub 市场 是一个开发人员可以在一个地方找到所有已发布的 GitHub Actions 等元素的地方。 任何人都有权在 GitHub Marketplace 上发布操作。

一个动作,为了被发布,必须驻留在它自己的 GitHub 存储库中。

除了在公共 GitHub 存储库中发布操作之外,在 Marketplace 上发布操作的优势在于其他用户可以看到书面操作。

测试农场作为 GitHub 操作

测试农场作为一个 github 行动,简称 TFaGA,是一个复合 GitHub 操作,旨在从其他 GitHub 操作中使用。

它的主要目的是安排由发生在 一个 GitHub 存储库 并且,可选地,显示执行测试的结果。

注意:重要的是让经过测试的代码由 授权人, 喜欢 所有者 或者 成员,以避免在测试场基础设施上运行恶意代码。

可以执行任何可以用 TMT 计划描述的测试。 测试环境可以选择 Fedora Linux、CentOS,包括 CentOS Stream 或 RHEL。 我们需要尽快测试我们的软件。

testing-farm-as-github-action 是为谁准备的

TFaGA 可供开发人员或维护人员使用,通常是任何想要测试位于 GitHub 上的存储库的人。 任何想要将软件添加到上述发行版的人都应该保证它提供的是工作软件。 客户喜欢运行良好且经过测试的软件。

动作输入

TFaGA 输入是高度可配置的,但只有两个输入没有默认值,需要用户插入。 这些都是:

  • api_key – 用于测试农场的 API 密钥
  • git_url – 包含 TMT 计划的存储库的 URL

注意:您可以获得 api_key 来自 [email protected]。 了解更多信息 查看入职网站.

最小的 example 使用 TFaGA(在已经签出的存储库上)看起来类似于:

- name: Schedule tests Testing Farm
  uses: sclorg/testing-farm-as-github-action@v1
  with:
      api_key: ${{ secrets.TF_API_KEY }}
      git_url: <URL to a TMT plan>

所有其他输入值都是可选的,并具有预先指定的默认值。

输入分为逻辑组:

  • 测试农场
    • 包含用于配置测试场本身的选项。 可配置项可以是 API 密钥、TF API 的 URL 以及使用的 TF 的范围——公共或私有
  • TMT元数据
    • 包含用于配置 TMT 规范的选项,例如带有 TMT 计划的 Git 存储库的 URL,或用于选择计划的正则表达式。
  • 测试环境
    • 包含用于配置操作系统和体系结构以及运行测试的位置的选项。 支持的 Linux 发行版有 Fedora Linux 和 CentOS,包括 CentOS Stream、RHEL7 和 RHEL8。 此外,可以使用属于该组的选项指定测试执行所需的秘密和环境变量。
  • 测试工件
    • 包含要在测试环境中安装的其他工件的设置。 有关详细信息,请参阅 休息 API 文档.
  • 各种各样的
    • 包含各种杂项选项的设置,例如,完成工作后是否应使用测试结果更新 PR 或应在其中写入什么。

有关输入的更多信息,请参见 自述文件.md.

行动输出

TFaGA 行动提供,作为输出, 请求编号 和一个 请求网址 计划的测试农场请求。 结合 请求网址请求编号 一起,用户获得一个指向日志工件的URL地址。 测试日志和测试结果以文本形式从测试农场收集到这里。

或者,如果触发测试农场操作的事件与拉取请求相关,用户可以启用拉取请求状态更新。 启用此选项可确保测试结果直接在 PR 中以图形形式进行汇总。 一个 example 下图显示了图形输出的一部分。

测试农场作为 GitHub 操作交付的测试状态

如何在您的存储库中使用测试场作为 GitHub 操作?

由于 TFaGA 是一个复合 GitHub 操作,它应该嵌入到其他用户指定的 GitHub 操作中。

通过评论 PR 触发的操作示例

下列 example 演示了如何在 GitHub 项目中使用 TFaGA。 整体 example 可以在 存储库.

注意:检查测试 PR 的内容很重要,这样才能确保测试场基础设施上不会运行恶意代码。 因此,只有存储库的成员和所有者才能运行测试,如 example 以下。

在这个特定的测试 example 将由特定存储库的成员或所有者对 PR 创建的评论触发。 注释必须包含字符串 ‘[test]’.

name: upstream tests at Testing Farm
on:
	issue_comment:
	  types:
Created
jobs:
	build:
	  name: A job run on explicit user request
	  run-ons: ubuntu-20.04

  if: |
    github.event.issue.pull_request
    && contains(github.event.comment.body, '[test]')
    && contains(fromJson('["OWNER", "MEMBER"]'),        github.event.comment.author_association)

克隆存储库并将其签出到适当的拉取请求分支:

- name: Checkout repo
  uses: actions/checkout@v2

下面显示了 GitHub Action 在 Testing Farm 上安排的测试。 这将传递给 testing-farm-as-a-github-action 存储在存储库秘密中的 api_key、TMT 计划的 URL 以及触发测试所需的环境变量。 选择的测试操作系统是CentOS7。

- name: Schedule tests on external Testing Farm
  uses: sclorg/testing-farm-as-github-action@v1
  with:
      api_key: ${{ secrets.TF_API_KEY }}
      git_url: "https://github.com/sclorg/sclorg-testing-farm"
      variables: "REPO_URL=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY;REPO_NAME=$GITHUB_REPOSITORY;PR_NUMBER=${{ github.event.issue.number }};OS=centos7;TEST_NAME=test"
      compose: "CentOS-7"

默认情况下,测试结果直接在拉取请求中显示为状态 使用 GitHub 状态 API.

概括

为什么要在您的项目中使用此 GitHub 操作? 它将消除对测试基础设施环境、编写大量新的 GitHub Action 工作流程以及处理 Pull Request 状态的关注。

使用 TFaGA 时,您只需提供 TMT 测试计划和 API 密钥,即可根据您的需要获得整个测试基础设施。 可用测试环境池由许多处理器架构和 Linux 发行版组成。

您的测试仅由您在配置文件中指定的操作触发。 测试执行的日志和结果以文本形式收集、报告和存储,并且可以选择透明地显示在拉取请求状态中。

您的操作只是从 Testing Farm 团队获取“api_key”并编写一个简单的 GitHub 工作流程以使用我们的 GitHub 操作。

因此,让我们在项目交付给客户之前尽快测试项目更改!