Mac os上为iOS项目搭建Jenkins自动化构建
前置工作
-
安装Homebrew
使用如下命令安装Homebrew,如果已经安装过,则跳过:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
失败的话选择使用国内镜像安装,命令如下(参考:https://zhuanlan.zhihu.com/p/111014448 ):
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
-
安装JDK8
使用如下命令安装JDK8,如果已经安装过,则跳过:
brew cask install homebrew/cask-versions/adoptopenjdk8
安装jenkins
-
安装
使用如下命令安装jenkins:
brew install jenkins
报错【fatal: not in a git directory】的解决办法:
执行brew -v,可以看到git会提示homebrew-core和homebrew-cask目录被认为不是一个安全的目录,需要手动添加,依照提示的命令执行即可,命令如下:
- git config --global --add safe.directory 你的homebrew-core路径
- git config --global --add safe.directory 你的homebrew-cask路径
-
运行
使用如下命令开启、关闭、 重启jenkins服务:
# 启动jenkins
brew services start jenkins
# 停止jenkins
brew services stop jenkins
# 重启jenkins
brew services restart jenkins
-
初始化jenkins配置:
打开浏览器,输入如下地址,可进入jenkins可视化界面:
localhost:8080
-
配置局域网ip地址访问:
通常刚刚初始化的jenkins无法通过局域网ip地址访问,需要我们更改homebrew.mxcl.jenkins.plist配置参数中的httpListenAddress为0.0.0.0;端口号默认为8080,可按需要修改。
homebrew.mxcl.jenkins.plist文件可能存放在如下路径中,找到他(参考:https://www.csdn.net/tags/MtTaMg4sNjM1Njk4LWJsb2cO0O0O.html ):
/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
/opt/homebrew/opt/jenkins/homebrew.mxcl.jenkins.plist
配置完成后,执行如下命令,重启jenkins服务:
brew services restart jenkins
重启完成后,在浏览器中输入【ip地址:端口号】测试是否可以打开jenkins可视化界面。
在jenkins上搭建iOS项目
-
必要插件
- 安装插件:Git Parameter Plug-In
分支选择器,git参数化构建流程需要
-
可选插件
- 安装插件:AnsiColor
控制台颜色输出,此插件需要在后续的项目中配置中,勾选Color ANSI Console Output,下拉选项默认为xterm即可
AnsiColor.png -
配置项目
-
选择构建一个多配置项目
构建一个多配置项目.png -
General中首先配置丢弃旧的构建的规则
使用5 20策略,如图:
image.png- General中的参数化构建过程中,首先添加git参数
此参数用于获取git仓库指定分支、标签的代码,如下图(此项为之前安装的Git Parameter Plug-In插件的功能):
注:此处所有的参数皆为当前Shell脚本的环境变量,可使用
Git参数.png$参数名
或${参数名}
获取,例如图示中的参数可通过$SELECTED_BRANCH
来获取
- General中的参数化构建过程中,根据自己的需要,添加其他类型的参数
这里简单举一个例子,例如打包环境,添加参数如下:
打包环境参数配置.png
在参数化构建过程中添加的构建参数,会在开发者构建时展示在jenkins构建界面上(提前展示一下):
构建时看到的输入界面.png- 源码管理中输入代码仓库信息
如下图图配置git相关参数:
【关于多仓库项目】:这里配置多仓库项目的清单仓库,所有组件仓库的分支名建议相同,后续构建流程有说明
- 通常持续化集成构建流程中,我们会直接指定一个确定的分支,例如:【origin/Develop】
-
手动构建流程中,我们会将指定分支指向开发人员选择的git参数
Git仓库配置.png
- 在构建中添加Shell脚本,来灵活的控制项目整体构建流程
- jenkins自动拉取的代码库存放在如下路径
/Users/用户名/.jenkins/workspace/项目名
- 这里可以通过shell主控脚本,来控制本地代码仓库中的其他脚本,来实现编译、导出ipa、上传第三方分发平台、上传appstore、发送打包完成邮件、发送打包信息到钉钉或飞书等移动办公软件、上传dsym至bugly、导出git指定时间段的提交记录等功能
-
【关于多仓库项目】:这里提供给一个思路,可先获取git参数变量,据此来拉取各个仓库代码到jenkins的workspace,后续构建流程使用脚本中拉取的代码库来构建
Shell主控脚本.png
-
-
构建脚本相关
iOS的自动打包脚本,网络上有很多(自动签名、手动配置证书无论那种都可以在百度搜一下),这里就不提供详细脚本了,简单指一条传送门:iOS Xcode 自动打包,一键上传AppStore脚本
不过还是有一些编写多流程构建脚本的相关技巧提供给大家:
-
Shell子脚本使用主脚本中定义的参数:
可在主脚本中奖变量用export修饰到环境变量,后续子脚本中即可捕获此变量值
例如:
export CATCH_SMB_ARCHIVE_NAME=" " export SETTED_LOG_START_DATE
-
Python脚本中获取shell脚本定义的环境变量:
使用os库中的environ方法:【os.environ[变量名]】
例如:
# Shell export SETTED_LOG_START_DATE # Python settedLogStartDate = os.environ['SETTED_LOG_START_DATE']
-
Shell子脚本修改主脚本变量值
shell自脚本是无法修改主脚本变量值的(修改无效),这里可以将自脚本拉倒与主脚本相同进程下执行,同一进程下的脚本是可以相互修改其变量值的
# 以子进程的方式执行脚本: sh shell.sh # 同进程下执行脚本: . shell.sh