iOS开发笔记ios 自己iOS杂技

iOS持续集成篇

2017-09-11  本文已影响334人  paintingStyle
概述

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

集成条件

主要实现流程

最终将会实现:你只用上传代码到服务器指定的分支✌️,剩下的工作都将自动化,你的App最终将会直接到测试人员手中,省去中间重复无意义的工作流程

说明:
1,研究持续集成,遇到的坑多不胜数,出现的问题已在文章中做了说明
2,配置环境比较繁琐,若你是单人开发在本机构建,可只安装使用fastlane,使用文章最后提供的脚本完成自动打包上传的功能

一,前置环境

1.1,安装ruby环境 如果你安装过CocoPods,可输入

$ ruby -v (显示版本大于2.0不用安装)

出现报错信息或者版本小于2.0,请参考此链接安装或更新,此处不做累述。

1.2,安装brew

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

安装成功输入,会跳转到Homebrew官网,即为成功

$ brew home

1.3,Jenkins依赖于Java环境,首先需安装和配置Java环境

$ brew cask install java 

1.4, 详细命令可使用 brew help 查看


二,安装fastlane

Fastlane 是一个 ruby 脚本集合成的套件, 包括了向 App Store 提交新应用或更新已有应用所需要的常用任务,相比自定义脚本,稳定性和功能会更多。

2.1,依次执行下列命令

$ xcode-select --install

已安装出现错误提示:

xcode-select: error: command line tools are already installed, use    
"Software Update" to install updates ,可跳过这一步

未安装,点击安装会出现弹框提示,点击安装

$ brew cask install fastlane (输入密码等待安装成功)

安装成功后提示: fastlane was successfully installed!

$ export PATH="$HOME/.fastlane/bin:$PATH"  (安装成功后执行)

$ fastlane env (查看fastlane当前环境,会提示你是否复制到剪切板,输入n即可)

$ fastlane -version (输出版本信息即为成功)

2.2,安装蒲公英插件

 $ fastlane add_plugin pgyer

2.3,在.xcodeproj项目目录下,初始化fastlane:

 $ fastlane init

终端会提示要你填写你的开发者账号与密码,然后fastlane会自动检测当前目录下项目的App Name和App Identifier、Project。然后自行确认并按流程执行

2.4,若你的项目使用了Cocopods,在Gemfile文件中加入下面代码:

gem "cocoapods"

三,安装Jenkins

Jenkins是用java编写的开源持续集成工具,可在此步步骤做代码静态检查,语法检查,脚本自动化测试,根据测试结果发布最稳定的版本等,大公司用的比较多,功能很强大,支持多样化的插件机制,支持Git,SVN。

Jenkins的安装方式

3.1,点击apache-tomcat-8.5.20下载文件,并解压重命名为Tomcat,复制到资源库目录下

01.png

3.2,cd 到Tomcat文件的bin目录下,给sh文件赋予管理员权限,按提示输入密码

