Jenkins自动打包ios代码并上传到蒲公英

1、Java环境安装

  • 检测Java JDK是否安装,终端输入
zxpMacBook-Pro:~ zxp$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
  •  如果未安装,请下载并安装Java

2、安装Jenkins 

一、注意:首先检查Mac有没有安装Homebrew

brew -v

出现一下代码即成功:  

Homebrew 2.2.17
Homebrew/homebrew-core (git revision fbba5; last commit 2020-05-22)
Homebrew/homebrew-cask (git revision b556d; last commit 2020-05-22)

反之终端执行命令安装 :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

二、安装jenkins 

1、按照官网给出的教程,打开终端,先执行 brew install jenkins 进行安装:

2、安装成功后,执行 brew services start jenkins 启动本机上的jenkins服务:

3、打开浏览器,访问 http://localhost:8080

找到页面提示的路径中的文件,输入文件中的密码信息:

按照提示,找到/Users/Shared/Jenkins/Home/ 这个目录;这个目录文件只有“ Jenkins”用户才有权限读写:

可以将everyone的权限改为读与写,保险点最好点击左下角添加当前用户的读与写权限;更改后就可以打开initialAdminPassword文件,复制出密码并输入unlock成功; 

4、勾选需要安装的插件,等待配置:
 

5、一些插件安装失败了,暂时不知道原因,先点击“继续”跳过:

6、来到创建用户的界面,设置管理员用户名和密码:

7、按照提示继续,就能来到这个界面啦:

3、创建项目 

"General"一栏填写项目描述即可,其他根据需要勾选; 

4、源码管理

因为使用的是GitLab,这里选择Git;填写自己项目仓库URL:URL也是支持http,ssh两种协议的;需要注意的是协议不同,需要的Credentials凭证也不一样;http协议需要账户名密码,ssh协议需要配置公钥,私钥;我这里直接选用http协议URL,配置Credentials简单点;
没有Credentials,需要添加:

http协议的,凭据类型选择“Username with password”,设置用户名,密码即可;

一个比较坑的地方是,添加完账号密码后,拉取源码时仍会报错:Failed to connect to repository : Command "git ls-remote -h -- http://xxxx HEAD" returned status code 128:

要解决这个问题,还需要配置GitLab的token:
登录GitLab-->设置-->访问令牌-->填写姓名,选择api-->创建;

创建成功后会得到token字符串,将其复制;
回到Jenkins,再添加一个凭证,选择“GitLab API token”,输入刚复制的token添加完成;

回到刚才的构建界面,源码的Credentials选择之前创建的Username with password用户凭证;没有错误提示的话,可以往下配置;

5、构建触发器

这里可以根据自己的需求,设置如何触发运行项目;比如使用脚本或按时间周期获取或Git有pushed的时候等等;最常用的是定时触发:Build periodically

示例:

30 17 * * *
MINUTE HOUR DOM MONTH DOW
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

所以 30 17 * * * 表示的就是每天17:30执行一次构建。
如果想指定多个时间的话,以,隔开即可:
30 17,20 * * * 表示每天17:30,20:30执行一次构建;

注意:也可以忽略此项不设置任何参数。

6、构建环境

这步是至关重要的,稍有不慎就可能sign失败,打包不了;

  • 首先确保电脑的开发证书,发布证书及描述文件Provisioning Profiles是正常的:证书需要是上传到开发者账号的那台电脑的证书,如果不是的话可以将之前电脑的证书导出p12文件发送到自己电脑再安装即可;实在不行的话,可以将证书描述文件全部删除,由本机重新生成;
  • 将当前账号下的keychain及描述文件复制到Jenkins用户相应目录下;即将当前用户/Users/user/Library的两个文件夹Keychains,MobileDevice复制到/Users/Shared/Jenkins/Library目录下;(坑:这里同样是因为Jenkins用户权限受限,不复制到Jenkins用户下打包时会找不到证书)

由于mac系统的不同,Keychains文件下的login钥匙串文件后缀是不同的;有些版本是login.keychain,有些是login.keychain-db,有些是两者皆有;Jenkins配置证书时需要.keychain文件,因此只有login.keychain-db文件的,可以复制一份将文件名login.keychain-db改为login.keychain就可以了;

  • 回到Jenkins列表,左侧选择Manage Jenkins --> 选择Keychains and Provisioning Profiles Management

  • 配置Keychains:点击选取文件,选取之前复制的/Users/Shared/Jenkins/Library/Keychains/login.keychain文件并上传;然后添加两个Code signing Identity,分别填入钥匙串中开发证书和发布证书的名称(钥匙串选择对应证书-->显示简介-->复制名称全称);

  • 配置Provisioning Profiles: 

