Jenkins持续集成iOS项目

(Continuous Integration)
-自动编译打包IPA-

持续集成是一种软件开发实践:许多团队频繁地集成他们的工作,每位成员通常进行日常集成,进而每天会有多种集成。每个集成会由自动的构建(包括测试)来尽可能快地检测错误。许多团队发现这种方法可以显著的减少集成问题并且可以使团队开发更加快捷。

CI是一种开发实践。实践应该包含3个基本模块,一个可以自动构建的过程,自动编译代码,可以自动分发,部署和测试。一个代码仓库,SVN或者Git。最后一个是一个持续集成的服务器。通过持续集成,可以让我们通过自动化等手段高频率地去获取产品反馈并响应反馈的过程。

步骤如下:
安装Jenkins
下载地址:https://jenkins.io/ 上下载最新的pkg安装包。

image.png

image.png

image.png

image.png

[图片上传中...(image.png-602371-1517382116220-0)]

image.png

安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

这个时候可能会报一个错误。如果出现了这面的问题。出现这个问题的原因就是Java环境有问题,重新Java环境即可。

这个时候如果你重启电脑会发现Jenkins给你新增了一个用户,名字就叫Jenkins,不过这个时候你不知道密码。你可能会去试密码,肯定是是不对的,因为初始密码很复杂。这个时候正确做法是打开http://localhost:8080 会出现重设初始密码的界面[图片上传中...(屏幕快照 2018-02-07 下午2.35.50.png-ab5e80-1517985423920-0)]

按照提示,找到/Users/Shared/Jenkins/Home/ 这个目录下,这个目录虽然是共享目录,但是有权限的,非Jenkins用户/secrets/目录是没有读写权限的。

image.png

image.png

打开initialAdminPassword文件,复制出密码,就可以填到网页上去重置密码了。如下图


image.png

image.png

image.png
image.png
image.png

image.png
image.png

一路安装过来,输入用户名,密码,邮件这些,就算安装完成了。
还是继续登录localhost:8080 ,选择“系统管理”——“管理插件”,我们要先安装一些辅助插件。

三、配置Jenkins用户
1、默认情况下,Jenkins是不能登录和注册的,必须配置之后页面才能出现登录和注册的页面。

2、步骤:点击“首页面”—>“系统管理” —> “Configure Global Security”,
配图如下:

[图片上传失败...(image-7d248b-1517985499900)]
490CDA80-2252-463F-B4B5-0AAAC8C2A783.png
image.png

3、Configure Global Security配置:


image.png

4、注册:


image.png
image.png

5、登录:

四、安装管理插件
1、步骤:点击“首页面”—>“系统管理”—> “管理插件”—> “可选插件”
2、可选插件
在“可选插件”中选中“GitLab Plugin”和“Gitlab Hook Plugin”这两项,然后安装。


image.png

3)安装Xcode插件
同安装GitLab插件的步骤一样,我们依次选择系统管理->管理插件,在“可选插件”中选中“Xcode integration”安装。


image.png

Keychains and Provisioning Profiles Management(打包签名)
举例配图:

image.png

image.png

五、配置keychains and Provisioning Profiles Management
1、前提:Mac电脑安装好“开发者签名证书” 和 “Provisioning证书(打包IPA)”
2、步骤:点击“首页面”—>“系统管理”—> “Keychain and Provisioning Profiles Management”
tips:必须先安装Keychains and Provisioning Profiles Management 插件才可以看到此链接


image.png

3、配置Keychains

1) Step one: 上传System.keychain到Jenkins目录


image.png
    Jenkins查看上传的keychain路径:
        /Users/Shared/Jenkins/Home/kpp_upload
image.png
    2) Step two: 配置Keychains的具体信息 

    tips:如果不知道签名在哪里的,可以去Mac电脑应用程序中找到“钥匙串访问”,拷贝出签名,粘贴到上图(4)步骤中 
image.png
4、配置Provisioning Profiles
    1) Step one: 上传xxxx.mobileprovision到Jenkins目录
    如同配置Keychains的 Step one一致,只是文件路径不一样
        tips:不知道xxxx.mobileprovision在哪?
        去开发者网站下载(具体细节自己百度)
        https://developer.apple.com/

    2) Step two:配置Provisioning Profiles 具体信息 
