新手区 自动打包平台

xiaoluosun · 发布于 2017年3月01日 · 最后由 friday 回复于 2017年3月24日 · 2743 次阅读
本帖已被设为精华帖!

记录之前做过的一些东西,避免忘了。。。

自动打包的流程

Jenkins配置项目

源码管理

构建触发器

一分钟查询一次Git服务器的代码是否有提交

Android Gradle编译

-Plog_enable_cmd='true'    是否开启log开关(线上设置的false)
-Pserver_environment_cmd='测试'    传一个全局属性,编译指定的环境
-q config    执行config任务,使上面两个全局属性生效

iOS xcodebuild编译

xcodebuild先编译成.app文件
-workspace  工程的.xcworkspace路径
-scheme  在工程目录下,xcodebuild -list查询
-configuration  在xcode新建三个configuration,用以区分测试、仿真、线上环境
-derivedDataPath build目录

xcrun把.app文件编译成.ipa文件
-sdk  iOS sdk,iphoneos是真机
-v 要编译的.app文件路径
-o .ipa输出路口

构建后操作

执行Python脚本,做以下的事情:

1. 拿到此次编译的环境和版本号(到项目文件查询)
2. 修改安装包名字,格式:项目名_版本号_环境_时间戳.apk
3. 生成下载地址二维码和下载页(每个app都有自己的二维码下载地址和下载页,类似蒲公英,扫描二维码跳转app下载页)
4. iOS每个安装包需要配置一个plist文件,配置app信息,用于下载 (下面有模板)
5. 上传二维码图片、下载页和安装包到下载服务器
6. 保存安装包数据到数据库

iOS的安装命令(在下载页的“下载安装”按钮里配置的此命令)

下面的命令可以在线安装iOS的ipa安装包,url后面跟plist文件地址
plist文件里面要配置你的安装包的一些信息,下面有模板。
每次执行python脚本的时候生成一个plist文件用于下载

itms-services://?action=download-manifest&url=plist文件url

plist文件模板

<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>此处填写ipa文件的下载地址,如http://xxx.xxx/xxxx.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>此处填写工程的bundle-identifier</string>
                <key>bundle-version</key>
                <string>此处填写工程的版本号</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>&#24471;</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

生成二维码

def gen_qrcode(install_app, config_info, file_name, ftp_url, project_path):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=4,
        border=1
    )

    image_name = file_name.replace(".ipa", "") + ".png"
    qr.add_data(install_app)
    qr.make(fit=True)
    img = qr.make_image()
    img.save(project_path + image_name)

编译失败发送报警邮件

用的Editable Email Notification插件

下载页面

数据库表

