Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)

目录

1. 安装JAVA环境

2. 安装Jenkins

3. 管理插件

4. 项目新建和设置

5. Keychains and Provisioning Profiles Management配置(重点难点)

6. 报错问题汇总

7. 参考博文


1、安装JAVA环境

      Jenkins 是一个用Java编写的持续集成工具,依赖于Java,所以在安装Jenkins前,需要先安装Java环境。

     首先,检查电脑是否已经安装有环境。

     在终端输入命令:java -version。

     如果已经安装,则会打印java 版本。如图1-1。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第1张图片

                                                                     图1-1. 电脑已经安装JAVA JDK环境

     否则,会说没有安装,如图1-2。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第2张图片

                                                                      图1-2.  没有安装JAVA环境

      如果没有安装Java环境的话,需要去官网下载JAVA JDK(注意是JDK,不是JRE)。在下载前注意勾选上方的 Accept License Agreement。否则,无法下载。如图1-3。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第3张图片

                                                                               图1-3. 下载JAVA JDK 

    安装成功后测试是否安装,如图1-1所示。

2、安装Jenkins

(1) 使用Homebrew的命令行进行安装

      在终端输入命令:brew install jenkins

      如果没有安装Homebrew,则需要先安装。

     【Homebrew 安装方法】:前往Homebrew官网,直接拷贝官网页面上的命令,在终端运行即可。 

(2) 启动jenkins,等待其安装完毕。

     在终端输入命令:jenkins

(3) 浏览器输入http://localhost:8080并进行访问。浏览器会跳转到图2-1界面。



图2-1 Jenkins初始界面

(4) 在文件系统跳转到网页页面所说的地址(/Users/ageren/.jenkins/secrets/initialAdminPassword),打开文件,拷贝文本内容,复制到网页的"管理员密码处",点击继续。

(5) 步骤(4)完成后页面跳转到新手入门界面,如图2-2。点击"Install suggest plugins"(安装推荐到插件)。等待其安装完毕,安装过程如图2-3,安装结束后界面如图2-4。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第4张图片

图2-2 新手入门界面

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第5张图片

图2-3. 新手入门插件安装过程

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第6张图片

图2-4. 新手入门插件安装完成

(6)  点击“开始使用kenkins”,进入管理员账户设置页面。填写相关信息,然后点击“保存并完成”,页面进入图2-5。

 PS:这个是管理员用户,用户名和密码一定要记住,否则忘了的话找回比较麻烦。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第7张图片

图2-5. 新手入门创建管理员用户



3、管理插件

  Jenkins安装完成,并且基本设置做好后。接下来我们就先把必要的插件安装上。

  我们要安装的插件有以下:

(1)Xcode integration
(2)GIT plugin
(3)GitLab Plugin
(4)Gitlab Hook Plugin
(5)Keychains and Provisioning Profiles Management

1.  首页的左侧,点击“系统管理”,如图3-1。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第8张图片

图3-1. 系统管理入口

2. 在系统管理界面找到“插件管理”,点击,如图3-2所示。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第9张图片

图3-2. 管理插件入口

3. 在管理插件界面,切换到“可选插件”选项卡,在右上角的过滤搜索里面输入我们要安装的插件名称,回车。找到我们需要的插件,打勾,点击直接安装。(有过滤就是好用,否则一个一个找很浪费时间,呵呵哒~~~)如图3-3所示。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第10张图片

图3-3. 安装插件

4、项目新建和设置

4.1. 新建项目 

(1)点击首页的“创建一个新任务”。如图4-1。

(2)选择“构建一个自由风格的软件项目”。PS:这里的任务名称还是写我们的APP项目名比较好。后面的配置会用到这个任务名称。如图4-2.

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第11张图片

图4-1 新建任务入口

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第12张图片

图4-2 新建任务

4.2. 配置项目

4.2.1 General 参数。

(1)切换到General选项。勾选“丢弃旧的构建”。

(2)设置包(即构建)的保留天数,以及最大保留个数。这个主要按照需要做设置,如图4-3所示。

