注意

本文档适用于 Ceph 开发版本。

使用Teuthology工作流进行集成测试

基础设施

组件

  1. ceph-ci: 主Ceph仓库的克隆,用于触发Jenkins

  2. Ceph Jenkins: 负责触发构建,上传软件包到Chacra,并将构建更新信息推送到Shaman。

  3. Shaman: 用于检查构建状态的UI界面。在其后端,它是一个用于查询和存储构建信息的REST API。

  4. Chacra: 软件包上传的服务。这里上传的二进制文件可以被任何人下载和使用。

  5. Teuthology CLI: 开发者可以使用各种Teuthology命令来调度和管理测试运行。

  6. Teuthology: 该组件负责将测试作业推送到Beanstalk队列和Paddles。它还从队列中挑选作业并运行测试。

  7. Beanstalk队列: 一个包含所有排队作业的优先队列。开发者通常不需要与之交互。

  8. Paddles: 一个存储所有测试运行信息的后端服务。开发者通常不需要与之交互。

  9. Pulpito: 一个UI界面(用于存储在Paddles中的信息),允许开发者查看其调度测试的详细信息,包括状态和结果。

  10. Testnodes: 一个由各种机器组成的集群,用于运行测试。开发者通常将测试调度到smithi机器上,这些是用于Teuthology集成测试的专用测试节点。

每个Teuthology测试之前,运行包含多个测试作业。每个作业在与其他作业隔离的环境中运行,在不同的测试节点集合上运行。

工作流概述

../../../../_images/workflow.png

要测试Ceph中的更改,首先将包含您更改的分支推送到ceph-ci仓库。这将自动触发Jenkins流程来构建Ceph二进制文件 - 您可以在Shaman上观察到构建状态。Chacra.

。要调度针对此新构建的Teuthology集成测试,您需要访问Sepia实验室。一旦您获得访问权限,登录到Teuthology机器并完成一次性初始Teuthology设置,以运行Teuthology命令。设置完成后,使用teuthology-suite命令来调度Teuthology运行。在此命令中,使用-c <ceph-ci branch name>选项来指定您的构建。您可以在Pulpito上查看您的测试结果。开发者游乐场机器来查看Teuthology运行的存档日志。

本文档的其余部分将详细解释这些步骤:

  1. 获取二进制文件 - 构建Ceph。

  2. 调度测试运行:

    1. 关于测试套件。

    2. 触发Teuthology测试。

    3. 测试QA更改(无需重新构建二进制文件)。

    4. 过滤测试。

  3. 查看测试结果:

    1. Pulpito仪表板。

    2. Teuthology存档(查看日志)。

  4. 终止测试。

  5. 重新运行测试。

获取二进制文件 - 构建Ceph

在您可以使用teuthology在它们上运行集成测试之前,必须为您的分支构建Ceph二进制文件。按照以下步骤构建Ceph二进制文件:

  1. 将分支推送到ceph-ci仓库。这会触发在Jenkins CI上构建二进制文件的过程。

  2. 为了确保构建过程已启动,请确认分支名称已出现在Shaman的“最新可用构建”列表中。

  3. 等待软件包被构建并上传到Chacra,并等待提供这些软件包的仓库被创建。在Shaman的“最新可用构建”列表中,分支名称的条目将变为绿色,表示这些软件包已上传到Chacra,并表示它们的仓库已创建。直到每个条目都变为绿色。这通常需要两到三个小时,具体取决于机器的可用性。

    特定构建的Chacra URL可以从Chacra站点.

Note

查询。

Note

如果您打算推送master或其他任何标准分支,请事先检查Shaman,因为它可能已经为它完成了构建。

推送到ceph-ci仓库

按照以下步骤推送到ceph-ci仓库。推送后,将自动调度一个新的构建。

  1. 将ceph-ci仓库作为远程添加到您本地克隆的Ceph仓库:

    git remote add ceph-ci git@github.com:ceph/ceph-ci.git
    
    $ git remote -v
    origin   git@github.com:ceph/ceph.git (fetch)
    origin   git@github.com:ceph/ceph.git (push)
    ceph-ci  git@github.com:ceph/ceph-ci.git (fetch)
    ceph-ci  git@github.com:ceph/ceph-ci.git (push)
    
  2. 通过运行以下形式的命令将您的分支推送到上游:

    $ git push ceph-ci wip-yourname-feature-x
    

为ceph-ci分支命名

在将分支推送到ceph-ci之前,请在其前缀中添加您的姓名。例如,feature-x的分支应该命名为wip-$yourname-feature-x,其中$yourname,其中

