设为首页 收藏本站
查看: 1300|回复: 0

[经验分享] 【iOS】Jenkins Gitlab持续集成打包平台搭建

[复制链接]

尚未签到

发表于 2018-1-7 10:55:11 | 显示全部楼层 |阅读模式
Jenkins Gitlab持续集成打包平台搭建
  SkySeraph July. 18th 2016
  Email:skyseraph00@163.com
  更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com
1. 相关概念
Jenkins

  • Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点。更多介绍参考维基介绍.
Gitlab

  • GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目,更多介绍参考维基介绍.
持续集成

  • 持续集成, 简称CI(continuous integration).
  • CI作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量.
  • CI一种可以增加项目可见性,降低项目失败风险的开发实践。其每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署.
  • CI 是团队成员间(产研测)更好地协调工作,更好的适应敏捷迭代开发,自动完成减少人工干预,保证每个时间点上团队成员提交的代码都能成功集成的,可以很好的用于对Android/iOS项目的打包.
蒲公英

  • 蒲公英(pgyer)为移动开发者提供App免费测试分发应用的服务平台,支持iOS与Android,简单两步分发应用。类似的还有fir.im等.
2. 流程结构
  简单绘制了下Jenkins的一个流程,如下图:
DSC0000.png

  IBM Developer上也有一个看似更复杂一点的图,如下图
DSC0001.png

  持续交互流程图:
DSC0002.png

3.平台搭建
Jenkins安装和启动
  官网: https://jenkins.io/index.html
  下载: http://mirrors.jenkins-ci.org/war/latest/jenkins.war
  安装:


  • 依赖于Java环境,首先安装和配置Java环境
  • 到官网下载Jenkins,双击安装,如果是Mac电脑,会自动生成全局变量jenkins
  • 修改参数: jenkins + 相关参数,如  jenkins –httpPort=8888 #更换端口号,当默认端口8080被占用,或指定特定端口时。
  启动


  • 手动启动: java -jar jenkins.war
  • 后台启动(默认端口): nohup java -jar jenkins.war &
  • 后台启动(指定端口): nohup java -jar jenkins.war -httpPort=88 &
  • 后台启动(HTTPS): nohup java -jar jenkins.war -httpsPort=88 &
  • 浏览:http://localhost:8080/ , localhost可配置
Jenkins插件安装
  插件安装
  操作: Manage Jenkins -> Manage Plugins -> Available -> Search -> Click to install,如下图所示
DSC0003.png

DSC0004.png

  实用插件


  • iOS专用:Xcode integration
  • Android专用:Gradle plugin
  • Gitlab插件:GitLab Plugin 和 Gitlab Hook Plugin
  • Git插件: Git plugin
  • GitBuckit插件: GitBuckit plugin
  • 签名证书管理插件: Credentials Plugin 和Keychains and Provisioning Profiles Management
  • FTP插件: Publish over FTP
  • 脚本插件: Post-Build Script Plug-in
  • 修改Build名称/描述(二维码): build-name-setter / description setter plugin
  • 获取仓库提交的commit log: Git Changelog Plugin
  • 自定义全局变量: Environment Injector Plugin
  • 自定义邮件插件: Email Extension Plugin
  • 获取当前登录用户信息: build-user-vars-plugin
  • 显示代码测试覆盖率报表: Cobertura Plugin
  • 来展示生成的单元测试报表,支持一切单测框架,如junit、nosetests等: Junit Plugin
  • 其它: GIT plugin / SSH Credentials Plugin
Jenkins系统设置
  操作: Manage Jenkins -> Configure System

  • Jenkins内部shell UTF-8 编码设置,如下图所示
DSC0005.png


  • Jenkins Location和Email设置,如下图所示
DSC0006.png


  • E-mail Notification,设置如下如所示
DSC0007.png Jenkis系统设置3

  SMTP详细配置请参考 How to send Email at every build with Jenkins
Jenkins Jobs配置
Jobs基础配置
  配置编译参数
  例如,如果需要打包者自行选择打包类型,如需要编译Release/Debug/Test等不同版本的包,那需要配置Jobs的编译参数,配置方法如下图所示:
DSC0008.png Jenkins编译设置-参数设置2

  你还可以配置一些其它参数,例如:
DSC0009.png Jenkins编译设置-参数设置3

  配置完后,build界面中就会出现,如下如所示:
DSC00010.png Jenkins编译设置-参数设置1


  How to configure a single Jenkins job to make the>
  配置匿名用户权限
  后面打包的应用发布时,如果懒得自己搭建服务器,就用Jenkins的,但发布出去的链接需要登录才能访问,这时候你可以设置匿名用户的访问权限,这样匿名用户可以下载访问你提供的应用链接了,非常取巧的方法,如下图:
DSC00011.png Jenkins编译设置-参数设置4.png

