1 Jenkins安装
1.1 JDK安装
略。
1.2 Jenkins安装
1.2.1 下载安装包
1.2.2 编写运行脚本
#! /bin/sh
# chkconfig: 2345 10 90
# description: jenkins ....
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
# prefix=/Users/madp/Public/env/jenkins
# @auth: Joe
JENKINS_ROOT=/Users/teana/Public/self/env/jenkins
JENKINSFILENAME=jenkins.war
#停止方法
stop(){
echo "Stoping $JENKINSFILENAME "
ps -ef|grep $JENKINSFILENAME |awk '{print $2}'|while read pid
do
kill -9 $pid
echo " $pid kill"
done
}
mecho(){
words="启,动,中,.,.,."
array=(`echo $words | tr ',' ' '`)
for word in ${array[@]}
do
echo "$word\c"
sleep 1
done
}
case "$1" in
start)
echo "Starting $JENKINSFILENAME "
nohup java -jar $JENKINS_ROOT/$JENKINSFILENAME --httpPort=8080 >> $JENKINS_ROOT/jenkins.log 2>&1 &
mecho
open 'http://127.0.0.1:8080'
tail -f $JENKINS_ROOT/jenkins.log
;;
stop)
stop
;;
restart)
stop
start
;;
status)
ps -ef|grep $JENKINSFILENAME
;;
*)
printf 'Usage: %s {start|stop|restart|status}\n' "$prog"
exit 1
;;
Esac
注意事项:
注意替换[JENKINS_ROOT]****变量,(即:****jenkins.war****的位置)
启动:sh jenkins.sh start
停止:sh jenkins.sh stop
重启:sh jenkins.sh restart
检查:sh jenkins.sh status
2Android配置
2.1 工具设置
- 点击Manage Jenkins,点击第四项Global Tool Configuration,本次项目这个里面会配置JDK和GRADLE。
- 点击新增JDK,将项目的jdk版本环境配置。本次使用的是jdk1.8.0,别名可以自己取,自己能区别就行。
- 点击新增Gragle,这里一定要和工程的gradle 一样。(后面gradle有个选项会使用到,但是本次项目我是上传了.gradle文件,正常是要忽略的,所以没有用到这个;如果项目没有上传.gradle文件,这里就得配置和项目一样的.gradle )
- 点击保存,重启jenkins 生效
2.2 环境配置
- 点击Manage Jenkins,点击第一项Configure System,本次项目这个里面会配置ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.。
- 找到全局属性,点击Environment variables,会弹出新增按钮,点击新增按钮,配置3个键值对。配置SDK,NDK(本次项目有使用到NDK,项目没有用到可以不配),Gradle(这个必须配置,否则打包会报资源错误);键名分别是ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.
- 点击保存,重启jenkins 生效
2.3 工程构建
- 在配置好工具和环境后,我们现在就可以来构建工程了。
- 选择自由风格的项目。
- 配置工作空间使其拉取项目到指定文件夹。如果这里不配置的话,会默认拉取到jenkins 的workspace文件夹里面。
- 配置svn项目地址,注意:Local module directory面有个点。没有点会拉取到上一次目录文件夹,导致无法gradle 。
- 打包环节:点击增加步骤,选择Invoke Gradle script
- 本次项目我上传了gradlew文件,所以可以直接选择Use Gradle Wrapper,勾选Make gradlew executable.
Tasks 操作:
app:clean
app:assemble
- 如果项目没有上传gradlew,可以使用之前工具配置的gradle,注意要和项目一致,最好直接从项目gradle文件夹拷贝出来。
- 点击save,我们可以来到主页,点击Build Now,首次build 会拉取项目,时间较长。
- 成功之后,apk文件在apk\app\build\outputs\apk里面打的debug 和release里面(具体看工程怎么配置的)。
2.4 配置自定义参数
- 目前设置了一个版本参数,看自己需要什么,自己进行配置
- 配置里面的下面点Advanced…展开Pass all job parameters as Project properties还需要勾选,否则不生效,如图:
- 保存之后可以看到主界面出现了你的配置
2.5 自动上传蒲公英并生成二维码
- 安装upload to pyger,在Post-build Actions里面选择Upload to pgyer with apiV2,填写api_key,api_key 获取key地址:https://www.pgyer.com/doc/api。
- 设置显示二维码
- 二维码默认展示位文本,设置如下可显示图片:
- 点击save .成功展示
2.6 使用痛点
- 打包成功,上传蒲公英失败:
解决方法:打包目录文件夹设置准确,看Android gradle配置,apk名字要相同。
- 打包成功,上传蒲公英失败:
解决办法:选择api2,api1不行
- 项目编译打包失败:这个是遇到最多的坑。
解决方法:
gradle 地址配置错误。
gradle 全局环境没有配置,详情见3.7.2环境配置中的GRADLE_USER_HOME。
gradle 与项目不一致。
网络错误。
目标文件目录包含中文
有时目标文件夹目录过长也会引发这个问题
- 编译出来的项目没有二维码,只显示标签:
解决方法:只需要在Jenkins系统设置里Configure Global Security的标记格式器由Plain text改为Safe HTML把显示修改下即可,切记:重启jenkins.
- 二维码图片显示空白,没有边框,没有图片
解决方法:原因:【Upload to pgyer with apiV2】的选项默认在【Set build desription】之后了,把这两选项顺序对换一下即可,因为【Set build desription里的appQRCodeURL值依赖【Upload to pgyer with apiV2】的执行结果。
- 网络问题编译失败,重新编译即可
- 执行打包命令失败
解决方法:Local module directory面有个点。详情见2.3.
3iOS配置
iOS基于Jenkins的自动打包配置。
3.1必要插件下载
3.1.1证书管理插件
Keychains and Provisioning Profiles Management
3.1.2 Xcode构建插件
Xcode integration
3.1.3插件下载管理图示
进入Jenkins主界面:打开Manage Jenkins -> Manage Plugins,搜索上述两个插件下载安装即可。
3.2系统及插件配置
3.2.1系统配置
系统需要配置开发者信息:开发者团队名称和开发者团队ID(具体名称和ID见苹果开发者网站内开发者信息查看)。
管理Jenkins -> Configure System -> Xcode Builder。
3.2.2钥匙串插件配置(Keychains and Provisioning Profiles Management****)
-
此处需要上传两个文件
login.keychain文件,为了获取钥匙串的读取权限;
Provisioning Profiles文件,为了读取生成ipa包的描述文件;
设置路径:描述文件的读取路径
-
生成login.keychain文件:
- 在终端输入:cd ~/Library/Keychains,键入 ls命令,如下图
- 如何找到login.keychain文件
注意:macOS10.12以及以后的系统生成的是login.keychain-db文件,拷贝出来,去掉-db即可。
- 开始配置
Provisioning Profiles Directory Path 这 项 填写 /Users/用户名/Library/ MobileDevice/Provisioning Profiles
自此系统和钥匙串插件已配置好,开始构建iOS自动打包工程。
3.3工程构建
3.3.1创建工程
- 没有工程情况
- 存在工程情况
- 新建工程
3.3.2配置工程
- General
- 源码管理
源码管理一般有本地源码、git、SVN三种选择
以本项目为例,选择SVN
添加SVN账号
- 构建触发器
出发器可以定制Jenkins定时为项目自动打包,本项目需求是按需手动选择打包,此处可以不设置触发器内容。
- 构建环境
环境构建主要涉及两个步骤:
- 配置 Keychains and Code Signing Identities,主要是用于Jenkins打包时,获取访问钥匙串的权限,拿到相应打包的证书;
注意:Variables不用手动输入,选择好证书之后,保存,再次打开时会自动填充。
- 配置Mobile Provisioning Profiles,主要是配置正在打包所需的描述文件。
注意:Variables不用手动输入,选择好证书之后,保存,再次打开时会自动填充。
- 构建
5.1、增加构建步骤,选择Xcode
5.2、配置General build settings
下列选项必须配置,其他选项默认即可。
5.2.1、选择Development Team
5.2.2、设置Configuration:确定打出包的类型:Release或Debug
5.2.3、填写Xcode Schema File:一般是工程名称(TARGETS下所需要打包的工程名)
5.2.4、选择Pack application, build and sign .ipa?
5.2.4.1、配置Export method:即导出包方式,development、ad-hoc、enterprise、或者app-store
5.2.4.2、填写.ipa filename pattern:即导出.ipa包的名称,如XXX.ipa
5.3、配置Code signing & OS X keychain options
5.3.1、选择Manual signing选项,填写Provisioning Profiles中的Bundle ID和Provisioning profile UUID。
那么这两个值如何设置呢?请看下列步骤:
正常使用Xcode打包时,生成一个打包文件,里面包含:DistributionSummary.plist、ExportOptions.plist、Packaging.log和XXXXX.ipa。
此时打开ExportOptions.plist,点开provisioningProfiles选项,里面分别就是Bundle ID和Provisioning profile UUID。
5.3.2、选择Unlock Keychain?选项,填写钥匙串访问路径及登录密码
5.4、配置Advanced Xcode build options
5.4.1、勾选Clean test reports?
5.4.2、填写Xcode Workspace File(针对使用了pod导入三方库的工程)或者Xcode Project Directory(针对普通工程,即未使用pod导入三方库的工程)路径,一般是Jenkins分配的工作空间路径:如${WORKSPACE}/XXXXX/XXXXX,XXXXX是工程的名称,根据具体工具替换即可。
5.4.3、填写Build output directory路径,即打完包后.ipa导出路径,一般默认Jenkins分配的工作空间路径:${WORKSPACE}/build
- 保存
保存后,自动返回项目首页。
3.3.3 build
3.3.2步骤配置了一系列参数,总算拨云见日,到了该收获的时刻,开始build。点击Build Now,开始build,等待结果。
打包成功后的.ipa在哪里呢?请看图示:
注意:.jenkins是隐藏文件,记得打开查看隐藏文件权限。
恭喜你,到此Jenkins对iOS打包就此结束。
3.4自动上传fir移动发布平台
上述步骤结束之后,可以获取.ipa包,可以一般需要将.ipa包发布到应用发布平台,供测试人员下载测试。Jenkins也提供了自动上传至蒲公英、fir等平台的功能,只需到相关平台下载插件,配置好相关参数即可。下列以fir平台为例,演示Jenkins如何将生成的.ipa包发布到fir平台上.
3.4.1下载fir插件
下载地址及使用方法见:http://blog.fir.im/jenkins/
3.4.2上传fir插件到Jenkins插件平台
3.4.3配置自动上传fir平台
插件上传成功之后,再次打开需要打包的项目页面:Jenkins -> 项目 -> 配置 -> 构建后操作。
完成build之后,fir平台上会有新的版本上传。
上传到fir平台的打包流程到此结束。