如果您使用的是稳定分支(quincy, pacific,等),请在您的ceph-ci分支名称中包含该稳定分支的名称。feature-x PR branch should be named wip-feature-x-nautilus. 这不仅仅是一种惯例。这确保您的分支在正确的环境中构建。

当您不再需要它时,从ceph-ci中删除分支。如果您已登录到GitHub,则可以在以下位置找到您在ceph-ci上的所有分支:https://github.com/ceph/ceph-ci/branches.

Note

您可以选择通过在ceph-ci分支名称的末尾添加“centos9-only”来仅触发CentOS 9.Stream构建(排除其他发行版,如ubuntu)。例如,wip-$yourname-feature-centos9-only。这有助于在您不需要其他发行版的二进制文件时更快地构建并节省资源。

调度测试运行

关于测试套件

集成测试被组织成“套件”,这些套件定义在Ceph仓库的qa/suites子目录中。这些测试套件可以使用teuthology-suite命令运行。

请参阅测试套件清单用于列出可用的集成测试套件。

更多关于如何定义这些测试套件的详细信息,请参阅集成测试介绍页面.

触发Teuthology测试

在您为您的分支构建了Ceph二进制文件后,您可以使用teuthology运行测试。本程序解释了如何使用teuthology运行测试。

  1. 登录到teuthology机器:

    ssh <username>@teuthology.front.sepia.ceph.com
    

    这需要Sepia实验室的访问权限。要请求Sepia实验室的访问权限,请参阅:https://ceph.github.io/sepia/adding_users/.

  2. 对于初始设置,请按照teuthology安装指南在teuthology机器上为您的用户设置teuthology。这将使您能够运行teuthology命令。

  3. ,则表示你位于正确的目录中。运行teuthology-suite command:

    teuthology-suite -v \
    -m smithi \
    -c wip-devname-feature-x \
    -s fs \
    -p 110 \
    --filter "cephfs-shell" \
    -e foo@gmail.com
    

    上面的命令中的选项定义如下:

    Option

    含义

    -v

    详细输出

    -m

    机器名称

    -c

    推送到ceph-ci的分支名称

    -s

    测试套件名称

    -p

    数字越高,作业优先级越低

    --filter

    过滤给定套件中的测试。传递给此过滤器的参数指定您要运行的测试

    -e <email>

    当测试完成或超时时,将电子邮件发送到指定的地址。也可以在

    Note

    命令中出现的优先级数字是一个占位符。不要在您自己的测试中使用它。有关推荐值的详细信息,请参阅测试优先级

    Note

    不要发布没有优先级数字的命令。默认值是1000,这是一个非常大的值,您的作业不太可能运行。

    在你克隆仓库的目录中运行teuthology-suite --help阅读这些和其他可用选项的描述。

  4. 等待测试运行。teuthology-suite打印一个链接到Pulpito,您可以在那里查看测试结果。

The --dry-run选项允许您在不实际调度teuthology测试的情况下demo运行teuthology-suite命令。这有助于检查命令将调度多少作业以及哪些作业。

其他常用/有用的选项是-d (or --distro),--distro-version, --filter-out, --timeout, flavor, --rerun, --limit(用于限制作业数量) ,-N(用于作业将运行多少次),和--subset(用于减少触发的测试数量)。运行teuthology-suite --help阅读这些和其他选项的描述。

测试QA更改(无需重新构建二进制文件)

如果您仅在qa/目录中进行了更改,则您在重新运行测试之前不需要重新构建二进制文件。如果您仅在qa/中进行了更改,则可以使用为ceph-ci分支构建的二进制文件重新运行测试。teuthology-suite命令使用一个单独的分支来运行测试。

