Jenkins+GitLab+Android+iOS+Cocoa

作者: 铁达尼极限V | 来源:发表于2016-08-13 15:03 被阅读1110次
    Jenkins持续集成系统

    持续集成是敏捷开发的重要一环,它具备以下优点:

    减少并降低软件开发中的风险

    将重复性工作自动化,让开发人员更专注于代码

    在任何时间、任何地点生成可部署的软件

    随着人员以及项目的增加,以上这些就变得尤为重要.所以我们也在恰当的时机把它引入进来.

    而市面上持续集成系统琳琅满目,有Jenkins,Travis,Circleci,Bitrise,Flow.ci 我们该如何选择,那就参考大数据,朝内还是用百度指数,目前只收录Jenkins和Travis.

    Jenkins:蓝色      Travis:绿色

    Jenkins和Travis百度搜索趋势 Jenkins和Travis百度搜索人群画像

    Jenkins更为成熟,它是框架式的,大部分功能通过插件的方式来实现,可扩展性非常高.

    废话少说,直接来撸一撸!

    下载Android SDK

    下载Jenkins 安装

    通过HomreBrew安装启动和停止jenkins服务:

    brew install jenkins

    brew tap homebrew/services

    Start Jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

    Stop Jenkins: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

    开机启动 Run at boot:  /Library/LaunchDaemons 可以在这里修改jenkins相关信息

    Run at login: /Users/Lavare/Library/LaunchAgents

    通过pkg文件安装的可以通过 java命令启动:

    java -jar /Applications/Jenkins/jenkins.war


    Jenkins安装配置各种插件:

    Git  ---- GitLab ---- Gitlab Authentication plugin  (Git授权插件)

     Environment Injector Plugin (环境变量注入,目前用于获取gitLog,并传递给Fir.im上传信息)

     Email Extension  (邮件扩展插件,打包完成后邮件通知各人员)

      Fir Plugin  (Fir.im上传插件,apk/ipa 分发渠道)

     Bearychat Plugin (上传到Bearychat插件,同于通知)

    Gradle Plugin   (Android 构建插件)

     Xcode integration  (iOS构建插件)

    Keychains and Provisioning Profiles Management  (iOS证书配置插件)

    Sonar:代码质量管理平台,也是通过安装各种插件来扩展代码检测功能

    1.糟糕的复杂度分布

    2.重复

    3.缺乏单元测试

    4.没有代码标准

    5.没有足够的或者过多的注释

    6.潜在的bug

    7.糟糕的设计

    在系统管理界面配置->系统设置

    GitLab配置,使用Api Token验证

    配置GitLab的Token

    Bearychat配置,方便后期构建成功后通知到相应群组

    * Team Subdomain: 在 https://ydj.bearychat.com 中,如yjd便是团队的 subdomain

    * Integration Token: 在 BearyChat 中的 Jenkins 机器人的 hook 地址中, 最后的部分便是 token。

    * Channel: 讨论组名称,如果指定的话,可以将 Jenkins 通知推送到该讨论组

    * Build Server URL: 团队的 Jenkins 服务器所在的地址,用于构建 Jenkins 通知中的链接等信息

    * Test Connection: 在填写上面的相关信息后,可以测试下是否配置成功

    Bearychat配置

    配置Sonar代码质量管理服务器

    Sonar服务器配置

    在Global Tool Config配置jdk,git

    Jdk以及Git安装

    项目配置

    新建项目,使用自有构建模式

    项目类型选择

    指定工作目录,和保持构建的天数,及最大个数,自定义目录

    注意: 如果使用自定义工作空间,要考虑目录对当前是否有写入的权限,

    项目配置

    源码管理使用http地址,也可以使用ssh要配key较麻烦

    GitLab项目配置

    构建触发器,配置gitlab的webhook,有push变化则自动构建打包,指定对某一个分支有效:

    GitLab触发配置 GitLab的Webhook配置

    周期性触发器:

    Build periodically指周期性构建(Provides a cron-like feature to periodically execute this project.)

    Poll SCM指周期性扫描远程git repository,当有变化时进行构建(Configure Jenkins to poll changes in SCM.)

    日期定义

    Cron表达式字符串的格式为“分 小时 日 月 星期 年”,其中“年”是可选的,其余5个字段是必须的。

    区别(1)没有秒 (2)星期的取值范围是0-6(SUN-SAT)

    字段取值范围通配符分0-59* / , -时0-59* / , -日1-31* / , - ? L W月1-12 or JAN-DEC* / , -星期0-6 or SUN-SAT* / , - ? L #年1970–2099* / , -

    例子:

    */5 * * * *  // 每5分钟

    H/5 * * * *    // 每5分钟 推荐

    5 * * * *    // 每小时的第5分钟

    0 8 * * *    // 每天8点

    0 16,18,20,22 * * *    // 每天的16点、18点、20点、22点

    0 1,18 * * *    // 每天的1点和18点

    03 09 * * 1-5    // 工作日(周日到周五)的9点3分

    59 23 * * 1-5 或者 @midnight    // 工作日(周日到周五)的9点3分

    0 20 * * 1-5

    H 20 * * 1-5 周一到周五的每晚8点自动构建

    周期性触发配置

    自定义环境变量获取Git Log

    构建触发器配置完成后,我们还可以通过Environment Injector Plugin(环境变量注入插件),目前用于获取gitLog,并传递给Fir.im上传信息).

    要先在Properties File Path 路径下创建一个对应的文件,否则改插件会报错找不到文件,名字可以自定义,但是要和Script Content的脚本内容中done> 后面的文件及路径一致.

    配置环境变量脚本

    我这里用于测试后期,只需要显示昨天Git提交的信息:

    GIT_CHANGE_LOG=$(git log --after="yesterday" --pretty=format:"%s")

    echo "GIT_CHANGE_LOG=$(git log --after="yesterday" --pretty=format:"%s" | while read line

    do 

    echo $line\\\\\\\\n | tr -d \\n

    done)" >  ${WORKSPACE}/gitLogFile.properties

    关于Git log的高级用法可以参考以下两篇文章:

    博客园-Git log高级用法

    Github-Git log 高级用法

    在构建中配置刚刚的文件路径,用户读取里面的环境变量打

    在构建配置文件路径

    然后就可以在Fir插件上使用刚刚设置的环境变量${GIT_CHANGE_LOG}

    使用环境变量 ${GIT_CHAGE_LOG}

    构建分为Android和iOS构建,放在后面讲,先讲公共流程

    构建期还可以通过Sonar来进行代码质量检查,配置源码路径,支持java,oc,swift,php,javascript

    sonar.projectKey=xxx_Android_Key

    sonar.projectName=xxx_Android_Name

    sonar.projectVersion=$BUILD_NUMBER

    sonar.sourceEncoding=UTF-8

    sonar.sources=/Users/jz_mac_mini/xxx/xxx/app/src/main 静态代码目录(必选)

    sonar.java.libraries=/Users/jz_mac_mini/xxx/xxx/app/libs/ 第三方库目录(必选)

    sonar.java.binaries=/Users/jz_mac_mini/xxx/xxx/app/build/intermediates/classes/production/ 编译后的代码目录(必选)

    项目Sonar配置

    可以通过Sonar的后台查看代码分析

    Sonar分析结果后台

    构建后使用Fir.im发布,先安装ruby,

    $ gem sources --remove https://rubygems.org/ $ gem sources -a https://ruby.taobao.org/ $ gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org # 请确保只有 ruby.taobao.org, 如果有其他的源, 请 remove 掉

    Mac OS X 10.11 以后的版本, 由于10.11引入了 rootless , 无法直接安装 fir-cli, 有以下三种解决办法:

    1. 使用 Homebrew 及 RVM 安装 Ruby, 再安装 fir-cli(推荐)

    # Install Homebrew:

    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    # Install RVM:

    $ \curl -sSL https://get.rvm.io | bash -s stable --ruby

    $ gem install fir-cli

    然后再通过插件配置Fir.im的账号,以及提交的fir的信息

    jenkins的build版本为:  $BUILD_NUMBER

    git的提交版本  号 为 :  $GIT_COMMIT

    Fir.im配置

    可以通过bearychat插件来配置通知群组,在项目中配置

    Bearychat项目配置 Bearychat通知打包结果

    可以配置邮件通知,使用插件来配置email-ext-plugin,可以定制发送的内容,

    先配置smtp服务器

    配置SMTP服务器

    然后指定发给哪些邮箱地址,以及定制发送的内容

    邮件发送内容

    也可以使用自带的邮件通知,要先制定系统管理员邮件地址

    配置管理员邮件地址

    然后再配置邮件服务器smtp

    配置自带邮件SMTP服务器

    Android端构建配置


    Android SDK配置

    Android SDK配置

    gradle可以指定本地的路径,也可以使用在线版本自动安装

    Gradle配置

    构建,可以通过Tasks来指定任务

    Task任务配置


    iOS端构建配置


    目前我们使用的是Xcode默认配置打包,不用jenkins上配置的证书及PP文件.有几个关键点要注意的.

    首先要在Xcode把项目中Projec和Target的Code Signing 设置为iOS Developer,以及把PP设置为Automatic.

    Code Sign和PP文件设置

    然后在Product->Scheme->Manage Schemes 把项目设置为Shared,第三方库的不用设置

    scheme设置

    系统管理->找到Keychain and Provisioning Profiles Management

    1.点击选择文件从本地选取Keychain,路径为:/Users/用户名/Library/Keychains/login.keychain

    这里我们目前的做法是只配置login.keychain,然后jenkins的机子上安装Code Signing证书,再在xcode项目上fix issue,就能够为我们自动生成一个PP文件,名为-iOS Team Provisioning Profiles : xxxx, 而且当我们在开发者中心更新设备列表的时候,此PP文件是会自动加入的.

    Keychain and Provisioning Profiles配置

    针对CocoaPods设置


    如果项目是使用CocoaPods来管理的,还要针对xcworkspace进行build的话,还要额外进行写设置

    如果构建是出现编码错误的可以在~/.bash_profile文件加上一句

    export LC_ALL="en_US.UTF-8"

    Xcode构建前,先用shell跑一遍pod install,我这里会出现pod: command not found 的错误,所以要在前面加上一句

    #!/bin/bash -l

    pod install --verbose --no-repo-update

    shell配置

    配置Workspace,红色的地方可以填上target名称,此处参考了章华龙的文章.

    配置Workspace

    非CocoaPods设置


    配置Xcode

    配置Xcode构建

    这里可以填入keychain来解锁

    解锁Keychain

    整个构建环境完成.

    后期我们打算优化Sonar的检测分析,以及配置单元测试,UI测试,条件测试覆盖率等,继续往持续交付,持续部署的路上走!

    Keep Going!

    相关文章

      网友评论

      本文标题:Jenkins+GitLab+Android+iOS+Cocoa

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