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

原文地址:http://skyseraph.com/2016/07/18/Tools/Jenkins%20Gitlab%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E6%89%93%E5%8C%85%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA/html

目录java

  1. 1. 相关概念2. 流程结构
    1. 1.1. Jenkins
    2. 1.2. Gitlab
    3. 1.3. CI
    4. 1.4. OTA
    5. 1.5. pgyer
  2. 3. 平台搭建
    1. 3.1. Jenkins安装和启动
    2. 3.2. Jenkins插件安装
    3. 3.3. Jenkins系统设置
    4. 3.4. Jenkins Jobs配置
      1. 3.4.1. Jobs基础配置
      2. 3.4.2. Jobs源码库配置(Gitlab为例)
      3. 3.4.3. Jobs触发条件配置
      4. 3.4.4. Jobs构建方式/编译 配置
      5. 3.4.5. Jobs构建后处理
  3. 4. 后记5. Refs
    1. 4.1. 签名和证书问题(iOS)
    2. 4.2. 邮件发送失败
    3. 4.3. Jenkins Https Support
  4. 6. 后记

 

相关概念

Jenkins

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

Gitlab

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

CI

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

OTA

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

pgyer

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

流程结构

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

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

持续交互流程图:
github

平台搭建

Jenkins安装和启动

官网https://jenkins.io/index.html
下载http://mirrors.jenkins-ci.org/war/latest/jenkins.war shell

安装: 服务器

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

启动 oracle

  • 手动启动: 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插件安装

插件安装app

操做: 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系统设置3Jenkis系统设置3

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

Jenkins Jobs配置

Jobs基础配置

配置编译参数

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

Jenkins编译设置-参数设置2Jenkins编译设置-参数设置2

你还能够配置一些其它参数,例如:

Jenkins编译设置-参数设置3Jenkins编译设置-参数设置3

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

Jenkins编译设置-参数设置1Jenkins编译设置-参数设置1

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

配置匿名用户权限

后面打包的应用发布时,若是懒得本身搭建服务器,就用Jenkins的,但发布出去的连接须要登陆才能访问,这时候你能够设置匿名用户的访问权限,这样匿名用户能够下载访问你提供的应用连接了,很是取巧的方法,以下图:

Jenkins编译设置-参数设置4.pngJenkins编译设置-参数设置4.png

Jobs源码库配置(Gitlab为例)

配置SSH

操做: Manage Jenkins -> Credentials -> Global credentials (unrestricted) -> Add Credentials

  1. 本机生成SSH:ssh-keygen -t rsa -C “Your email” , 生成过程当中需设置密码,最终生成id_rsa和id_rsa.pub(公钥)
  2. 本机添加秘钥到SSH:ssh-add 文件名(需输入管理密码)
  3. Gitlab上添加公钥:复制id_rsa.pub里面的公钥添加到Gitlab
  4. 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) 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和邮件通知配置,参考下图

Jenkins项目设置-Archive-minJenkins项目设置-Archive-min

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

Jenkins项目设置-邮件-minJenkins项目设置-邮件-min

发布

固然,若是不想本身的应用发布到三方网站,只但愿在本身的内网上托管,这样须要在本身内网上搭建服务器,服务器搭建方式有不少种,Mac上能够用自带的Apache服务,也能够用其它服务。

iOS的发布可能但愿用到OTA,可参考此文 还有这篇一步一步实现无线安装iOS应用(内网OTA)

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

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

Jenkis发布1Jenkis发布1

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

Last Show

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

后记

签名和证书问题(iOS)

邮件发送失败

  • 实际搭建过程当中有遇到此问题,折腾了小会,还觉得是公司邮箱地址为题,后面发现仅仅是一个小配置问题。
  • Extended E-mail Notification中也须要和E-mail Notification同样,点击Advanced,而后选择Use SMTP Authentication,配置同E-mail Notification的参数。

Jenkins Https Support

查询Jenkins Https相关命令:

1
java -jar jenkins.war --help | grep -i https

说明:下面以Mac为例.

KeyStore方式

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

Certificate方式

  • 生成:
1
2
3
4
5
sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr
sudo openssl genrsa -out ca.key 1024
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt
sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
  • 使用:

启动Jenkins:

1
java -jar jenkins.war --httpsPort=8088 --httpsCertificate=/path/server.crt --httpsPrivateKey=/path/server.key
  • 注意/说明:
    1 同上
    2 iOS手机须要导入cer证书(ca.crt)
    3 Common Name 填写IP地址或域名地址
    4 第5步骤若是提提示“I am unable to access the ./demoCA/newcerts directory” 错误,解决方法为:
    在当前操做目录,新建demoCA\newcerts2层文件夹
    而后再demoCA文件夹下新建一个空的index.txt文件
    再新建一个serial文件,没有后缀。里面填入01

实用参考

Refs

后记

本文首发于skyseraph.com“Jenkins Gitlab持续集成打包平台搭建”
同步发表/转载 cnBlogs / CSDN / …

相关文章
相关标签/搜索