Windows下 Jenkins+bat+python 自动上传Android apk到 fir.im

最近有个需求,就是一个jenkins job需要打出两个包并上传,所以无法使用fir.im的jenkins plugin了
用python写了个脚本,想怎么上传就怎么上传。

python 脚本


1.fir 文档地址

https://fir.im/docs/publish

2.python脚本 uploadFir.py

import argparse
import json
import re
import requests

get_token_url = 'http://api.fir.im/apps'

#获取token
def get_token(api_token, bundle_id):
    headers = {}
    headers['Content-Type'] = 'application/json'
    data = {"type": "android", "bundle_id": bundle_id, "api_token": api_token}
    getTokenResp = requests.post(get_token_url, headers=headers, data=json.dumps(data))
    respJson = json.loads(getTokenResp.text)
    print(respJson)
    return respJson['cert']['binary']

#开始上传
def upload(url, key, token, apk_file, x_name, x_version, x_build):
    file = {'file': open(apk_file, 'rb')}
    data = {"key": key, "token": token, "x:name": x_name, "x:version": x_version, "x:build": x_build}

    getTokenResp = requests.post(url, files=file, data=(data), verify=False)
    respJson = json.loads(getTokenResp.text)
    print(respJson)

#开始执行
def start(api_token, bundle_id, apk_path, x_name, x_version, x_build):
    binary = get_token(api_token, bundle_id)
    uploadKey = binary['key']
    uploadToken = binary['token']
    uploadUrl = binary['upload_url']
    upload(uploadUrl, uploadKey, uploadToken, apk_path, x_name, x_version, x_build)
    
#从命令行获取参数
parser = argparse.ArgumentParser()
#api_token 就是fir后台你的一个token
parser.add_argument('-t', '--api_token', help='api_token input', type=str, required=True)
#应用的packageName
parser.add_argument('-i', '--bundle_id', help='bundle_id input', type=str, required=True)
#apk路径
parser.add_argument('-p', '--apk_path', help='apk_path input', type=str, required=True)
#应用名称,展示在fir下载地址里面,不影响包体
parser.add_argument('-n', '--x_name', help='x_name input', type=str, required=True)
#应用版本号,由于我们的jenkins是没有配置版本号的,所以隐藏
# parser.add_argument('-v', '--x_version', help='delimited list input', type=str, required=False)
#build号,对应jenkins BUILD_NUMBER 也可以自行设置
parser.add_argument('-b', '--x_build', help='x_build input', type=str, required=True)

#参数校验
args = parser.parse_args()
if args.api_token:
    api_token = args.api_token
else:
    parser.error('api_token parameter should be not null!')

if args.bundle_id:
    bundle_id = args.bundle_id
else:
    parser.error('bundle_id parameter should be not null!')

if args.apk_path:
    apk_path = args.apk_path
else:
    parser.error('apk_path parameter should be not null!')

if args.x_name:
    x_name = args.x_name
else:
    parser.error('x_name parameter should be not null!')

if args.x_build:
    x_build = args.x_build
else:
    parser.error('x_build parameter should be not null!')

if __name__ == '__main__':
	# 我们的应用的version是从path中截取版本号
	# 我们的path类似 D:\xxx-4.1.3(-1)-qq_apps_CPD-release.apk的统一格式,所以 在 -和(中间的就是版本号。
	# 也可以根据你们的命名规则修改
    x_version = re.findall(".*-(.*)\(.*", apk_path)  
    print(x_version[0])
    print(x_build)
    start(api_token, bundle_id, apk_path, x_name, x_version, x_build)
    # start("d9778d8af996e92393d9010a05632512", "com.package.name", "D:\xxx-4.1.3(-1)-qq_apps_CPD-release.apk",
    #       "应用名称", "4.1.3", "123")

至此python脚本就结束了

Jenkins相应配置

我们用的Jenkins是 一个Windows的Slave,所以命令都是bat的
大致调用上传代码如下

 D:\uploadFir.py -t "d9778d8af996e92393d9010a05632512" -i "com.package.name" -p "D:\xxx-4.1.3(-1)-qq_apps_CPD-release.apk" -n "应用名称" -b %BUILD_NUMBER%

或者更详细的调用方式可读性更好些

 D:\uploadFir.py --api_token "d9778d8af996e92393d9010a05632512" --bundle_id "com.package.name" --apk_path "D:\xxx-4.1.3(-1)-qq_apps_CPD-release.apk" --x_name "应用名称" --x_build %BUILD_NUMBER%
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值