integration-aliases

集成测试由 ansible-test 执行,并驻留在 test/integration/targets/ 下的目录中。每个测试都必须有一个 aliases 文件来控制测试执行。

别名在以下部分中解释。每个别名必须在 aliases 文件中单独一行上。

必须将测试配置为恰好在 一个组中运行。这可以通过将适当的组添加到 aliases 文件中来实现。

以下是一些可用组的示例

  • shippable/posix/group1

  • shippable/windows/group2

  • shippable/azure/group3

  • shippable/aws/group1

  • shippable/cloud/group1

组用于在多个 CI 作业中平衡测试,以最大程度地减少测试运行时间。它们还通过将具有相似要求的测试保持在一起运行来提高效率。

为新测试选择组时,请使用与正在添加的测试类似的现有测试相同的组。如果有多个组可用,请随机选择一个。

设置

别名可用于在运行测试之前执行设置目标

  • setup/once/TARGET - 在需要它的第一个目标之前运行目标 TARGET

  • setup/always/TARGET - 在每个需要它的目标之前运行目标 TARGET

需求

别名可用于表达某些测试需求

  • needs/privileged - 当使用 --docker 运行测试时,需要 --docker-privileged

  • needs/root - 需要以 root 身份运行测试,或者使用 --docker

  • needs/ssh - 需要与本地主机(或使用 --docker 的测试容器)建立无需密码的 SSH 连接。

  • needs/httptester - 需要使用 http-test-container 来运行测试。

依赖项

某些测试依赖项会自动发现

  • meta/main.yml 文件中定义的 Ansible 角色依赖项。

  • 使用 setup/* 别名定义的设置目标。

  • 从一个目标到另一个目标中文件的符号链接。

别名可用于声明未自动处理的依赖项

  • needs/target/TARGET - 需要使用测试目标 TARGET

  • needs/file/PATH - 需要使用相对于 Git 根目录的文件 PATH

跳过

别名可用于使用以下方法之一跳过平台

  • skip/freebsd - 在 FreeBSD 上跳过测试。

  • skip/macos - 在 macOS 上跳过测试。

  • skip/rhel - 在 RHEL 上跳过测试。

  • skip/docker - 在 Docker 容器中运行时跳过测试。

还可以跳过使用 --remote 选项(已删除 /)指定的平台版本

  • skip/freebsd11.1 - 在 FreeBSD 11.1 上跳过测试。

  • skip/rhel7.6 - 在 RHEL 7.6 上跳过测试。

还可以跳过使用 --windows 选项指定的 Windows 版本

  • skip/windows/2016 - 在 Windows Server 2016 上跳过测试。

  • skip/windows/2019 - 在 Windows Server 2019 上跳过测试。

  • skip/windows/2022 - 在 Windows Server 2022 上跳过测试。

别名可用于使用以下方法之一跳过 Python 主版本

  • skip/python2 - 在 Python 2.x 上跳过测试。

  • skip/python3 - 在 Python 3.x 上跳过测试。

要进行更细粒度的跳过,请在集成测试剧本中使用条件,例如

when: ansible_distribution in ('Ubuntu')

杂项

还有其他几个别名可用

  • destructive - 需要 --allow-destructive 才能在没有 --docker--remote 的情况下运行。

  • hidden - 目标将被忽略。可用作依赖项。对于以 setup_prepare_ 为前缀的目标,自动执行。

  • retry/never - 目标被排除在 --retry-on-error 选项启用的重试之外。

  • gather_facts/yes - 在运行目标之前启用收集事实(默认选项)。

  • gather_facts/no - 在运行目标之前禁用收集事实。

不稳定

有时会失败的测试应使用 unstable 别名标记,直到不稳定性得到修复。这些测试将继续运行,以针对修改测试或正在测试的模块的拉取请求。

这避免了针对其他拉取请求的无用测试失败,以及针对合并运行和夜间 CI 作业的测试。

有两种方法可以手动运行不稳定的测试

  • 针对 ansible-test 使用 --allow-unstable 选项

  • 将测试名称加上 unstable/ 前缀,然后将其传递给 ansible-test

Ansible 核心团队成员将标记测试为不稳定。将创建 GitHub 问题 来跟踪每个不稳定的测试。

已禁用

始终失败的测试应使用 disabled 别名标记,直到它们可以修复。

已禁用的测试会自动跳过。

有两种方法可以手动运行已禁用的测试

  • 针对 ansible-test 使用 --allow-disabled 选项

  • 将测试名称加上 disabled/ 前缀,然后将其传递给 ansible-test

Ansible 核心团队成员将标记测试为已禁用。将创建 GitHub 问题 来跟踪每个已禁用的测试。

不支持

无法在 CI 中运行的测试应使用 unsupported 别名标记。大多数测试可以通过使用模拟器和/或云插件来支持。

但是,如果无法做到,则将测试标记为不支持会阻止它在 CI 中运行。

有两种方法可以手动运行不支持的测试

  • 针对 ansible-test 使用 --allow-unsupported 选项

  • 在将测试名称传递给 ansible-test 时,请在测试名称前加上 unsupported/

测试将被测试贡献者标记为不支持。

针对云服务和其他需要访问外部 API 的模块的测试通常需要在 CI 中进行特殊支持。

这些需要额外的别名来指示所需的测试插件。

一些可用的别名是

  • cloud/aws

  • cloud/azure

  • cloud/cs

  • cloud/digitalocean

  • cloud/openshift

  • cloud/vcenter

未测试

每个模块和插件都应该有集成测试,即使这些测试无法在 CI 中运行。

问题

标记为 不稳定已禁用 的测试将创建一个问题来跟踪测试的状态。每个问题将被分配到以下项目之一

问题

有关集成测试的问题,请在 Ansible 论坛 上与社区联系,创建一个带有 ansible-testtesting 和其他适当标签的主题。