跳转到主要内容

TaskCluster Push APK 工作员

项目描述

pushapkscript

Build Status Coverage Status

主要脚本,旨在与scriptworker(但也可以作为独立脚本运行得很好)。该项目是signingscript的分支。大多数来自signingscript的文档适用于此项目。

获取代码

首先,您需要 python>=3.5.0

# create the virtualenv in ./venv3
virtualenv3 venv3
# activate it
. venv3/bin/activate
git clone https://github.com/mozilla-releng/pushapkscript
cd pushapkscript
pip install pushapkscript

然后您需要安装jarsigner(通常包含在JDK中)。

配置

Jarsigner

将夜间证书添加到java密钥库

keytool -import -keystore ~/.keystores/mozilla-android -file pushapkscript/data/android-nightly.cer -alias nightly

注意:密钥库位置和证书别名将在config.json部分中使用

config.json

cp examples/config.example.json config.json
# edit it with your favorite text editor

有许多值需要编辑。示例值应为您提供提示,了解应提供什么。如果不清楚,请参阅signingscript的README以获取有关允许URL的更多详细信息,或联系作者以获取其他不明确区域的帮助。

目录和文件命名

如果您没有通过scriptworker运行,您需要手动创建work_dirartifact_dir指向的目录。使用新目录而非在现有目录中添加混乱并可能覆盖现有目录会更好。一旦设置好scriptworker,work_dirartifact_dir将会定期清除并重新创建。

task.json

cp examples/task.example.json /path/to/work_dir
# edit it with your favorite text editor

通常,scriptworker会从TaskCluster获取任务定义,并将其写入work_dir中的task.json文件。由于您最初不会通过scriptworker运行,您需要自己将此文件放在磁盘上。

需要编辑的重要条目是

  • apks:指向要发布到Google Play的文件
  • dependencies:需要与URL的taskId匹配,除非您根据上述说明修改了valid_artifact_*配置项
  • scopes:第一个也是唯一的作用域project:releng:googleplay:*,指明Google Play商店中哪个产品需要更新(无论是aurorabeta还是release
  • google_play_track:指明APK将要上传到哪个Google Play track(无论是生产、beta还是alpha)

(aurora, beta, release) vs (alpha, beta, production)?

Google Play允许一个产品拥有3个不同的track(alphabetaproduction)。track用于最终用户想要加入beta测试程序时。

然而,当我们开始发布Fennec时,这个功能还不存在。这就是为什么Fennec注册为3个不同的产品:每个常规Firefox渠道(aurora、beta、release)一个。因此,以下是使用产品/track的方法。

产品 品牌名称 track 备注
release Firefox production
beta Firefox Beta production
aurora Firefox Aurora for Developers beta production不用于表示产品不是针对普通用户

备注:出于开发目的,alpha track上的aurora也可以使用。

运行

您准备好运行pushapkscript了!

pushapkscript CONFIG_FILE

其中CONFIG_FILE是您上面创建的配置json。

这应该会下载payload中指定的文件,使用jarsigner检查它们的签名并将它们发布到Google Play商店。

通过scriptworker运行

按照scriptworker说明文档设置scriptworker,并使用["path/to/pushapkscript", "path/to/script_config.json"]作为您的task_script

:warning: 确保您的work_dirartifact_dir在scriptworker配置和pushapkscript配置中指向相同的目录!

常见问题

我想测试pushapkscript中的更改...

我是否需要为本地开发激活信任链?

不需要。信任链用于安全下载工件。您可以通过工件已存在于磁盘上来跳过此步骤。只需将APK放在:$work_dir/cot/$task_id/public/build/target.apk(每个APK都有一个不同的task_id)。然后,您就可以运行pushapkscript

有一个预发布实例我可以推送我的代码吗?

曾经有一个,但现在已退役。您可以通过puppet创建一个新的实例。为此

  1. 创建一个新的虚拟机实例。您可以通过请求借用
  2. puppet主节点上,设置用户环境
  3. moco-nodes.pp 中添加一个新的节点。配置示例在该仓库的 examples/puppet-node.example.pp 中。
  4. 通过创建 gpg 密钥并对其进行白名单管理来激活信任链 (请参阅此处)。否则,将无法下载工件。
  5. 编辑您的任务以指向不同的工作类型。根据需要定义。请勿使用 dep 池,因为它在 releng 以外使用,例如在 try 中。
  6. 在您的虚拟机上,让从属节点 采用您的用户环境的配置

:warning: 如下文所述,此实例将与 Google Play 的生产实例交互。请确保您的任务定义中包含 "commit": false(或不要定义它)。

我想测试 Taskcluster 任务...

是否存在不与生产数据交互的实例?

很遗憾,没有。Google Play 文档并未提及我们可以连接到的任何服务器。这意味着,您将交互生产数据。尽管如此,还有一些方法可以 降低风险

如何避免发布给实际用户?

有三种渐进式方法可以避免针对真实用户(或整个用户群)

1. 在您的任务定义中使用 "commit": false

这将执行 pushapkscript 中实现的每个步骤,但最后一个,将事务提交到 Play 商店。

这允许发布相同的 APK 多次。

然而,Google Play 只在事务提交时执行一些最终检查。我们已经经历过一次:l10n 存储的完整性(描述和“新功能”部分)只在这一时间进行验证。我们可以推断出:可以在 Google Play 的多个调用中完成的一切,都将在提交时间进行检查。

如果任务有效负载中未定义,则 commit 默认为 false

2. 推送到封闭的 alpha 轨道

在某些时候,您可能仍然希望发布您的 APK。

Google Play 提供了在产品内拥有 公测和 alpha 计划 的能力。Aurora 已经使用了 公测计划

您可以向发布管理要求在 Google Play 控制台(转到发布管理 -> 应用发布 -> 管理Alpha)上设置封闭的 alpha 测试,并通过电子邮件地址定位用户。然后,编辑您的任务定义以包含 "google_play_track": "alpha"

在继续之前:拆除 alpha 轨道

:warning>一旦您完成 alpha 轨道,您必须要求发布管理将其关闭。Google Play 不接受比 alpha 轨道更晚版本的其他轨道。如果您在没有关闭 alpha 的情况下开始使用另一个轨道,您可能会遇到以下错误

HttpError 403 when requesting https://www.googleapis.com/androidpublisher/v2/applications/org.mozilla.fennec_aurora/edits/17791185193608549142:commit?alt=json returned "Version 2015491409 of this app can not be downloaded by any devices as they will all receive APKs with higher version codes.

如果发布管理无法连接,则有一个临时解决方案

  1. 在 alpha 轨道上发布 APK。
  2. 在 Google Play 仪表板中,将 APK 提升至 beta(然后是推出渠道)。由于 APK 只能推送一次,因此重新上传到 beta 轨道的同一 APK 不会被 Google Play 接受。
3. 对于非 Aurora 产品:推送到推出轨道

如果您对我们用户群的一定比例有信心进行发布,您可以使用“推出”功能。只需编辑您的任务定义以包含

"channel": "production",
"rollout_percentage": 10,

如果您想针对 10% 的生产用户群。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分发

pushapkscript-5.0.0.tar.gz (47.4 kB 查看哈希值)

上传时间 源代码

构建分发

pushapkscript-5.0.0-py3-none-any.whl (29.8 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面