PS:“丢弃旧的构建”不勾选也可以。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第13张图片

图4-3 设置General 参数

4.2.2 源码管理

(1)切换到源码管理选项。

(2)输入我们要打包的项目的Git地址。最好SSH的。

(3)填写我们要打包的分支(branch)。

(4)如图4-4。点击Add按钮,Add按钮会弹出一个按钮Jenkins,点击它,进行添加SSH key(见4.2.1.1)。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第14张图片

图4-4 设置源码管理

(5)到了这一步,我们应该已经可以正常拉取代码了。点击任务页面的“立即构建”,如图4-5。点击之后,build History 会显示build的进度条。如果代码能正常拉取,则该构建是蓝色的,如图4-6。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第15张图片

图4-5 立即构建项目

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第16张图片

图4-6 立即构建后的任务状态

4.2.1.1 添加SSH Key。

1)选择添加SSH key,如图4-7。页面会弹出新的表单,如图4-8。

2) Username 可以随便写,反正自己记得住就行。Private Key选择 Enter directly。如图4-8。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第17张图片

图4-7 选择SSH Username with private key

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第18张图片    图4-8 SSH填写表单  

3) SSH Key的添加跟GitLab上的添加SSH Key步骤类似(前往文件夹:~/.ssh,然后找到钥匙文件拷贝里面的内容,粘贴到网页上)。如图4-9.

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第19张图片

图4-9. 找到SSH Private Key 文件

PS1:  要注意的是,这里的key是指私钥,不是公钥。所以我们要拷贝的是~/.ssh/id_rsa,而不是“.pub”结尾的文件。

PS2:可能有读者注意到我的~/.ssh文件下有多个id_rsa文件。这是因为一台电脑配置了2个SSH Key,我选择的那个Key是我的要打包的项目的git下设置的SSH key(用git config设置的),详情可以看我的另外一片博客 《一台电脑绑定两个git帐号(GitHub和GitLab)》。 跟我一样情况的读者,请选择你要打包的那个项目下你绑定的SSH Key。

PS3: 要拷贝的id_rsa文件,要把所有的都拷贝上,不要落下-----BEGIN RSA PRIVATE KEY----- 和-----END RSA PRIVATE KEY-----。要不然会拉取不到代码。

4)添加完成后点击左下角的Add按钮,如图4-10。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第20张图片

图4-10 Add SSH Key

5)最后,添加完成回到主界面,发现界面并没有什么变化,如图4-11。其实不然,点击图中的下拉框,会看到我们刚刚在添加SSH Key的时候填写的那个Username。选择它。如图4-12。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第21张图片

图4-11 添加SSH Key 后的界面

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第22张图片

图4-12 选择我们添加的SSH Key


4.2.3 构建触发器

(1)切换到“构建触发器”选项。

(2)这里只设置最常用的Poll SCM。切换到“构建触发器”,勾选“Poll SCM”。如图4-13。

       H/20 * * * *表示:每20分支构建一次。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第23张图片

图4-13 设置Poll SCM

4.2.4 构建

     其中步骤4.2.4.2  Xcode是充分非必要,为什么这么说呢?

  (1)因为在4.2.5里有一个坑。而这个坑的解决就是,要先设置构建里Xcode的4.2.4.2.2 Code signing & OS X keychain options才能解决。

  (2)在构建步骤,因为Xcode 9的关系,需要用shell脚本来编译打包。shell和Xcode插件两者是互斥的。如果是Xcode 9及以上,到后面需要把这个Xcode插件配置全部删除掉,使用“Execute shell”.

     如果Xcode版本是在9以下的,不想用shell脚本构建打包的,按照下面的步骤一步一个脚印配置即可。如果是Xcode 9及以上的,其他步骤不用设置,只设置4.2.4.2.2 Code signing & OS X keychain options这个步骤即可。


4.2.4.1 Excute shell (重点难点,其位置要放到Xcode的前面)

(1)切换到“构建”选项