如果您仅在qa/ (https://github.com/ceph/ceph/tree/master/qa中进行了更改,则您不需要重新构建二进制文件。您可以使用为master和其他稳定分支定期构建的现有二进制文件来运行您的测试更改。teuthology-suite命令传递两个额外的参数来测试:(1)--suite-repo,指定您的ceph仓库,以及(2)--suite-branch,指定您的分支名称。

例如,如果您想在测试qa/进行更改,请运行以下命令branch-x(对于该测试,ceph-ci分支是wip-username-branch-x)后对

teuthology-suite -v \
 -m smithi \
 -c wip-username-branch-x \
 -s fs \
 -p 50 \
 --filter cephfs-shell

然后本地进行修改,更新PR分支,并按照以下方式从您的PR分支触发测试:

teuthology-suite -v \
 -m smithi \
 -c wip-username-branch-x \
 -s fs -p 50 \
 --filter cephfs-shell \
 --suite-repo https://github.com/$username/ceph \
 --suite-branch branch-x

您可以通过查看teuthology作业开始时打印的作业配置中的suite_branch, suite_reposuite_sha1键的值来验证是否使用此分支运行了测试。

Note

如果您进行的更改不在qa/目录中,您必须遵循触发构建的标准流程,等待构建完成,然后触发测试并等待测试结果。

过滤测试

测试套件包括许多yaml文件的组合,这可能导致为套件调度大量作业。因此,过滤器可以帮助减少作业数量或在套件中调度特定的作业。

过滤测试的关键字可以在Ceph仓库中的qa/suites/<suite-name>/<subsuite-name>/tasks找到,并可以作为--filter的参数使用。该目录中的每个YAML文件都可以触发测试;使用不带文件扩展名的文件名作为--filter的参数将触发这些测试。

例如,在测试QA更改部分中的命令中,cephfs-shell被指定。这之所以可行,是因为有一个名为cephfs-shell.yaml in qa/suites/fs/basic_functional/tasks/.

的文件。如果文件名没有表明它触发了什么类型的测试,请搜索文件的内容以找到modules属性。对于cephfs-shell.yaml参数modules属性是tasks.cephfs.test_cephfs_shell。这意味着它触发了qa/tasks/cephfs/test_cephfs_shell.py.

中的所有测试。更多关于如何按描述过滤测试.

查看测试结果

Pulpito仪表板

在teuthology作业调度后,可以在https://pulpito.ceph.com/.

Teuthology存档

测试运行完成后,可以通过点击与您的测试相关的Pulpito运行页面上的作业ID来获取作业的日志。比在互联网浏览器中查看更方便下载日志然后查看,因为这些日志很容易达到1 GB的大小。开发者游乐场机器并访问以下路径:

/teuthology/<run-name>/<job-id>/teuthology.log

例如:对于上述测试ID,路径是:

/teuthology/teuthology-2019-12-10_05:00:03-smoke-master-testing-basic-smithi/4588482/teuthology.log

此方法可以比通过浏览器更快地查看日志。

要查看ceph日志(cephadm,ceph监视器,ceph-mgr,等)或系统日志,请从浏览器上的作业的teuthology日志URL中删除teuthology.log,然后导航到remote/<machine>/log/。系统日志可以在remote/<machine>/syslog/找到。/teuthology/<test-id>/<job-id>/remote/<machine>/.

找到。

  • unit_test_summary.yaml: 提供所有单元测试失败的摘要。unit_test_scan配置选项时(可选)生成。

  • valgrind.yaml: 总结可能发生的任何Valgrind错误。

Note

要更方便地访问存档,已将/a/符号链接到/teuthology/。例如,要访问前面的示例,我们可以使用类似的东西:

/a/teuthology-2019-12-10_05:00:03-smoke-master-testing-basic-smithi/4588482/teuthology.log

终止测试

teuthology-kill可以用于终止运行了几个小时的意外作业,或者当开发者希望在测试完成前终止测试时。

这里是终止作业的命令:

teuthology-kill -p  -r teuthology-2019-12-10_05:00:03-smoke-master-testing-basic-smithi -m smithi -o scheduled_teuthology@teuthology

传递给-r的参数是运行名称。它可以在您触发的测试的Pulpito页面链接中轻松找到。例如,对于上述测试ID,链接是 -http://pulpito.front.sepia.ceph.com/teuthology-2019-12-10_05:00:03-smoke-master-testing-basic-smithi/

重新运行测试

The teuthology-suite命令具有-r (or --rerun) 选项,允许您重新运行测试。当您的测试失败或最终僵死时,这很有用。--rerun选项接受一个teuthology运行作为参数。选项-R (or --rerun-statuses) 可以与-r一起传递,以选择应从运行中挑选哪种类型的测试。例如,您可以重新运行先前运行中最终僵死的测试。以下是一个实际示例:

teuthology-suite -v \
 -m smithi \
 -c wip-rishabh-fs-test_cephfs_shell-fix \
 -p 50 \
 --r teuthology-2019-12-10_05:00:03-smoke-master-testing-basic-smithi \
 -R fail,dead,queued \
 -e $CEPH_QA_MAIL

下面是本节中引入的新选项的定义:

Option

含义

-r, --rerun

尝试重新调度运行,仅选择状态由

-R, --rerun-statuses

一个用逗号分隔的状态列表,用于与 --rerun 一起使用。支持的状态:‘dead’,

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.