美文网首页Android开发开发技巧Android打包
Android Git 项目 Jenkins 持续集成 Grad

Android Git 项目 Jenkins 持续集成 Grad

作者: 石先 | 来源:发表于2017-06-03 11:39 被阅读130次

    对于程序员来说,遇到项目需要频繁地集成各成员的工作是相当头痛的。因为每次集成都需要进行一系列的质量把控(编译,打包,测试等),以保证各环节尽可能地少出错误。如此反复不仅消耗大量的时间和精力,也消磨着自己的耐心。那么,如何做到持续集成,把一些繁琐且无意义的工作交付给电脑自动完成,这是一个相当有必要去考虑的事情。比较,能提升幸福感的事情,何乐而不为呢。

    不重复造轮子

    充分借助已有资源,考虑自身实际场景,简单而有效的解决问题才是目标。很多人都推荐使用 Jenkins 来搭建持续化集成平台,这是一个行之有效的解决方案,下面就来看看如何减少集成问题并且快速实现。

    一个理念:能让电脑帮忙自动搞定的东西就尽量不要折腾自己

    准备工作

    本篇文章主要介绍 Android 项目的持续化集成平台基于 Jenkins 的实现,关于 iOS 的持续集成,推荐同事之前写的一篇一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP这篇文章,内容非常详细。

    主要介绍一下搭建Android平台环境时渠道的各种坑

    image.png image.png image.png image.png

    Gradle Path: /Users/baishixian/.gradle/wrapper/dists/gradle-4.0-milestone-1-all/2rnr7rhi2zsmkxo9re7615fy6/gradle-4.0-milestone-1

    image.png image.png image.png image.png image.png
    使用git作为源码仓库这里有坑,使用https的方式行不通,必须用ssh的方式才行,不然一直pull代码到本地不成功。
    Jenkins SSH connection to a Git server is not working using username/password image.png image.png image.png

    创建ssh 非对称加密 key,我这用的是阿里云code,参考https://code.aliyun.com/help/ssh/README

    image.png image.png

    然后在Jenkins中配置ssh的私钥

    image.png image.png image.png image.png image.png

    对于 Jenkins giving The SDK Directory doesn't exist 或者Jenkins build failed due to missing android SDK的问题,在编译时会造成如下问题:

    image.png

    需要配置ANDROID_HOME

    image.png image.png image.png

    代码仓库配置好了,意味着Jenkins具有了访问GitHub代码仓库的权限,可以成功地拉取代码。
    那Jenkins什么时候执行构建呢?
    这就需要配置构建触发策略,即构建触发器,配置项位于【Build Triggers】栏目。
    触发器支持多种类型,常用的有:

    • 定期进行构建(Build periodically)
    • 根据提交进行构建(Build when a change is pushed to GitHub)
    • 定期检测代码更新,如有更新则进行构建(Poll SCM)
      构建触发器的选择为复合选项,若选择多种类型,则任一类型满足构建条件时就会执行构建工作。如果所有类型都不选择,则该Jenkins Job不执行自动构建,但可通过手动点击【Build Now】触发构建。

    关于定时器(Schedule)的格式,简述如下:

    • MINUTE HOUR DOM MONTH DOW
    • MINUTE: Minutes within the hour (0-59)
    • HOUR: The hour of the day (0-23)
    • DOM: The day of the month (1-31)
    • MONTH: The month (1-12)
    • DOW: The day of the week (0-7) where 0 and 7 are Sunday.

    通常情况下需要指定多个值,这时可以采用如下operator(优先级从上到下):
    ** 适配所有有效的值,若不指定某一项,则以占位;*
    ** M-N适配值域范围,例如7-9代表7/8/9均满足;**
    ** M-N/X或/X:以X作为间隔;*
    A,B,C:枚举多个值。
    另外,为了避免多个任务在同一时刻同时触发构建,在指定时间段时可以配合使用H字符。添加H字符后,Jenkins会在指定时间段内随机选择一个时间点作为起始时刻,然后加上设定的时间间隔,计算得到后续的时间点。直到下一个周期时,Jenkins又会重新随机选择一个时间点作为起始时刻,依次类推。
    为了便于理解,列举几个示例:
    H/15 * * * *:代表每隔15分钟,并且开始时间不确定,这个小时可能是:07,:22,:37,:52,下一个小时就可能是:03,:18,:33,:48;
    H(0-29)/10 * * * *:代表前半小时内每隔10分钟,并且开始时间不确定,这个小时可能是:04,:14,:24,下一个小时就可能是:09,:19,:29;
    H 23 * * 1-5:工作日每晚23:00至23:59之间的某一时刻;

    相关文章

      网友评论

        本文标题:Android Git 项目 Jenkins 持续集成 Grad

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