CREATE TABLE `app_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `app_name` varchar(150) DEFAULT NULL COMMENT '安装包名称',
  `os_name` varchar(50) DEFAULT NULL COMMENT '手机系统(Android, IOS)',
  `config` varchar(50) DEFAULT NULL COMMENT '环境(测试-1,仿真-2,线上-3)',
  `versions` varchar(50) DEFAULT NULL COMMENT '版本号',
  `app_path` varchar(200) DEFAULT NULL COMMENT '安装包地址',
  `qrcode_path` varchar(150) DEFAULT NULL COMMENT '二维码图片地址',
  `app_time` datetime DEFAULT NULL COMMENT '安装包生成时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1624 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

下载页源码
Eclipse可直接导入

APP下载主页

扫描二维码下载页

def create_html(file_path, html_name, install_app):

    print "生成html文件"
    file = open(file_path + "html/" + html_name, 'w')
    file.write(u'\
        <html lang=zh-cmn-Hans> \
        <head> \
            <meta charset="utf-8"> \
            <title>安装APP</title> \
            <link href="index.css" rel="stylesheet" type="text/css" /> \
        </head> \
        <body> \
            <div id="" class="view row" style="margin-top:30px;"> \
                <div class="span12 margin-bottom-20" style="text-align:center;"> \
                    <div class="spinner"> \
                        <div id="showtext"><font size="7" color="red">请用浏览器打开</font></div> \
                        <div id="showtext"><font size="7" color="red">点击安装后,请按 Home 键在桌面查看</font></div> \
                        <a href="' + 
                        install_app + 
                        '" id="down_load" class="btn-u btn-u-lg btn-u-green"><i class="fa fa-download"></i> 点击安装</a> \
                   </div> \
                </div> \
            </div> \
        </body> \
        </html> \
    ')

    file.close()

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 31 条回复
1楼 已删除
3341

我来点个赞

104 seveniruby 将本帖设为了精华贴 3月01日 17:20
104

加精理由: 简明扼要.值得参考

4817

Xcrun在xcode 8上还能用?

9492
4817xiaobeiying 回复

刚试过,可以

11090

不错哈

—— 来自TesterHome官方 安卓客户端

3206
4817xiaobeiying 回复

恩,可以的

9260

ios如果要做真机调试的话,构建持续集成的意义大吗?

4365

挺好的,和我这边的差不多。ios打包我们用fastlane

96

Android使用gradle build命令打包一直crash,请教下是什么问题啊?

3206
4365neyo 回复

fastlane不错

3206
32lishenghong 回复

分析下报错

3206
9260willys 回复

看你们自己,持续集成的意义是很大的,不管对什么测试

11090

楼主,今天看了下你的源码,你上传github时没删除target文件。里面的class文件有你不想暴露的信息

—— 来自TesterHome官方 安卓客户端

3206
11090hu_qingen 回复

😅 没检查,,谢了

4093

@xiaoluosun 我搭建的持续集成平台(可能还比较基础,还不能叫平台)也是基于jenkins,iOS用了fastlane,安卓比较简单就是用的gradle,回收日志和archive文件用flask写的服务,把所有job执行的记录都归档,其中的一个job记录。只是写了api。

{
       "build_cause": "TIMERTRIGGER", 
       "job_display_name": "XX自动化测试 #15547", 
       "ts_str": "20170304_13_30_59", 
       "log_url": "XX_13_30_59.log", 
       "build_url": "XXX", 
       "result": "FAILURE", 
       "duration": "00时03分14秒", 
       "id": 79, 
       "archive_url": "XXX/archive_20170304_13_30_59.tgz", 
       "ts": 1488605459, 
       "trigger": "timer", 
       "job_base_name": "XXX", 
       "job_name": "XXX"
   },

3206
4093diao2007 回复

👍赞

2316


你们有碰到这个问题吗,已经在gitlab那边添加了 deploy key了。

3206
2316charles 回复

如果用的gitlab

  1. 在gitlab添加你的key和repository的权限
  2. Jenkins装gitlab相关插件并在系统管理配置connections信息,然后在项目配置直接用。
6109
104seveniruby 回复

原来你喜欢这样风格的😆

3206
6109debugtalk 回复

6241

楼主留个方便联系的方式不 ,请教下自动打包问题

96

666,明昌也要出道了~

3206
32gaopeng1106 回复

😓

3206
6241xxoomyoppo 回复

微信:xiaoluosun

4503

6666.

—— 来自TesterHome官方 安卓客户端

104

记得更新打赏二维码

3206
104seveniruby 回复

😬更新了

13516


大神,为什么我的这个和你的不一样啊,有什么版本之分吗,我这个是windows的,应该选择哪个可以继续按照你的流程进行呢?

3206
13516friday 回复

你是要用execute a set of scripts执行脚本?需要安装个插件Post-Build Script

13516
3206xiaoluosun 回复

大神,谢谢你的回复,我是第一次弄这个打包平台,很蒙的状态,不太明白jenkins 里的git repositories url怎么写啊,具体是怎么回事

13516
13516friday 回复





大神,我第一次搞这个Jenkins打包,实在是懵逼,我现在就是不明白,我的那个git为什么是错误的,还有就是build.gradle是怎么回事,是把代码放在里面吗,然后放在哪个目录下呢?

11090 hu_qingen 开源:App 发布平台--服务和前端实现 中提及了此贴 4月19日 18:19
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册