点击选取文件,选取之前复制的/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles文件下的描述文件:一般会包括开发描述文件、发布描述文件、iOS team描述文件;将这些描述文件都上传;
Provisioning Profiles Diretory Path填入Jenkins的描述文件路径:/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles;
保存即配置完成

 

  • 回到构建环境界面,选择Keychains and Code Siging Identifies,分别添加之前配置的开发证书和发布证书 

  • 选择Mobile Provisioning Profiles,添加之前配置好的所有描述文件 

点击保存,环境构建完毕;

7、构建 

这步主要执行打包操作,因为Xcode打包插件用不了需要使用脚本;
点击增加构建步骤,选择Execute shell,然后在输入框中输入打包脚本;

打包脚本的命令有多种,这里选用xcodebuild及xcrun;
以下是打包脚本,可供参考:

# 工程名
APP_NAME="name"
# 证书
CODE_SIGN_DEVELOPER="iPhone Developer"
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上传的ipa文件路径
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
#echo "${IPA_PATH}">> text.txt

security unlock-keychain -p "123456" /usr/local/Cellar/jenkins/2.251/Keychains/login.keychain 

#集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration 'Release' clean

echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DEVELOPER}" SYMROOT='$(PWD)'

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"

echo "\033[*************************  上传到蒲公英  *************************]\033"
# open $export_path

# 蒲公英上的User Key
uKey="xxxxxxxxxx"
 
# 蒲公英上的API Key
apiKey="xxxxxxxx"

#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" https://upload.pgyer.com/apiv1/app/upload


这里需要注意的是,脚本中的CODE_SIGN_DEVELOPER设置的就是Xcode的Code Signing Identity:

由于我们项目Signing设置是自动的Automatically manage signing

所以Code Signing Identity也一定要对应,不能选择具体某个证书,而应该设置为iPhone Developer(和Xcode中设置的iOS Developer同样作用,但是不能设置为iOS Developer),让Xcode自动选择,否则打包会报错;
而如果项目Signing设置不是自动的,而是手动选择了team和证书,那Code Signing Identity一定要设置具体的某个证书,而不能是iPhone Developer,否则一样报错;报错信息如下:

Code Signing Error: xxx has conflicting provisioning settings

当觉得sign等一切都没问题后,保存并运行项目,打包时还是报错了:

codesign failed with exit code 1

看情况,还是因为代码签名的原因;
查找了好久的资料,得知这个错误是因为证书访问权限的问题;打包访问证书时,需要输入当前用户密码才能访问,而我们使用的脚本并没有提供所需要的密码;
可以在脚本的build代码前,添加一句设置访问证书的密码的代码:

security unlock-keychain -p "password" /Users/Shared/Jenkins/Library/Keychains/login.keychain

password替换为你自己用户的密码即可;
如果还是报同样的错,就还需要在钥匙串中,设置私钥的访问权限范围:钥匙串-->密钥-->选择开发、发布证书私钥-->右击-->显示简介-->选择访问控制-->设置为允许所有应用程序访问此项目;

这里同样有个坑:更改了密钥的访问控制权限,/Users/user/Library/Keychains也就更改了,所以要像之前一样再次将这个文件复制到/Users/Shared/Jenkins/Library目录下;否则Jenkins用户下的Keychains还是没有更新,还会是签名失败;

当觉得大工快要告成时,运行后遭当头一棒:
这次是xcrun报错

xcrun:error: unable to find utility "PackageApplication"

这是因为从某个版本开始,Xcode没有PackageApplication这个包了;解决方法很简单,github上下载一个,复制到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/目录下就可以了;

运行项目报错:

执行如下命令2句分开执行: 

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/  

chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

再次运行项目,成功了;

8、上传至蒲公英平台

以上虽然成功了,但我们只是导出了ipa包;最终目的是上传,交由测试团队测试;这步同样支持脚本方式,上传至蒲公英的脚本如下:

#蒲公英上的User Key
uKey="xxxxxxxx"
#蒲公英上的API Key
apiKey="xxxxxx"

#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" https://upload.pgyer.com/apiv1/app/upload

这部分脚本可以和上面打包脚本区分,也可以直接写在一起;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值