image.png
5、以上配置完成
    1) 配置不正确的,可以重新删除再配置
    2) 这里配置是iPhone Developer案例,值得注意的是证书导入钥匙串后要修改下权限,如下图:
image.png

六、新建Jobs
1、步骤:点击“首页面”—>“新建”

image.png

2、配置“源码管理”—> Git
1) Repository URL : 仓库地址
2) Credentials : 仓库用户名和密码
3) 配置完成,构建一次,看是否能从Git获取代码,
并保存到Jenkins用户中。
3、构建


image.png

脚本如下:

#项目路径
Jobname="/Users/yingjinping/workspace/jenkins/workspace/ios/Consumer-iOS-Channel/"
#项目名称
AppName="Consumer-Ios"
#ipa的外部统一存放文件夹
DeployName="ConsumerDeploy"
#证书
CODE_SIGN_DISTRIBUTION="iPhone Developer: tengfei shao"
# info.plist路径
project_infoplist_path=${Jobname}${AppName}/Info.plist

echo ${project_infoplist_path}
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${project_infoplist_path})
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#日期(到哪一天)
DATE_DAY="$(date +%Y%m%d)"
#日期(到秒)
DATE="$(date +%Y%m%d)-$(date +%H%M%S)"
echo ${bundleShortVersion}
echo ${bundleVersion}
echo ${DATE}
echo ${DATE_DAY}

#!/bin/sh
# 解锁对login.keychain的访问,codesign会用到
security unlock-keychain -p 123456 /Users/yingjinping/Library/Keychains/login.keychain
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k 123456 /Users/yingjinping/Library/Keychains/login.keychain
security set-keychain-settings /Users/yingjinping/Library/Keychains/login.keychain
# 清除
xcodebuild -workspace ${Jobname}${AppName}.xcworkspace -scheme ${AppName}  -configuration 'Debug' clean
# 打包签名
xcodebuild -workspace ${Jobname}${AppName}.xcworkspace -scheme Consumer-Ios -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="iPhone Developer: tengfei shao"
#创建ipa的存放路径
mkdir -p ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}
# 导出ipa
xcrun -sdk iphoneos PackageApplication -v /Users/yingjinping/Library/Developer/Xcode/DerivedData/Consumer-Ios-apcosxndlglcvicjvgkopvvnxwcr/Build/Products/Debug-iphoneos/Consumer-Ios.app -o ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa


echo copystart
awk 'BEGIN { cmd="cp -r ~/workspace/jenkins/workspace/ios/Consumer-iOS-Channel/ConsumerDeploy ~/share/projectFile/Ios/"; print "n" |cmd; }'
echo copyend

#蒲公英上的User Key
uKey="b1398adefd0c6c8e131317f3438a4b76"
#蒲公英上的API Key
apiKey="cf3d47a21becaeba2117d8ec933913f1"
#要上传的ipa文件路径
IPA_PATH=${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa

rm -rf text.txt

#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
# 备注:
# /Users/yingjinping/Library/Developer/Xcode/DerivedData/Consumer-Ios-apcosxndlglcvicjvgkopvvnxwcr/Build/Products/Debug-iphoneos/Consumer-Ios.app该路径是Jenkins自动打包APP的路径
# ${Jobname}${DeployName}/${bundleShortVersion}/deploy/${DATE}/${AppName}-${DATE}.ipa  该路径是打包好的ipa存放的路径

·····

5、保存好,继续“立即构建项目”,测试项目是否能跑通

6、配置“构建触发器”—>自动构建项目

语法结构:
每行包括5个部分,可以用空格或者tab分隔
* * * * *
第一个:表示分钟 minute(0-59)
第二个:表示小时 hour (0-23)
第三个:表示天 dom (1-31)
第四个:表示月 month (1-12)
第五个:表示周 dow (0-7) 0和7都表示周日
例如: (Build periodically中设置)
H/15 * * * *
表示:每隔15分钟执行一次
H(0-29)/10 * * * *
表示:每个小时的前半小时,每隔10分钟执行一次
H 9-16/2 * * 1-5
表示:工作日(周一~周五)每隔2小时执行一次
H H(5-6) * * *
表示:每天早上6点执行一次
H H 1,15 1-11 *
表示:除了12月份,每月1号、15号每天执行一次

```

7、配置“Git”—> 补充说明
经过以上配置,才能从git上下载代码,插件安装好!

`

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

推荐阅读更多精彩内容