Jenkins在MAC上搭建CI(持续化集成)终结版

站在996的风口浪尖上,百度,google,查阅各种资料博客后,历经40次的构建终于用jenkins在MAC上实现了iOS App的CI(持续集成)一键上传App到蒲公英,网上资料很多老旧或者不够完善或者坑比较多,于是乎本人踩了一个又一个的坑才爬了起来,于是乎今天就贴个比较完善的,让大家尽量少踩坑,尽快实现一个CI(持续集成)的Jenkins部署,如果觉得本文不错别忘记点赞哟!!

首先要准备的case

  • 一台MAC,原因是iOS打包无法在Linux上进行,因为Jenkins的Xcode插件需要调用Xcode,Xcode只能在OSX系统下安装,如果非要在Linux上实现,可以建立节点,过程过于繁琐,此处忽略

  • 保存下面(jenkins的启动与关闭)后期部署会经常用到

    jenkins -h//启动Jenkins
    control + c //快捷键关闭Jenkins
    
  • 把工程的证书配置为企业证书,release模式

  • 打开钥匙串,找到企业证书的根证书,例如:iPhone Distribution: xxx Co., LTD,点击小箭头,出现钥匙的图片后右键选择-显示简介-访问控制-允许所有应用程序访问此项目-存储更改(这步很重要不可少,是为了给jenkins一个访问权限)

安装jenkins

  • 首先执行下面命令行查看是否有jenkins依赖的java环境,出现类似$ java version "1.8.xx"说明已安装java环境,没有安装换版本过低的可以到这里下载安装,或者Google 百度

    $ java –version
    
  • 安装HomeBrew,jenkins依赖HomeBrew包管理,执行如下命令行查看是否已安装,没安装的请移步Google,百度

    $ brew -v
    
  • 安装完HomeBrew后,执行以下命令行,安装jenkins,安装时间较长,耐心等待,出现Jenkins is fully up and running字样后,说明安装成功已启动

    $ brew install jenkins
    //需要删除Jenkins可以执行命令行
    $ sh "/Library/Application Support/Jenkins/Uninstall.command"
    //使用brew安装的可以执行
    $ brew uninstall jenkins
    
  • 在浏览器中输入http://localhost:8080,首次安装应该会出现如下界面,这里需要你去找到Jenkins的初始密码,这个界面不要关闭先放着

    image

  • 去找到Jenkins的初始密码,首先显示隐藏文件夹执行下面命令行显示隐藏文件夹,密码在上图红色的路径文件里面,密码最好备份一下,后续可能会用到

    defaults write com.apple.finder AppleShowAllFiles YES
    
  • 输入密码后选择推荐安装,默认选中的,如果部分插件安装失败,可以后续手动安装,之后会弹出如下图,创建管理员,记住密码,之后登陆用的就是这个密码了,创建之后就会进入Jenkins的主界面


    image

安装Jenkins插件

  • 点击系统管理-管理插件-可选插件,可以搜索插件,公司项目是托管在gitlab上的,所以我选的插件有(用其他托管代码的可以对应选择插件)
    Gitlab Hook Plugin
    GitLab Plugin
    Xcode integration //用于打包ipa xcode9以后这个插件不好用了
image

image

构建项目

  • 点击新建Item-输入项目名(建议所有名统一用工程名,避免出现各种坑)-构建一个自由风格的软件项目-确定

  • 基础配置 描述可以随意填写 其它选择默认 如下图


    image
  • 源码管理 我的代码托管在gitlab所以选git,Repository URL填写项目的load地址,Credentials选择右方Add,在弹出的视图中选择kind-username with password,填写username和password为代码托管的账号和密码,登录成功后Credentials选择刚填写的账号,Branch Specifier (blank for 'any')选择默认或者修改为自己想要的分支,其它选项选择默认,配置成功后红色字样是不显示的,分支默认为master也可指定为自己创建的分支名,指定后构建的是指定分支的代码


    image

    image
  • 构建触发器 此处先不做设置 等输出ipa后再来编辑,也可不作处理

  • 构建环境 首先去Jenkins首页找到如下图选项点击进去


    image

如下图选择文件(证书配置文件)-upload,上传对应的证书配置文件,点击保存,之后可以构建环境选择证书配置文件