$ sudo chmod 755 /Users/用户名/Library/Tomcat/bin/*.sh

3.3, 然后执行

$ sudo sh startup.sh
02.png

3.4,浏览器输入 localhost:8080 打开页面如下,即安装成功!

03.png

3.5,添加环境变量
因为startup.sh与shutdown.sh需要在Tomcat的bin目录下执行,每次输入路径比较麻烦,设置以下环境变量即可

$ touch .bash_profile (创建bash_profile)
$ open -e .bash_profile(打开bash_profile)
$ export PATH=$PATH:/Users/用户名/Library/Tomcat/bin (在打开的bash_profile中输入) 
$ source .bash_profile (更新配置的环境变量)
$ echo $PATH (验证是否成功)

3.5,配置JENKINS_HOME,这一步很重要,如果不配置将会创建到私有目录下,各种权限访问不到!

在Tomcat的bin目录下,编辑 catalina.sh 文件 找到如下代码

# OS specific support.  $var _must_ be set to either true or false.
在上面的代码上面一行添加下面这句话,在引号中填入你的路径,
可在资源库创建.jenkins文件夹用于存放,如下图所示
export JENKINS_HOME="Jenkins构建的项目存放的路径"
04.png 05.png

3.7,设置完毕上面的环境变量,可使用如下命令操作tomcat

$ sudo sh startup.sh  (启动tomcat)
$ sudo sh shutdown.sh (关闭tomcat)

3.8,下载war,将war文件移动到Tomcat文件夹的webapps目录下

06.png

3.9,打开链接 localhost:8080/jenkins/ 启用Jenkins,等待大概两分钟左右就启动完成了

开启secrets目录权限,
$ sudo chmod 755 /Users/用户名/.jenkins/secrets 

然后如下图打开initialAdminPassword,复制密码粘贴到文本框中

07.png

3.10,选择左侧的选项,安装jenkins推荐的插件就可以了

08.png

3.11,等待大概10分钟左右就安装完成了

09.png

3.12,输入对应信息,防止忘记你可以使用你电脑的名称与密码,注意密码忘记了你只能重装Jenkins

10.png

3.13,点击开始使用Jenkins按钮

11.png
四,配置Jenkins

4.1,大功告成!点击创建一个新任务

12.png

4.2,输入项目名称,选择第一项构建一个自由风格的软件项目,点击OK,有时候出现加载中的情况,多刷新几次页面即可

13.png

4.3,输入描述信息,项目构建久了会有很多老旧的构建不需要,一个个删除比较麻烦,初始化项目可设置丢弃旧的构建选项,填写保持构建的天数,保持构建的最大个数,这里设置保持7天,最大构建个数为30

14.png

4.4,点击上方源码管理菜单,选中Git选项
Repository URL:项目地址
Branch Specifier (blank for 'any') :分支,默认为master,这里设置的develoepr

15.png

4.5,若你的Repository URL地址为SSH,你需要点击Credentials 右侧 的Add按钮,然后选中Jenkins选项配置SSH公钥
Kind选项,如下图所示选择SSH

16.png

4.6,选中 Private Key 的Enter directly 按钮,输入用户名与SHH公钥,点击Add

17.png

4.7,选中你所添加的用户秘钥,然后点击最下方保存按钮

18.png

4.6,添加shell脚本

选择上面的构建菜单,点击底部增加构建步骤,选择第二项 Execute shell

19.png

输入如下脚本

#cd到项目fastlane文件夹所在根目录,一般为.xcodeproj所在目录,这里是相对路径
cd ./fastlane文件夹所在根目录/

#打印当前的路径,验证是否正确
pwd

# 项目名称
IPANAME="项目名称"

echo "正在打包中..."

# 使用fastlane打包,注意这里的scheme填入你项目对应scheme即可
fastlane gym --scheme scheme --export_method ad-hoc --output_name ${IPANAME}

echo "上传蒲公英..."

#注意:
#其中,USER_KEY 和 API_KEY 可以在蒲公英的「账户设置」中找到,之后进行相应替换。
#export_method 可以根据打包类型进行相应设置。
#可选的值有:app-store、ad-hoc、development、enterprise。
#对于 Xcode 8.3 以下的版本,则不需要设置 export_method。
curl -F "file=@${IPANAME}.ipa" -F "uKey=USER_KEY" -F "_api_key=API_KEY" https://qiniu-storage.pgyer.com/apiv1/app/upload

4.7,保存修改,回到主界面,点击系统管理进入系统设置
(全局设置&路径),勾选Environment variables, 终端输入

$ echo $PATH 

复制输出的值,在键值对列表中,键填入PATH,值填入复制输出的值

配置Environment variables.png
4.8,定时构建

选择上面的构建触发器菜单

Build periodically选项:
定时触发构建,输入H */1 * * *

 H */1 * * * (H */1 表示每小时任意分钟执行一次)

Poll SCM (poll source code management) 选项
轮询源码管理,需要设置源码的路径才能起到轮询的效果。一般设置为类似结果: 0/5 每5分钟轮询一次

20.png

点击保存,回到主界面点击立即构建,点击#1可查看第一次构建的信息

21.png

进入点击 左侧Console Output 查看日志,这里显示打包上传蒲公英成功!

22.png
4.9,自动化构建

4.9.1,点击最上方Jenkins头像,回到主页面,点击主页面的系统配置按钮

23.png

4.9.2,点击第六项,管理插件

24.png

4.9.3,选中可选插件选项,依次安装插件

25.png

4.9.4,安装到最后一项的时候,勾选安装完成后重启Jenkins,重启后需要重新登录,可选中在这台计算机上保持登录状态

26.png

4.9.5,重新进入项目的配置页面,选择上面的构建触发器菜单

  $ openssl rand -hex 12
27.png

4.9.6,根据身份验证令牌下的提示,拼接webHook URL

JENKINS_URL/job/tyfocgApp(iOS)/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME

例如如下链接,中间不能有空格,如果是本机需要设置端口号
http://192.168.91.33:8080/buildByToken/build?job=tyfocgApp(iOS)&token=26acd09446289127aaa7f8d0

4.9.7,进入GitLab对应的项目,点击左侧菜单的Setting按钮(此选项需要权限,没有此选项找仓库管理员开通),选择Web Hook 填入上方的地址,点击AddWebhook即可

什么是webhooks呢?

钩子功能(callback),是帮助用户push了代码后,自动回调一个您设定的http地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等),例如你提交代码到仓库,钉钉上会有消息通知,也是通过钩子实现的。

28.png

4.9.8,点击下方的Test Hook按钮测试此链接

链接有效
Hook successfully executed.
链接无效,请检查Git服务器能否访问你的链接地址,如果是本地域名,请绑一下hosts。需在同一网段,比如同是局域网环境,或同是外网环境
Hook execution failed. Ensure hook URL is correct and service is up.

