taskcluster推送apk worker

pushapkscript的Python项目详细描述


pushapkscript

生成状态覆盖状态

主脚本,旨在与scriptworker一起运行(但作为独立脚本运行非常好)。这个项目是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中)。

配置

签名者

将夜间证书添加到Java密钥存储库:

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

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

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

有许多值要编辑。示例值应该提示您要提供什么。如果没有,请参见signingscript的自述文件了解有关允许URL的详细信息,或者与作者联系以了解其他不清楚的区域。

目录和文件命名

如果没有在ScriptWorker中运行,则需要手动创建work\u dirartifact\u dir指向的目录。最好为它们使用新目录,而不是杂乱无章地覆盖现有目录。设置好ScriptWorker后,将定期清除并重新创建work\u目录和artifact\u目录。

task.json

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

通常,scriptworker会从taskcluster获取任务定义,并将其写入work目录中的task.json。因为您最初不会运行ScriptWorker,所以您需要自己将此文件放在磁盘上。

要编辑的重要条目是:

  • apks:指向要发布到google play的文件
  • 依赖项:需要匹配URL的taskIDs,除非按照上述指定修改有效的配置项
  • 作用域:第一个也是唯一的作用域,项目:releng:google play:*,告诉google play store中的哪个产品应该更新(或者极光beta版,或发布版
  • google_play_track:指将上载apk的google play track(生产、beta或alpha)

(极光,β,释放)与(α,β,生产)?

google play允许一个产品有3个不同的音轨(alphabetaproduction)。当最终用户想要注册测试计划时,他们会使用曲目。

然而,当我们开始发布fennec时,这个功能还没有发布。这就是为什么Fennec注册为3不同的产品:每个Firefox频道一个(Aurora,Beta,Release)。因此,以下是产品/曲目的使用方法。

<表><广告>产品 品牌名 曲目注释< /广告><正文>释放火狐生产βFirefox测试版生产极光面向开发人员的Firefox极光测试版生产不用于显示产品不是针对普通用户的

注意:出于开发目的,也可以使用alpha轨道上的aurora。

运行

你准备好运行pushapkscript了!

pushapkscript CONFIG_FILE

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

这将下载负载中指定的文件,用jarsigner检查它们的签名,并将它们发布到google play store。

运行ScriptWorker

按照scriptworker自述文件设置scriptworker,并使用["path/to/pushapkscript","path/to/script\u config.json"]作为您的任务脚本

:警告:确保work\u dirartifact\u dir指向scriptworker配置和pushapkscript配置之间的相同目录!

常见问题

我想测试pushapkscript中的更改…

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

不。信任链用于安全地下载工件。您可以通过在磁盘上已有工件来绕过这一步。只需将apk放入:$work-dir/cot/$task-id/public/build/target.apk(每个apk都有不同的任务id)。然后,您可以运行pushapkscript

是否有可以将代码推送到的暂存实例?

以前有一个,但现在退役了。您可以通过puppet生成一个新实例。这样做:

  1. 创建新的虚拟机实例。你可以找个借贷者
  2. 在傀儡主节点上设置a用户环境
  3. 向moco nodes.pp添加新节点。配置示例出现在这个repo的examples/puppet node.example.pp
  4. 通过创建GPG密钥并将其白名单化,激活信任链。否则,将不会下载工件。
  5. 编辑任务以指向其他工作类型。你可以随意定义。请不要使用dep池,因为它是在释放之外使用的,例如在try中使用。
  6. 在你的虚拟机上,让从节点28s.29" rel="nofollow">接受你的用户环境的配置。 < > >

    :警告:如下文所述,该实例将与google play的生产实例进行交互。请确保您的任务定义中包含"提交":false(或不定义)。

    我想测试taskcluster任务…

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

    遗憾的是,不。google play文档没有提到我们可以插入的任何服务器。这意味着,您将与生产数据交互。但也有办法减轻风险。

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

    有3种增量方法可避免针对真实用户(或整个用户群):

    <H5>1。在任务定义中使用"提交":false

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

    这允许多次发布同一APK。

    不过,有几个最后的检查,谷歌播放只在交易提交时做。我们已经经历过一次:L10N商店的完整性(描述和"新增内容"部分)仅在此时验证。我们可以将这种行为推断为:对google play的几次调用中可以执行的所有操作都将在提交时检查。

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

    <H5>2。推到闭合的alpha轨道

    在某些情况下,您可能仍然希望发布您的APK。

    google play提供了在产品中安装beta和alpha程序的能力。Aurora已经使用了测试版程序。

    您可以要求Release Management在Google Play控制台(转到Release Management->;App Releases->;Manage Alpha)和目标用户(按电子邮件地址)上设置关闭的Alpha测试。然后,编辑任务定义以包含"google_play_track":"alpha"

    继续之前:拆除alpha轨迹

    :警告:完成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(然后是rollout频道)。谷歌Play不会接受将相同的APK重放到beta曲目,因为APK只能推送一次。
    3. < > > <H5>3。对于非极光产品:推至推出轨道

      如果您有足够的信心发布到我们用户群的百分比,您可以使用"卷展栏"功能。只需编辑任务定义以包含:

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

      如果您想将10%的生产用户群作为目标。

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
在Eclipse中使用多个调用在一行上打印java   javajackson序列化问题。只有同一实体的第一个对象可以很好地序列化   Java中Deflate函数的等价充气   使用customlitview的java Android actionbar搜索   java“<T>T get()”是什么意思?(它有用吗?)   目标c使用CommonCrypto使用AES256加密,使用OpenSSL或Java解密   java在运行时更新资源文件   fileinputstream在java中访问并将数据写入现有文件   带集群的java Android Mapbox我希望每个功能都有不同的标记图像   java JDK8>JDK10:PKIX路径生成失败:SunCertPathBuilderException:找不到请求目标的有效证书路径   java使用Hk2生成具有指定构造函数参数的实例   为什么这个系统。出来Java中的println()打印到控制台?   java目录和文件名连接不起作用   使用mockito和通配符绘图的java