TaskCluster Push APK 工作员
项目描述
pushapkscript
主要脚本,旨在与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_dir
和artifact_dir
指向的目录。使用新目录而非在现有目录中添加混乱并可能覆盖现有目录会更好。一旦设置好scriptworker,work_dir
和artifact_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商店中哪个产品需要更新(无论是aurora、beta还是release)google_play_track
:指明APK将要上传到哪个Google Play track(无论是生产、beta还是alpha)
(aurora, beta, release) vs (alpha, beta, production)?
Google Play允许一个产品拥有3个不同的track(alpha
、beta
、production
)。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_dir
和artifact_dir
在scriptworker配置和pushapkscript配置中指向相同的目录!
常见问题
我想测试pushapkscript中的更改...
我是否需要为本地开发激活信任链?
不需要。信任链用于安全下载工件。您可以通过工件已存在于磁盘上来跳过此步骤。只需将APK放在:$work_dir/cot/$task_id/public/build/target.apk
(每个APK都有一个不同的task_id)。然后,您就可以运行pushapkscript。
有一个预发布实例我可以推送我的代码吗?
曾经有一个,但现在已退役。您可以通过puppet创建一个新的实例。为此
- 创建一个新的虚拟机实例。您可以通过请求借用。
- 在puppet主节点上,设置用户环境。
- 在 moco-nodes.pp 中添加一个新的节点。配置示例在该仓库的
examples/puppet-node.example.pp
中。 - 通过创建 gpg 密钥并对其进行白名单管理来激活信任链 (请参阅此处)。否则,将无法下载工件。
- 编辑您的任务以指向不同的工作类型。根据需要定义。请勿使用
dep
池,因为它在 releng 以外使用,例如在try
中。 - 在您的虚拟机上,让从属节点 采用您的用户环境的配置。
: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.
如果发布管理无法连接,则有一个临时解决方案
- 在 alpha 轨道上发布 APK。
- 在 Google Play 仪表板中,将 APK 提升至 beta(然后是推出渠道)。由于 APK 只能推送一次,因此重新上传到 beta 轨道的同一 APK 不会被 Google Play 接受。
3. 对于非 Aurora 产品:推送到推出轨道
如果您对我们用户群的一定比例有信心进行发布,您可以使用“推出”功能。只需编辑您的任务定义以包含
"channel": "production",
"rollout_percentage": 10,
如果您想针对 10% 的生产用户群。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。