1.安装java JDK环境

1.1检测java JDk 安装的版本

//Java环境查看
java -version

1.2如果当前环境没有下载安装,可以下载并安装。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS

2.下载安装Jenkins。

2.1在官网下载安装,下载之后双击安装,pkg文件。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_02

安装之后,会默认自动打开浏览器,打开的默认地址是:http://localhost:8080,并让你输入密码,并提示你密码获取路径。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_03

在复制完路径/Users/Shared/Jenkins/Home/secrets/initialAdminPassword之后,在finder中,发现会无法打开查看,解决办法:修改访问权限,右键Secrets-> 显示简介->共享与权限->everyone ->修改为读和写。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_04

查看密码的方式,可以在终端中使用命令。

sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
//输入命令之后,会提示你输入管理员账户的密码,按照提示输入即可。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_05

输入密码密码之后点击继续,会进入到插件安装页面,你可以直接安装推荐的插件,也可以回头在插件管理里面自由选择插件安装,我第一次安装时使用的是安装推荐插件,第二次是在插件管理里面手动安装的。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_hive_06

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_07

插件安装完毕之后,就是到了创建用户的时候了,这个时候,你可以直接使用admin账户直接登录使用。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_08

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_09

2.2使用HomeBrew进行安装

//打开终端 使用命令
brew install Jenkins

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_10

3.Jenkins的关闭,重启,重载配置

3.1如果目前Jenkins已经在浏览器中打开,此时如果要关闭Jenkins服务

//也就是说在 jenkins地址后使用exit,即可关闭Jenkins服务
http://localhost:8080/exit

3.2如果你此时安装了一些需要重启才能使用的插件

//如果需要重启,且Jenkins的默认服务端口8080 没有被重新配置
http://localhost:8080/restart

//如果在iTerm中进行操作的话 直接在终端中 输入jenkins 就会重启 Jenkins

3.3如果此时需要,重新载入刚才设置的一些配置

//在需要重载一些配置时 默认服务端口8080没有被重新配置
http://localhost:8080/reload

4.插件的安装和配置

在使用git进行Jenkins自动化打包时,需要安装的插件有 GitLab Plugin、Gitlab Hook Plugin、Xcode integration和Keychains and Provisioning ProfilesManagement,可以在插件管理里面手动安装。

在插件管理中,有可更新、可选插件(可以手动搜索点击安装的)、已安装的、高级(手动下载的插件文件,在此安装)。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_11

手动搜索 点击安装,有些插件在安装之后需要restart(重启)才生效。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_12

如果在安装的过程中,始终无法正常安装成功,可以使用高级,但是需要提前下载好插件库文件,同时需要提供此时的账户(User name)和密码(Password),也就是账户登录是用的账户和密码。具体的安装流程可以查看博客:

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_13

5.配置打包是需要的钥匙串。

5.1 把当前电脑安装的Xcode运行文件和keychain数据中,cpoy到 /Users/Shared/Jenkins/Library目录下,有的可能是在安装完Jenkins,在 /Users/Shared/Jenkins/目录下并没有Library目录,可以手动创建这样一个文件夹。

注意:Mac OS 10.12以下的没有login.keychain-db这个文件,只需要拷login.keychain文件

运行文件的路径:/Users/XXX/Library/MobileDevice,把文件夹Provisioning Profiles全部copy到/Users/Shared/Jenkins/Library路径下。

keychains钥匙串数据路径:/Users/XXX/Library/Keychains,把该文件夹下的login.keychain,login.keychain-db文件copy到/Users/Shared/Jenkins/Library/Keychains目录下.

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_14

5.2 在Jenkins中配置证书文件。在配置时,我上传的文件,上传的都是刚才copy过去的文件,也就是目录/Users/Shared/Jenkins/Library/下的Provisioning Profiles运行文件和钥匙串文件。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_15

在上传钥匙串keychain时使用/Users/Shared/Jenkins/Library/Keychains目录下的,

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_16