此时需要再重启一下GitLab服务器,此时可修改代码,提交GitLab,测试是否触发构建
如果点Test可以成功布署,但提交git还是不会自动布署,请执行

$ /opt/codereview/phabricator/bin/phd start)

现在push代码到develoer分支,你会发现Jenkins自动执行构建任务,checkout代码, 触发脚本打包上传蒲公英,一分钟后你将收到蒲公英的邮件短信通知✌️

五,异常情况

这个情况一般是由于 jenkins 没有设置正确的 $PATH 环境变量导 致的。正确设置的方法为:

$ echo $PATH

记录上面命令输出的结果在Jenkins 中系统管理-系统设置中,
找到 环境变量(Environment variables),选中此项
在 key 中填写 PATH,在 value 中填写第一步中输出的结果
保存即可

该功能可能造成使用直接POST请求触发自动构建报错403,在Jenkins系统管理中点击Configure Global Security,去掉勾选防止跨站点请求伪造功能即可

29.png
六,卸载Jenkins

5.1,通过安装包安装的卸载方式

  cmd+shift+g 前往文件夹 输入
  /Library/Application\ Support/Jenkins/  
  点击Uninstall.command 

5.1,通过Homebrew安装的卸载方式

$ brew uninstall jenkins

5.3 通过Tomcat+war安装删除Tomcat对应的Jenkin文件夹即可

六,fastfile脚本

打开项目fastlane目录下的文件夹,将下列代码替换到Fastfile文件中

#使用方法 cd到项目.xcworkspace目录 终端输入 fastlane automaticPackagingUpload

# 定义fastlane版本号
fastlane_version “2.55.0” 

# 定义打包平台
default_platform :ios

#指定项目的scheme名称
scheme = “ scheme”

#蒲公英api_key和user_key
api_key  = “api_key”
user_key = “user_key”


def updateProjectBuildNumber

currentTime = Time.new.strftime("%Y%m%d")
build = get_build_number()
if build.include?"#{currentTime}."
# => 为当天版本 计算迭代版本号
lastStr = build[build.length-2..build.length-1]
lastNum = lastStr.to_i
lastNum = lastNum + 1
lastStr = lastNum.to_s
if lastNum < 10
lastStr = lastStr.insert(0,"0")
end
build = "#{currentTime}.#{lastStr}"
else
# => 非当天版本 build 号重置
build = "#{currentTime}.01"
end
puts("*************| 更新build #{build} |*************")
# => 更改项目 build 号
increment_build_number(
build_number: "#{build}"
)
end


# 任务脚本
platform :ios do
lane :automaticPackagingUpload do|options|
branch = options[:branch]

puts “*************| 开始打包.ipa文件 |*************”

updateProjectBuildNumber #更改项目build号

# 开始打包
gym(
#输出的ipa名称
output_name:”#{scheme}_#{get_build_number()}”,
#指定项目的scheme
scheme:"#{scheme}",
# 是否清空以前的编译信息 true:是
clean:true,
# 指定打包方式,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"ad-hoc",
# 指定输出文件夹
output_directory:"~/Desktop/fastlaneBuild",
)

puts “*************| 开始上传蒲公英 |*************”

# 开始上传蒲公英
pgyer(api_key: “#{api_key}”, user_key: “#{user_key}”)

puts “*************| 上传蒲公英成功!|*************”

end
end

使用方法
1,cd到项目.xcworkspace目录

$ fastlane automaticPackagingUpload

2,在桌面fastlaneBuild目录下生成对应的.iap文件

ipa 文件上传到蒲公英后通知其他人
如果开发者想让 Jenkins 打包并上传 ipa 文件到蒲公英后,自动通知其他人(常用于通知 App 相关的测试者),那么可以利用蒲公英的通知功能。蒲公英本身已经支持了邮件通知、短信通知、微信通知。具体设置方法可以点击这里查看: 接收应用更新通知

八,后序

把一件事写明白,煞费苦心,如果你阅读了本文章,有什么问题欢迎交流,简书会不定期更新,喜欢的可以点关注❤️

30.jpg
九,参考链接

使用 Fastlane 上传 App 到蒲公英 (官方文档)
Git钩子:自定义你的工作流 (推荐阅读)
OC静态代码检查及持续集成(xcode analyzer+oclint+xcpretty)
自动化工具Fastlane: 安装, 打包,上传(testFlight,app store)
iOS自动化打包发布(Jenkins + Fastlane + GitLab + 蒲公英)
自动化测试定时构建---Jenkins时间轮询配置
Jenkins 定时构建
关于Mac上部署Jenkins的一些个人习惯
APP主题测试自动化:Fastlane篇

上一篇 下一篇

猜你喜欢

热点阅读