(2)勾选“增加构建步骤”里面的“Excute shell”。如图4-14。勾选“Excute shell”后,页面也会新增内容。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第24张图片

图4-14 添加Excute shell

(3)添加命令到Comman上,如图4-15,添加到命令内容有两种情况。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第25张图片

图4-15 添加Excute shell

  情况1. Xcode 9 以下的

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

pod install --verbose --no-repo-update

 情况2. Xcode 9 以及以上的

 PS:添加了xcodebuild -archivePath、xcodebuild -exportArchive -archivePath命令,如果“构建”选项里选择有Xcode的话,  需要把Xcode删除掉

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

pod install --verbose --no-repo-update

#构建  
xcodebuild -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -workspace 
TestChat.xcworkspace -sdk iphoneos -scheme "TestChat" -configuration "Release.Adhoc" archive
xcodebuild -exportArchive -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -exportPath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/TestChat_debug" -exportOptionsPlist '/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist' -allowProvisioningUpdates
 
  

【注意】:xcodebuild -archivePath、xcodebuild -exportArchive -archivePath命令格式为:

xcodebuild -archivePath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/Debug-iphoneos/你的应用名.xcarchive" -project 你的应用名.xcodeproj -sdk iphoneos -scheme "你的应用的scheme名字” -configuration "Debug" archive

xcodebuild -exportArchive -archivePath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/Debug-iphoneos/BasketballLeague.xcarchive" -exportPath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/你的应用名_debug" -exportOptionsPlist '/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/ExportOptions.plist' -allowProvisioningUpdates

【举个例子】:

xcodebuild -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -workspace TestChat.xcworkspace -sdk iphoneos -scheme "TestChat" -configuration "Release.Adhoc" archive

xcodebuild -exportArchive -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -exportPath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/TestChat_debug" -exportOptionsPlist '/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist' -allowProvisioningUpdates


4.2.4.2  Xcode(充分非必要)

(1)切换到“构建”选项

(2)勾选“增加构建步骤”里面的Xcode。如图4-16。勾选Xcode后,页面也会新增内容。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第26张图片

图4-16 构建添加Xcode

4.2.4.2.1 General build settings的设置

 (1)General build settings 点击右下方“settings...”按钮

(2)勾选“Pack application, build and sign .ipa?”,页面会新增加的内容。填写内容如图4-17。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第27张图片

图4-17 填写Xcode的General build settings

4.2.4.2.2 Code signing & OS X keychain options(解决坑的这个步骤!!!!)

(1)点击右下方“code signing settings...”按钮

(2)勾选“Unlock Keychain?”,页面会增加新的内容。填写内容如图4-18。

(3)然后点击页面左下角的“保存/应用”按钮。

 PS:其中,Development Team ID 需要的是发布证书的TeamID,去钥匙串找到该证书,拷贝这个证书的括号里面的ID,如图4-19。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第28张图片

图4-18 填写Xcode的 Code signing & OS X keychain options


Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第29张图片

图4-19 获取证书的Team ID 

4.2.4.2.3 Advanced Xcode build options

(1)点击右下方“advanced build settings...”按钮,页面会增加信内容。填写内容如图4-20。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第30张图片

图4-20 填写Xcode 的Advanced Xcode build options


4.2.5 构建环境-Keychains and Code Signing Identities(重点难点)

配置Keychains and Code Signing Identities的两个前提:

前提1: 按照步骤5配置好Keychains and Provisioning Profiles Management配置。因为这里的数据是从Keychains and Provisioning Profiles Managemen传过来的。它不可以手动输入的,而是通过点击输入域,等它弹出一个列表,我们来选择item。

前提2: 按照步骤4.2.4.2.2 Code signing & OS X keychain options进行了设置,并且最后点击了“保存/应用”。

上面两个前提缺少一个,下面的配置步骤都走不了。  

      构建环境里,我们只设置跟证书相关的东西:Keychains and Code Signing Identities。Mobile Provisioning Profiles也是跟证书相关的,但是这个可以不配置。

(1) 切换到“构建环境”选项。

(2)勾选Keychains and Code Signing Identities,页面会添加新的内容。

