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
- 需要 SSH 连接到 localhost(或使用--docker
的测试容器)而无需密码。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 上的测试。
有关更精细的跳过,请在集成测试 playbook 中使用条件语句,例如
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
选项在将测试名称传递给
ansible-test
时,在其前面加上unstable/
前缀。
Ansible 核心团队的成员将把测试标记为不稳定。GitHub 问题 将被创建以跟踪每个不稳定的测试。
已禁用
始终失败的测试应该标记为 disabled
别名,直到它们可以被修复。
禁用的测试会自动跳过。
有两种方法可以手动运行禁用的测试
对
ansible-test
使用--allow-disabled
选项在将测试名称传递给
ansible-test
时,在其前面加上disabled/
前缀。
Ansible 核心团队的成员将把测试标记为已禁用。GitHub 问题 将被创建以跟踪每个禁用的测试。
不支持
不能在 CI 中运行的测试应该标记为 unsupported
别名。大多数测试可以通过使用模拟器和/或云插件来支持。
但是,如果无法做到这一点,则将测试标记为不支持将阻止它在 CI 中运行。
有两种方法可以手动运行不支持的测试
对
ansible-test
使用--allow-unsupported
选项在将测试名称传递给
ansible-test
时,在其前面加上unsupported/
前缀。
测试的贡献者将把测试标记为不支持。
云
需要访问外部 API 的云服务和其他模块的测试通常需要特殊支持才能在 CI 中进行测试。
这些测试需要一个额外的别名来指示所需的测试插件。
一些可用的别名是
cloud/aws
cloud/azure
cloud/cs
云/DigitalOcean
云/OpenShift
云/vCenter
未测试
每个模块和插件都应该有集成测试,即使测试不能在 CI 中运行。
问题
问题
有关集成测试的问题,请联系 GitHub 上的 @mattclay 或 @gundalow,或者 #ansible-devel
聊天频道(使用 Matrix 在 ansible.im 上或使用 IRC 在 irc.libera.chat 上)。