Jobs源码库配置(Gitlab为例)
  配置SSH
  操作: Manage Jenkins -> Credentials -> Global credentials (unrestricted) -> Add Credentials

  • 本机生成SSH:ssh-keygen -t rsa -C “Your email” , 生成过程中需设置密码,最终生成id_rsa和id_rsa.pub(公钥)
  • 本机添加秘钥到SSH:ssh-add 文件名(需输入管理密码)
  • Gitlab上添加公钥:复制id_rsa.pub里面的公钥添加到Gitlab
  • Jenkins上配置密钥到SSH:复制id_rsa.pub里面的公钥添加到Jenkins(private key选项)
  新建Job
  在Jenkins中,所有的任务都是以”Job”为单位的。在进行操作前,你需要新建一个Job,Job新建比较简单,只需要在Jenkins管理的首页左侧,点击“New Job”,一般选择free-style software project,再输入Job的名字即可。
  配置Gitlab
  在新建的任务(Jobs)中,Gitlab源码配置如下图:需要输入git仓库和build分支,公钥使用上面配置SSH生成的公钥。
DSC00012.png

Jobs触发条件配置
  Jenkins支持多种触发器配置,包括:

  •   定期进行构建(Build periodically),定时器使用示例如下:
      H(25-30) 18 1-5: 工作日下午6点25到30分之间进行build
      H 23 1-5:工作日每晚23:00至23:59之间的某一时刻进行build
      H(0-29)/15 :前半小时内每隔15分钟进行build(开始时间不确定)
      H/20 :每隔20分钟进行build(开始时间不确定)
  •   根据提交进行构建(Build when a change is pushed to GitHub)
  • 定期检测代码更新,如有更新则进行构建(Poll SCM)
Jobs构建方式/编译 配置
  Jenkins支持多种编译配置方式,包括:

  • Xcode: iOS编译配置(安装Xcode integration插件)
  • Invoke Gradle script: Android编译配置(安装Gradle plugin插件)
  • Exceute Shell: 脚本方式
  对于iOS应用的构建,如果选择Xcode方式构建,需要配置好开发者证书,具体参考后面签名和整数问题。
  推荐使用Exceute Shell方式,简单有效。
Jobs构建后处理
  Artifacts和邮件通知配置,参考下图
DSC00013.png Jenkins项目设置-Archive-min

  可借助Email Extension Plugin 插件进行详细配置,具体可参考此文
DSC00014.png Jenkins项目设置-邮件-min

  发布


  • FTP服务器, 最传统的方式,可助蒲公英或者fir.im(安装对应的Jenkins插件)。
  • 专业的Artifacts存储仓库, 比如Nexus, Artifactory等。
  • 对象存储服务:比如阿里云OSS,AWS S3等,以阿里云为例,具体请参考此文 在Jenkins持续集成方案中使用阿里云OSS作为Artifacts仓库
  iOS的发布可能希望用到OTA,可参考此文
  这里分享一个我写的shell脚本模板(已开源),可以用于iOS的plist文件自动创建以及OTA简单发布页面的自动创建,参考此链接获取源码, 欢迎Star.
  自动生成一个简单HTML界面,如下图,点击Install即可安装:
DSC00015.png Jenkis发布1

  注意,这里iOS7.1以后限定必须要要用https,所以需要对jenkins设置下https,参考下面”后记” 中的Jenkins Https设置
  Last Show
  构建成功后最终的结果如下如所示:

4. 后记
签名和证书问题(iOS)

  • Set up code signing for iOS projects
  • 安装JENKINS到发布IPA中的那些坑
Jenkins Https Support
  查询Jenkins Https相关命令:
  java -jar jenkins.war –help | grep -i https
  说明:下面以Mac为例.
  KeyStore方式


  • 生成: keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass 密码 -dname “cn=WEB”
  • 使用: java -jar jenkins.war –httpPort=-1 –httpsPort=8080 –httpsKeyStore=/目录/keystore.jks –httpsKeyStorePassword=密码。
  • 注意: 第一次使用时需要将”WEB”证书导入,导入步骤为:Chrome导出证书 -> 安装证书 -> 设置证书”全部允许”, 图解步骤可参考下面实用参考中的第5篇文章.
  Certificate方式


  • 生成:

  • openssl genrsa -out server.key 1024
  • openssl req -new -key server.key -out server.csr
  • openssl x509 -req -in server.csr -signkey server.key -out server.crt


  • 使用:java -jar jenkins.war –httpsPort=8088 –httpsCertificate=/path/server.crt –httpsPrivateKey=/path/server.key
  • 注意:①同上 ②iOS手机需要导入cer证书
  实用参考


  • Starting and Accessing Jenkins 官网说明
  • Jenkins: Switch to SSL/ HTTPS mode 支持HTTPS的两种方式
  • Installing and Configuring Jenkins KeyStore方式
  • Generating a self-signed SSL certificate using the Java keytool command (2004193)KeyStore方式
  • Setup Self-Signed Certificates & Trusting them on OS X Certificate方式
  • 免费openssl生成ssl证书 Certificate方式
5. Refs

  • Using Jenkins
  • Building a software project
  • Auto build and deploy iOS apps using Jenkins
  • Continuous Integration for iOS with Jenkins
  • GitLab Documentation
  • Setup Jenkins + TestFlight for iOS apps
  • Installing Jenkins on OS X Yosemite
  • 基于 Jenkins 快速搭建持续集成环境
  • Jenkins入门
  • jenkins中集成OTA发布
  文章有更新, 请移步查看.
  SYNC POST
  ========
  By SkySeraph-2016
  www.skyseraph.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432512-1-1.html 上篇帖子: 2.jenkins配置邮件提醒 下篇帖子: 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表