Jenkins 最详细的说明,包含Android与iOS 打包流程

1 Jenkins安装

1.1 JDK安装

略。

1.2 Jenkins安装

1.2.1 下载安装包

下载地址:(Generic Java package (.war))

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。
image.png
  • 点击新增JDK,将项目的jdk版本环境配置。本次使用的是jdk1.8.0,别名可以自己取,自己能区别就行。
image.png
  • 点击新增Gragle,这里一定要和工程的gradle 一样。(后面gradle有个选项会使用到,但是本次项目我是上传了.gradle文件,正常是要忽略的,所以没有用到这个;如果项目没有上传.gradle文件,这里就得配置和项目一样的.gradle )
image.png
  • 点击保存,重启jenkins 生效

2.2 环境配置

  • 点击Manage Jenkins,点击第一项Configure System,本次项目这个里面会配置ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.。
image.png
  • 找到全局属性,点击Environment variables,会弹出新增按钮,点击新增按钮,配置3个键值对。配置SDK,NDK(本次项目有使用到NDK,项目没有用到可以不配),Gradle(这个必须配置,否则打包会报资源错误);键名分别是ANDROID_HOME, ANDROID_NDK_HOME, GRADLE_USER_HOME.
image.png
  • 点击保存,重启jenkins 生效

2.3 工程构建

  • 在配置好工具和环境后,我们现在就可以来构建工程了。
image.png
  • 选择自由风格的项目。
image.png
  • 配置工作空间使其拉取项目到指定文件夹。如果这里不配置的话,会默认拉取到jenkins 的workspace文件夹里面。
image.png
image.png
  • 配置svn项目地址,注意:Local module directory面有个点。没有点会拉取到上一次目录文件夹,导致无法gradle 。
image.png
  • 打包环节:点击增加步骤,选择Invoke Gradle script
image.png
  • 本次项目我上传了gradlew文件,所以可以直接选择Use Gradle Wrapper,勾选Make gradlew executable.

Tasks 操作:
app:clean
app:assemble

  • 如果项目没有上传gradlew,可以使用之前工具配置的gradle,注意要和项目一致,最好直接从项目gradle文件夹拷贝出来。
image.png
  • 点击save,我们可以来到主页,点击Build Now,首次build 会拉取项目,时间较长。
image.png
  • 成功之后,apk文件在apk\app\build\outputs\apk里面打的debug 和release里面(具体看工程怎么配置的)。

2.4 配置自定义参数

  • 目前设置了一个版本参数,看自己需要什么,自己进行配置
image.png
  • 配置里面的下面点Advanced…展开Pass all job parameters as Project properties还需要勾选,否则不生效,如图:
image.png
  • 保存之后可以看到主界面出现了你的配置
image.png

2.5 自动上传蒲公英并生成二维码

  • 安装upload to pyger,在Post-build Actions里面选择Upload to pgyer with apiV2,填写api_key,api_key 获取key地址:https://www.pgyer.com/doc/api
image.png
  • 设置显示二维码
image.png
  • 二维码默认展示位文本,设置如下可显示图片:
image.png
image.png
  • 点击save .成功展示
image.png

2.6 使用痛点

  • 打包成功,上传蒲公英失败:
image.png

解决方法:打包目录文件夹设置准确,看Android gradle配置,apk名字要相同。


image.png
  • 打包成功,上传蒲公英失败:
image.png

解决办法:选择api2,api1不行


image.png
  • 项目编译打包失败:这个是遇到最多的坑。
image.png

解决方法:
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】的执行结果。

  • 网络问题编译失败,重新编译即可
image.png
  • 执行打包命令失败
image.png

解决方法: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,搜索上述两个插件下载安装即可。

image.png
image.png

3.2系统及插件配置

3.2.1系统配置

系统需要配置开发者信息:开发者团队名称和开发者团队ID(具体名称和ID见苹果开发者网站内开发者信息查看)。

管理Jenkins -> Configure System -> Xcode Builder。

image.png
image.png

3.2.2钥匙串插件配置(Keychains and Provisioning Profiles Management****)

  1. 此处需要上传两个文件

    • login.keychain文件,为了获取钥匙串的读取权限;

    • Provisioning Profiles文件,为了读取生成ipa包的描述文件;

  2. 设置路径:描述文件的读取路径

  3. 生成login.keychain文件:

    • 在终端输入:cd ~/Library/Keychains,键入 ls命令,如下图
image.png
  • 如何找到login.keychain文件
image.png

注意:macOS10.12以及以后的系统生成的是login.keychain-db文件,拷贝出来,去掉-db即可。

  1. 开始配置
image.png
image.png

Provisioning Profiles Directory Path 这 项 填写 /Users/用户名/Library/ MobileDevice/Provisioning Profiles
自此系统和钥匙串插件已配置好,开始构建iOS自动打包工程。

3.3工程构建

3.3.1创建工程

  1. 没有工程情况
image.png
  1. 存在工程情况
image.png
  1. 新建工程
image.png

3.3.2配置工程

  1. General
image.png
  1. 源码管理

源码管理一般有本地源码、git、SVN三种选择

以本项目为例,选择SVN

image.png

添加SVN账号

image.png
image.png
  1. 构建触发器

出发器可以定制Jenkins定时为项目自动打包,本项目需求是按需手动选择打包,此处可以不设置触发器内容。

image.png
  1. 构建环境

环境构建主要涉及两个步骤:

  • 配置 Keychains and Code Signing Identities,主要是用于Jenkins打包时,获取访问钥匙串的权限,拿到相应打包的证书;
image.png

注意:Variables不用手动输入,选择好证书之后,保存,再次打开时会自动填充。

  • 配置Mobile Provisioning Profiles,主要是配置正在打包所需的描述文件。
image.png

注意:Variables不用手动输入,选择好证书之后,保存,再次打开时会自动填充。

  1. 构建

5.1、增加构建步骤,选择Xcode

image.png

5.2、配置General build settings

下列选项必须配置,其他选项默认即可。

5.2.1、选择Development Team

image.png

5.2.2、设置Configuration:确定打出包的类型:Release或Debug

5.2.3、填写Xcode Schema File:一般是工程名称(TARGETS下所需要打包的工程名)

image.png

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

image.png

5.3、配置Code signing & OS X keychain options

5.3.1、选择Manual signing选项,填写Provisioning Profiles中的Bundle ID和Provisioning profile UUID。

image.png

那么这两个值如何设置呢?请看下列步骤:

正常使用Xcode打包时,生成一个打包文件,里面包含:DistributionSummary.plist、ExportOptions.plist、Packaging.log和XXXXX.ipa。

此时打开ExportOptions.plist,点开provisioningProfiles选项,里面分别就是Bundle ID和Provisioning profile UUID。

image.png

5.3.2、选择Unlock Keychain?选项,填写钥匙串访问路径及登录密码

image.png

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

image.png
  1. 保存

保存后,自动返回项目首页。

image.png

3.3.3 build

3.3.2步骤配置了一系列参数,总算拨云见日,到了该收获的时刻,开始build。点击Build Now,开始build,等待结果。

image.png

打包成功后的.ipa在哪里呢?请看图示:

image.png

注意:.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插件平台

image.png
image.png

3.4.3配置自动上传fir平台

插件上传成功之后,再次打开需要打包的项目页面:Jenkins -> 项目 -> 配置 -> 构建后操作。

image.png
image.png
image.png
image.png

完成build之后,fir平台上会有新的版本上传。

上传到fir平台的打包流程到此结束。

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