(3)在界面的Keychain点击选择我们在步骤5Keychains and Provisioning Profiles Management上传的Keychain的名字。

(4)点击Code Signing Identity,按照打包需求,选择开发者/发布证书的code siging identity,如图4-21

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第31张图片

图4-21 配置构建环境的Keychains and Code Signing Identities


4.2.6 调整配置

4.2.4 构建中我们提到,Xcode的设置是充分非必要的。到了这里,我们在此检查下,主要检查2个方面。

(1)我们的Execute Shell 是否设置了适配Xcode 9的xcodebuild -archivePath、xcodebuild -exportArchive -archivePath命令。如果设置了这些命令,并且设置了Xcode。那么在需要把整个Xcode设置删除掉。

(2)构建中Execute Shell 的位置是否在Xcode的前面。如果不是需要进行调整(长按拖动)。


5. Keychains and Provisioning Profiles Management配置(重点难点)

这个地方很重要,也是容易入坑的地方。很多跟证书有关的报错都是因为这里没有配置正确。

首页的左侧,点击“系统管理”。 在系统管理里面找到 Keychains and Provisioning Profiles Management,如图5-1。点击进入到图5-2所示界面。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第32张图片
图5-1  Keychains and Provisioning Profiles Management入口


Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第33张图片

图5-2  Keychains and Provisioning Profiles Management界面


误区1:可能有小伙伴有配置过别的东西,像极光推送之类的。看到有Provisioning Profile  File,就以为另外一个要上传的是cer证书文件/p12文件。

But1:但是!但是!但是!(注意,重要的事情说3遍!!)Keychain是指login.keychain文件,而Provisioning Profile  File才是我们平常用的那个Provisioning Profile  File。

误区2:从图中可以看出,这里需要Keychain or(或者)Provisioning Profile  File。

But2:但是!但是!但是!(注意,重要的事情说3遍!!)这里是要两个都要上传,而且分两步走。先上传login.keychain,再上传Provisioning Profile  File


5.1 上传 login.keychain文件

    login.keychain文件位于【/用户/电脑用户名/Library/keychains/login.keychain】。

 (1)点击界面的“选择文件”,找到login.keychain

 (2)点击“upload”。

 (3)配置如图5-3。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第34张图片

图5-3  上传login.keychain后到配置

PS1:login.keychain文件上传后,界面会添加新的东西(Filename、Password等)。有的电脑会自动添加Code Signing Identity的数据,有的电脑不会自动添加;有的添加了,但是只添加了一个。可以通过点击界面的“Add Code Signing Identity”来添加上。

PS2:证书名字我们可以到钥匙串,找到对应的证书,复制证书的名字(整个名字都要复制上),粘贴到界面的Code Signing上。如图5-4。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第35张图片

图5-4 拷贝证书的名字


5.2 上传Provisioning Profile  File文件

5.2.1 操作前的困惑

困惑1要上传的Provisioning Profile  File到底是开发者Provisioning Profile,还是ADHoc Provisioning Profile?

这个要看我们要打包的ipa上传的应用托管平台而定。如果托管平台既支持开发者打包又指出ADHoc,那我们需要上传两个Provisioning Profile。否则我们可以只上传托管平台支持的那个Provisioning Profile。如fir,只支持成ADHoc,那么我们就只上传ADHoc就可以了。 不过保险起见,我把2个都上传了。

困惑2: 界面没有Add Provisioning Profile的相关按钮。既然可以上传2个文件。如何上传多个Provisioning Profile  File?

要有多个Provisioning Profile的话,我们需要走多次上传流程。(同样的上传流程。先上传第一个Provisioning Profile,然后再上传第二个Provisioning Profile)。

5.2.2 操作起来

(1)点击界面的“选择文件”,找到我们的ADHoc Provisioning Profile  File 

(2)点击“upload”。上传完成后,界面也会新增新的内容(Filename、UUID)。如图5-5。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第36张图片

