合作伙伴归因

合作伙伴重新打包 相比,归因构建与正常的 Firefox 构建的唯一区别是在虚拟 Windows 签名证书中添加了一个字符串。我们支持对完整安装程序执行此操作,但不支持存根。字符串的参数被传递到遥测系统,将安装标记到用户组中。这是一个更轻量级的过程,因为我们不会重新打包或重新签名构建。

参数 & 调度

合作伙伴归因使用多个参数来控制其工作方式

  • release_enable_partner_attribution

  • release_partner_config

  • release_partner_build_number

  • release_partners

启用参数是一个布尔值,一个简单的开关。我们在 shipit 的 is_partner_enabled() 中设置它,以启动发布。对于 Firefox 测试版 >= b8 和正式版本,它为真,否则为假,与合作伙伴重新打包相同。

release_partner_config 是一个配置数据字典,它驱动任务生成逻辑。它通常在发布升级操作任务期间查找,使用 get_partner_config_by_url() 函数中的 Github GraphQL API,网址定义在 taskcluster/config.yml 中。

release_partner_build_number 是一个整数,用于在 firefox candidates 目录中创建唯一的上传路径,而 release_partners 是一个应归因的合作伙伴列表(即整个配置的一个子集)。两者都旨在在常规 Firefox 发布后重新旋转合作伙伴时使用。更多信息可以在 RelEng 文档 中找到。

release_partners 与合作伙伴重新打包共享,但我们不支持同时执行两者。

配置

这是使用 attribution_config.yml 文件完成的,该文件接下来位于用于合作伙伴重新打包的 default.xml 旁边。每个合作伙伴都没有存储库,整个配置都存在于一个文件中,因为要跟踪的信息量要小得多。

一个示例配置如下所示

defaults:
    medium: distribution
    source: mozilla
configs:
    -   campaign: sample
        content: sample-001
        locales:
        - en-US
        - de
        - ru
        platforms:
        - win64-shippable
        - win32-shippable

四个主要参数是 medium, source, campaign, content,其中前两个对所有归因都是通用的。 campaigncontent 的组合应是唯一的,以避免遥测数据中的混淆。它们对应于合作伙伴重新打包中的存储库名称和子目录,因此避免合作伙伴重新打包和归因中的值之间出现任何重叠。还可以指定 variationexperiment 的可选参数。

非空语言环境和平台列表是必需的参数(注意,应在平台上使用 -shippable 后缀)。

Firefox 安装程序被上传到 candidates 目录

重新打包过程

归因只有两种

  • 归因 - 将归因代码添加到常规构建中

  • beetmover - 将文件移动到特定于合作伙伴的目标位置

归因

  • 种类:release-partner-attribution

  • 平台:任何 Windows,在 Linux 上运行

  • 上游:repackage-signing repackage-signing-l10n

有一个任务,调用 python/mozrelease/mozrelease/attribute_builds.py

它将 repackage-signing 和 repackage-signing-l10n 工件作为输入,这些工件都是 target.exe 完整安装程序。 ATTRIBUTION_CONFIG 环境变量控制脚本。它生成更多 target.exe 安装程序。

如果配置数量增加, ATTRIBUTION_CONFIG 变量的大小可能会变得很大,并且可能需要将 attribution_config.yml 的内容传递给脚本,或者通过升级任务的工件传递。

Beetmover

  • 种类:release-partner-attribution-beetmover

  • 平台:N/A,scriptworker

  • 上游:release-partner-attribution

将工件移动并重命名到 candidates 目录 中的公共位置。

每个任务都将具有 project:releng:beetmover:action:push-to-partnerproject:releng:beetmover:bucket:release 范围。 beetmoverscript 中有一个特定于合作伙伴的代码路径。