上传完之后打开钥匙串,找到我需要上传的两本证书的名字,因为我想上传一个开发证书和一个生产证书,所以上传两个。把这两个证书的名字复制下来。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_17

然后点击 Add Code Signing Identity,分别把这两个名字粘贴过去。完成了之后大概如下:

Password:钥匙串的访问密码,通常就是计算机账户的登录密码。

Code Signing Identity:就是刚才粘贴的证书名字:iPhone Distribution: xxx (xxxx)

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_18

接下来就是描述文件了。这里要注意一点,在Provisioning Profiles填上/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles这个地址。然后按照上传keychain的步骤,把Jenkins用户目录下的描述文件上传上去就行啦

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_19

上传完成之后, 样式如下:

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_20

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_21

配置钥匙串keychain

进入 系统管理->全局配置->Xcode Builder ,添加Keychain。“KeychainPath”路径${HOME}/Library/Keychains/login.keychain,也是默认路径,输入访问的密码即可。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_22

6.创建工程项目。

点击左侧工具栏"新建",选择第一项"构建一个自由风格的软件项目"

jenkins自动化实现xcode打包 ios jenkins 自动化打包_hive_23

2)General  

新建完之后点选丢弃旧的构建,配置一下保持构建的天数和最大个数

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_24

3)源码管理信息
如果你是用的是Git,那就请选择Git,然后输入你的仓库地址

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_25

配置仓库访问的账户和密码

jenkins自动化实现xcode打包 ios jenkins 自动化打包_自动化打包_26

4)构建触发器
可选填。

5)构建环境
选择“Keychains andProvisioning Profiles Management”和“Mobile Provisioning Profiles”

Code Signing Identity :选择你要打包时使用的证书文件。

jenkins自动化实现xcode打包 ios jenkins 自动化打包_hive_27

Mobile Provisioning Profile:就是你打包时用的运行文件 Provisioning Profile

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_28

6)构建

我选择的是Shell脚本,在勾选时,选择第二个“Executeshell”

#ProjectName Scheme Configuration Workspace不能留空格
#***********配置项目
#工程名称(Project的名字)
ProjectName=NSLog
#scheme名字 -可以点击Product->Scheme->Manager Schemes...查看
Scheme=NSLog
#Release还是Debug
Configuration=Release
#打包日期
ArchiveDate=`date +%Y%m%d_%H%M`
#工程路径 也就是xxx.xcworkspace的路径 在.sh文件的上一级目录
Workspace=/Users/xiaofeiniao/Desktop/NSLog
#build路径 编译成.xcarchive的路径
BuildDir=/Users/xiaofeiniao/Desktop/NSLog/Build
#工程路径
ProjectDir=/Users/xiaofeiniao/Desktop/NSLog/
#plist文件名,默认放在工程文件路径的位置
PlistName=${Workspace}/auto-publish/plist/ExportOptions.plist
#打包类型 是AppStore类型的 还是add-hoc类型的
#ipa包的路径
ArchivePath=/Users/xiaofeiniao/Desktop/NSLog/add-hoc/IPA_Files
#蒲公英账号的 uKey
U_key=814bd134a0c9bd026a38d8d245a1ba38
#蒲公英账号的APPKEY
APP_KEY=d59fde4c96d1c99752cf59fa27edb80d
#ipa包的路径文件
filePath=${ArchivePath}/${ProjectName}-${ArchiveDate}/${ProjectName}.ipa

#给文件添加读写权限
chmod 777  ${ProjectDir}
#创建构建和输出的路径
mkdir -p ${BuildDir} --unsafe-perm=true --allow-root
#构建 导user出包 所用的路径
mkdir -p ${ArchivePath} --unsafe-perm=true --allow-root
echo '**** 开始清理工程  ****'
xcodebuild clean -workspace  ${Workspace}/${ProjectName}.xcworkspace -scheme ${Scheme} -configuration ${Configuration}  -UseNewBuildSyetem=NO