(3)上传完Provisioning Profile,我们还需要填写Provisioning Profiles Directory Path。这个地址是固定死的,比较简单,统一填写【/Users/Shared/Jenkins/Library/MobileDevice】即可。

5.3 点击保存

点击左下方“保存”按钮。至此,Keychains and Provisioning Profiles Management配置完成。从一开始到这里,整个Jenkins也配置完成了!(撒花~~~~~!!!)



6 报错问题汇总

6.1 Jenkins 配置和一般的问题

1.【问题】:在【4.2.5 构建环境-Keychains and Code Signing Identities】一节里。我按照【5 Keychains and Provisioning Profiles Management配置】配置好了系统的Keychains and Provisioning Profiles Management插件。然后就开始配置Keychains and Code Signing Identities。网上很多教程都是一选择Keychain,界面会自动填写Variables,点击Code Signing Identity的时候,会有列表出来。我的界面的数据几乎都是空白的(如图6-1)。我怀疑五我没有配置对,又反复配置了好几次。结果没有任何效果。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第37张图片

图6-1 没有数据出来的Keychains and Code Signing Identities

     【解决方法】:只要我们做过4.2.4.2.2 Code signing & OS X keychain options步骤,并且点击了页面左下方的“保存/应用”按钮。问题就能得到解决。


  2.【问题】:浏览器输入http://localhost:8080并进行访问,浏览器页面无法访问:无法访问loacalhost服务器。

    【解决方法】:没有打开Apache的话,浏览器就不能访问本地。Apache是Mac自己默认安装有的。一般来说不用做多余的安             装。

            因此只需启动Apache:
            在终端输入命令:sudo apachectl start
            等到Apache启动完成,再刷新一次。浏览器就会跳转到Jenkins到界面。


 3.【问题】:启动了Apache,浏览器地址输入http://localhost:8080,依然无法访问。

【解决方法】:因为Jenkins没有启动。命令行输入命令启动。

                    在终端输入命令:Jenkins

4. 在插件管理里面,卸载了插件的话,要重启Jenkins才算真正的卸载。

5.【问题】:如何重启Jenkins

  【解决方法】:浏览器地址输入以下地址,回车。

                                    http://localhost:8080/exit //退出Jenkins
                                    http://localhost:8080/restart //重启
                                   http://localhost:8080/reload //重新加载


6.【问题】:我忘记了用户名,但是记得密码

   【解决方法】:/Users/ageren/.jenkins/users下面有文件夹,名字就是用户名


6.2 Jenkins 日志报错的问题

1.【问题】:

archive error

 Check dependencies The file “Pods-Swarm_swift.release.xcconfig” couldn’t be opened because there is no such file. (/Users/HW/.jenkins/workspace/SWARM/Pods/Target Support Files/Pods-Swarm_swift/Pods-Swarm_swift.release.xcconfig) ------ diff: /../Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. ** ARCHIVE FAILED **

【解决方法】:“构建”添加“Excute shell”,并放到最前面。 将pod 相关的命令复制到shell 区域。

【shell 命令】:

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#pod 更新 

pod install --verbose --no-repo-update


