Jenkins Gitlab持续集成打包平台搭建

原文:Jenkins Gitlab持续集成打包平台搭建

相关概念

Jenkins

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

Gitlab

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

持续集成

持续集成, 简称CI(continuous integration).

CI作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量.

CI一种可以增加项目可见性,降低项目失败风险的开发实践。其每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署.

CI 是团队成员间(产研测)更好地协调工作,更好的适应敏捷迭代开发,自动完成减少人工干预,保证每个时间点上团队成员提交的代码都能成功集成的,可以很好的用于对Android/iOS项目的打包.

OTA

OTA(Over-the-Air Technology)空中下载技术,具体参考此文介绍.

蒲公英

蒲公英(pgyer)为移动开发者提供App免费测试分发应用的服务平台,支持iOS与Android,简单两步分发应用。类似的还有fir.im等.

流程结构

简单绘制了下Jenkins的一个流程,如下图:

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

持续交互流程图:

平台搭建

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,如下图所示

实用插件

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 编码设置,如下图所示

Jenkins Location和Email设置,如下图所示

E-mail Notification,设置如下如所示

Jenkis系统设置3

SMTP详细配置请参考How to send Email at every build with Jenkins

Jenkins Jobs配置

Jobs基础配置

配置编译参数

例如,如果需要打包者自行选择打包类型,如需要编译Release/Debug/Test等不同版本的包,那需要配置Jobs的编译参数,配置方法如下图所示:

Jenkins编译设置-参数设置2

你还可以配置一些其它参数,例如:

Jenkins编译设置-参数设置3

配置完后,build界面中就会出现,如下如所示:

Jenkins编译设置-参数设置1

How to configure a single Jenkins job to make the release process from trunk or branches?

配置匿名用户权限

后面打包的应用发布时,如果懒得自己搭建服务器,就用Jenkins的,但发布出去的链接需要登录才能访问,这时候你可以设置匿名用户的访问权限,这样匿名用户可以下载访问你提供的应用链接了,非常取巧的方法,如下图:

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生成的公钥。

Jobs触发条件配置

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

定期进行构建(Build periodically),定时器使用示例如下:

H(25-30) 181-5: 工作日下午6点25到30分之间进行build

H 231-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和邮件通知配置,参考下图

Jenkins项目设置-Archive-min

可借助Email Extension Plugin 插件进行详细配置,具体可参考此文

Jenkins项目设置-邮件-min

发布

FTP服务器, 最传统的方式,可助蒲公英或者fir.im(安装对应的Jenkins插件)。

专业的Artifacts存储仓库, 比如Nexus, Artifactory等。

对象存储服务:比如阿里云OSS,AWS S3等,以阿里云为例,具体请参考此文在Jenkins持续集成方案中使用阿里云OSS作为Artifacts仓库

iOS的发布可能希望用到OTA,可参考此文

这里分享一个我写的shell脚本模板(已开源),可以用于iOS的plist文件自动创建以及OTA简单发布页面的自动创建,参考此链接获取源码, 欢迎Star.

自动生成一个简单HTML界面,如下图,点击Install即可安装:

Jenkis发布1

注意,这里iOS7.1以后限定必须要要用https,所以需要对jenkins设置下https,参考下面”后记” 中的Jenkins Https设置

Last Show

构建成功后最终的结果如下如所示:

后记

签名和证书问题(iOS)

Set up code signing for iOS projects

安装JENKINS到发布IPA中的那些坑

Jenkins Https Support

查询Jenkins Https相关命令:

1

java -jar jenkins.war --help|grep-ihttps

说明:下面以Mac为例.

KeyStore方式

生成:

1

keytool-genkey -keyalg RSA -aliasselfsigned-keystore keystore.jks -storepass 密码 -dname"cn=WEB"

使用:

1

java-jarjenkins.war--httpPort=-1--httpsPort=8080--httpsKeyStore=/目录/keystore.jks--httpsKeyStorePassword=密码

注意: 第一次使用时需要将”WEB”证书导入,导入步骤为:Chrome导出证书 -> 安装证书 -> 设置证书”全部允许”, 图解步骤可参考下面实用参考中的第5篇文章.

Certificate方式

生成:

1

2

3

openssl genrsa -out server.key1024

openssl req -new -key server.key-out server.csr

openssl x509 -req -inserver.csr-signkey server.key-out server.crt

使用:

1

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 JenkinsKeyStore方式

Generating a self-signed SSL certificate using the Java keytool command (2004193)KeyStore方式

Setup Self-Signed Certificates & Trusting them on OS XCertificate方式

免费openssl生成ssl证书Certificate方式

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发布

By SkySeraph-2016

版权声明

SkySeraphbySkySeraphis licensed under aCreative Commons BY-NC-ND 4.0 International License.

Bob创作并维护的SkySeraph博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证.

本文首发于SkySeraph博客(http://skyseraph.com),版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容