image
  • 选择Mobile Provisioning Profiles(证书配置文件)- Provisioning Profile选择项目的企业版生产证书,点击应用,其它选项默认不选


    image
  • 此时可以在项目页面,点击立即构建,正常情况下是成功构建的,如下图蓝色下图标代表构建成功,点击蓝色小图标后的时间进入页面,点击Console Output查看输出日志如下图,若构建失败请参看文章末尾常见问题或者百度Google

image

image
  • 构建 首先需要准备一个ExportOptions.plist的文件,可以用Xcode配置对应的证书先打个ipa包在输出的文件夹中将ExportOptions.plist拷贝出来,放到项目的文件夹下,更新到代码仓库,因为Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates,但是由于 Xcode integration 插件封闭,并不能对其进行修改加上这个属性,而且xcode构建容易出各种坑,所以使用 Shell 脚本代替插件,选择增加构建步骤-Execute shell,脚本如下(建议脚本中的文件或文件夹名先统一用工程名(Mac用户名除外),以免踩各种坑,待构建成功后再去自己定义想要的名字),复制脚本修改对应自己工程的信息,如果是 project 的项目,那就将下面脚本第一段的 -workspace 工程名.xcodeproj 修改为 -project 工程名.xcworkspace 即可。

    xcodebuild -archivePath "/Users/MAC用户  名/.jenkins/workspace/jenkins构建项目时的项目名/build/Debug-iphoneos/工程名.xcarchive" -workspace 工程名.xcworkspace -sdk iphoneos -scheme "工程名" -configuration "Debug" archive
     
    xcodebuild -exportArchive -archivePath "/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/build/Debug-iphoneos/工程名.xcarchive" -exportPath "/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/build/ipa包文件夹(可以自定义名)名称" -exportOptionsPlist '/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/ExportOptions.plist' -allowProvisioningUpdates
    
    #蒲公英上的User Key
    uKey="545c527xxxxx49abb3a8b8"
    #蒲公英上的API Key
    apiKey="19fxxxxxxda919adfe8"
    #要上传的ipa文件路径
    IPA_PATH="${WORKSPACE}/build/ipa包/xxxx.ipa"
    #安装密码
    PASSWORD="xxx"
    
    #执行上传至蒲公英的命令
    echo "++++++++++++++upload+++++++++++++"
    curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F     "_api_key=${apiKey}" -F "password=${PASSWORD}"   http://www.pgyer.com/apiv1/app/upload
    

    这是构建生成.xcarchive文件的存放路径

    xcodebuild -archivePath "/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/build/Debug-iphoneos/工程名.xcarchive"
    

    这是存放.xcarchive文件的路径,必须与上面路径保持一致

    xcodebuild -exportArchive -archivePath "/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/build/Debug-iphoneos/工程名.xcarchive"
    

    这是生成.ipa文件的存放路径

    -exportPath "/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/build/ipa包文件夹(可以自定义名)名称"
    

    这是jenkins构建时拉下代码的文件夹中ExportOptions.plist所在的路径

    -exportOptionsPlist '/Users/MAC用户名/.jenkins/workspace/jenkins构建项目时的项目名/ExportOptions.plist' -allowProvisioningUpdates
    

    注意:在上传蒲公英的脚本中ipa的路径要到.ipa文件为止

  • 至此可点击立即构建,构建成功后将会在finder-Macintosh HD -用户-用户-.jenkins(隐藏文件)-workspace-、、、如下图文件中看到生成的.ipa .xcarchive 工程代码等文件


    image

项目构建的常见问题

  • 缺少ExportOptions.plist,解决办法:用xcode打包生成ExportOptions.plist文件 放在工程文件下

    Error Domain=NSCocoaErrorDomain Code=260 "The file   “ExportOptions.plist” couldn’t be opened because there is no such   file." UserInfo=  {NSFilePath=/Users/sky/.jenkins/workspace/xxx/build/ExportOptio  ns.plist, NSUnderlyingError=0x7fd9d5776430 {Error   Domain=NSPOSIXErrorDomain Code=2 "No such file  or directory"}}
    
  • 证书配置的不对
    error: exportArchive: "xxx.app" requires a provisioning profile with the Push Notifications feature.

  • sheme不对
    xcodebuild: error: If you specify a workspace then you must also specify a scheme. Use -list to see the schemes in this workspace.

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

推荐阅读更多精彩内容