2.【问题】:requires a provisioning profile with the Push Notifications and Associated Domains features问题

  【报错如下】:

     Error Domain=IDEProvisioningErrorDomain Code=9 ""TestChat.app" requires a provisioning profile with the Push           Notifications and Associated Domains features." UserInfo={NSLocalizedDescription="TestChat.app" requires a      provisioning profile with the Push Notifications and Associated Domains features., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

   【原因分析】:  新版的Xcode 9不会允许你访问钥匙串里的内容,除非设置allowProvisioningUpdates。

   【解决方法】:使用脚本代替插件(插件本质是帮助我们生成打包脚本代码)。

    【做法】:

           (1)在项目的配置里,切换到“构建”选项。如果已经添加了Xcode的设置,需要把Xcode删除掉。没有添加“Excute                          Shell”的话则添加上“Excute Shell”。在“Excute Shell”的command里添加xcodebuild -archivePath,

                 xcodebuild -exportArchive -archivePath的脚本命令,输出ipa包。

           (2)具体命令为(命令的顺序不能出错):

xcodebuild -archivePath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/Debug-iphoneos/你的应用名.xcarchive" -project 你的应用名.xcodeproj -sdk iphoneos -scheme "你的应用的scheme名字” -configuration "Debug" archive

xcodebuild -exportArchive -archivePath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/Debug-iphoneos/BasketballLeague.xcarchive" -exportPath "/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/你的应用名_debug" -exportOptionsPlist '/Users/你的电脑用户名/.jenkins/workspace/你新建的Jenkins的项目名(如果你新建的时候跟你的应用名字不一样,那就不是你的应用名)/build/ExportOptions.plist' -allowProvisioningUpdates

     【举个例子】:

xcodebuild -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -workspace TestChat.xcworkspace -sdk iphoneos -scheme "TestChat" -configuration "Release.Adhoc" archive

xcodebuild -exportArchive -archivePath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/Debug-iphoneos/TestChat.xcarchive" -exportPath "/Users/ageren/.jenkins/workspace/Vol_Chat/build/TestChat_debug" -exportOptionsPlist '/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist' -allowProvisioningUpdates

3.【问题】:error: Couldn't load -exportOptionsPlist: The file “ExportOptions.plist” couldn’t be opened because there is no such file.
Error Domain=NSCocoaErrorDomain Code=260 "The file “ExportOptions.plist” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist, NSUnderlyingError=0x7fb479178710 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

原因分析】:这里还有一个问题就是命令里面提到的ExportOptions.plis文件。这个文件目前为止,在Jenkins目录下是没有的。所以需要我们自己去添加一个。怎么添加?

【解决方法】:我们在本地电脑的Xcode上,archive改App项目的development(开发者)的archive 包。从这个包的文件夹里面就有一个ExportOptions.plist如图,直接拷过来,粘贴到命令所说的文件夹('/Users/ageren/.jenkins/workspace/Vol_Chat/build/ExportOptions.plist')里去,如图6-2。

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第38张图片

图6-2 拷贝archive里面的ExportOptions.plist文件


4. 【问题】:Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/rn/1xn_nml56wn1zg61j9zdw7yw0000gn/T/ipatool-json-filepath-iLJOAn}。

【解决方法】:archive 完成,要export包的时候,在弹出的选择机型里面,App Thinning要选择None,而且其他地方不要打勾,如图6-3。我当时选择了“All compatible device variant”, 然后EXPORT FAILED,

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第39张图片

图6-3. archive的时候App Thinning要选择None

5.【问题】: /var/folders/rn/1xn_nml56wn1zg61j9zdw7yw0000gn/T/jenkins4182776149634329822.sh: line 10: shell_session_update: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

 【解决方法】:有2种。

(1)设置Jenkins的环境变量。

       方法1:在系统设置全局里面添加。“系统管理”-“系统设置”-“全局属性”-“环境变量”,如图6-4。

         1)在命令行下执行 echo $PATH,记录下输出的结果
         2)在 jenkins 中系统管理-系统设置中,找到 环境变量(Environment variables)
         3)在 key 中填写 $PATH,在 value 中填写第一步中输出的结果

         4)保存即可

Jenkins + GitLab + CocoaPod 的自动打包平台配置(从build到export success)_第40张图片

图6-4 环境变量的位置

       方法2:在shell设置里面添加。

(2)更新RVM。【这个方法解决了我的问题】。命令后先后输入以下命令:

curl -sSL https://get.rvm.io | bash

source ~/.bashrc  

source ~/.bash_profile 

详细情况请看《shell_session_update: command not found》。


7. 参考博文

(1)《利用Jenkins进行iOS持续集成》

(2)《iOS项目持续集成》

(3)《Jenkins安装&配置》

(3)《Jenkins/git/KeyChains & Provisioning, 记录CI中的一些坑》

(4)《使用 Jenkins 持续集成 iOS 项目时碰到的一些问题》

(5)《shell_session_update: command not found》



你可能感兴趣的:(经验总结)