echo '测试数据'${PlistName}
echo '**** 清理工程完毕  ****'
#pod 相关配置

#更新pod配置
#pod install

echo "打包的工程"${ProjectName}.xcworkspace
echo '**** 开始编译打包工程   ****' ${Configuration}
#构建
xcodebuild archive \
-workspace ${Workspace}/${ProjectName}.xcworkspace  \
-scheme ${Scheme} \
-configuration ${Configuration} \
-archivePath ${BuildDir}/${ProjectName}.xcarchive -quiet \
clean \
build

echo '**** 编译打包工程完毕  ****'

echo '******  开始导出IPA ******'

echo '导出的文件路径和名称'${BuildDir}/${ProjectName}.xcarchive
echo '导出的plist路径'${PlistName}

#生成ipa
xcodebuild -exportArchive \
-archivePath ${BuildDir}/${ProjectName}.xcarchive \
-exportPath ${ArchivePath}/${ProjectName}-${ArchiveDate} \
-exportOptionsPlist ${PlistName}
echo '******  导出IPA成功 ******'
open ${BuildDir}
echo '******  打开打包的目录成功 ******'

echo '******  删除编译的.xcarchive ******'
if [ -d "${BuildDir}" ]; then
rm -rf "${BuildDir}"
echo 'build文件夹删除成功'
fi


echo "IPA包的路径打印"${filePath}

echo "****** 开始上传IPA包到蒲公英 ******"
if [ -e "${filePath}" ]; then
echo "进入上传"
curl -F "file=@${filePath}" \
-F "uKey=${U_key}" \
-F "_api_key=${APP_KEY}" \
"http://www.pgyer.com/apiv1/app/upload"
echo "****** IPA包上传到蒲公英成功 ******"
else
echo "IPA包不存在 上传蒲公英失败"
fi

遇到的坑1. 在Jenkins账户下对,管理账户xiaofeiniao创建的文件或者文件夹没有操作权限

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_29

解决方案:

1.使用root 账户进行操作 mkdir -p 路径 --unsafe-perm=true --allow-root

2.修改操作权限 chmod 777 路径,配置最大的读、写、执行权限。

遇见的坑2: 成功生成了 xcarchive 文件。 在由 xcarchive 文件生成 ipa 文件的时候。一直报错

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_30

解决方案:在打包时,更改bitcode 为NO,

遇见的坑3:没有找到导出的plist文件配置

jenkins自动化实现xcode打包 ios jenkins 自动化打包_iOS_31

解决方案:修改脚本上plist配置路径

遇见的坑4: HomeBrew安装的Jenkins依赖于终端ITerm,当ITerm进程被关闭关闭,jenkins服务也就被关闭了。

解决方案: 链接 launchd 配置文件

首先使用brew info jenkins, 查看jenkins安装的路径

jenkins自动化实现xcode打包 ios jenkins 自动化打包_Jenkins_32

然后,链接Jenkins下的homebrew.mxcl.jenkins.plist文件

执行命令

ln -sfv /usr/local/Cellar/jenkins/2.201/*.plist ~/Library/LaunchAgents

修改完后,在终端执行

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

如果在执行时遇见

jenkins自动化实现xcode打包 ios jenkins 自动化打包_hive_33

//先执行一次卸载
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
//再执行
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

遇见的坑5:在添加git仓库时,Git地址有问题,告诉无法链接仓库,

问题在于Jenkins的全局工具git,服务路径没有

jenkins自动化实现xcode打包 ios jenkins 自动化打包_jenkins自动化实现xcode打包_34

解决办法:

使用命令查找git路径

[root@iz2ze0eeufai4caehh12jvz bin]# whereis git
git: /usr/local/bin/git /usr/local/git /usr/local/git/bin/git

在Jenkins的全局工具中配置(打开jenkins主页面–>系统管理–>全局工具配置)

jenkins自动化实现xcode打包 ios jenkins 自动化打包_hive_35