美文网首页
Windows下 Jenkins+bat+python 自动上传

Windows下 Jenkins+bat+python 自动上传

作者: aos3618 | 来源:发表于2019-04-29 15:51 被阅读0次

    最近有个需求,就是一个jenkins job需要打出两个包并上传,所以无法使用fir的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%
    

    相关文章

      网友评论

          本文标题:Windows下 Jenkins+bat+python 自动上传

          本文链接:https://www.haomeiwen.com/subject/ranynqtx.html