iOS+Jenkins持续构建-编译打包上传

  • 前序步骤:
    一、《MAC Jenkins安装》

实验步骤

1.安装Xcode(不做赘述)

2.Jenkins安装插件: Xcode integration

1.png

3.Jenkins安装插件: Keychains and Provisioning Profiles Management

2.png

4.git shhkey 配置(有的同学可跳过,按照初学者来写的)

终端输入:
ssh-keygen -t rsa -C"邮箱"
ssh-add ~/.ssh/id_rsa
cat /Users/用户名/.ssh/id_rsa.pub

尝试使用一下

  • 错误一: unable to get local issuer certificate
  • 终端输入命令去掉git的ssl验证: git config --global http.sslVerify false
3.png

复制公钥至GIT

4.png

私钥复制,待会儿有用

终端输入:
cat /Users/用户名/.ssh/id_rsa

5.新建自由风格JOB

5.png

6.配置git

输入第4步拿到的私钥

6.png

保存,注意使用.git地址

7.png

7.配置证书

先将证书导入钥匙串
将/Users/用户名/Library/MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library
将/Users/用户名/Library/Keychains/下的login.keychain及login.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面(我在10.13上有这两个文件,而10.14上只有-db文件,将-db改为db,在将两个文件拷贝)

8.png

8.上传证书

回到jenkins,选择Keychains and Provisioning Profiles Management插件进行配置
选择profile和login.db文件进行上传,需要几个证书就需要多少profile文件
Code Signing Identity 可以在钥匙串-证书-右键简介查看
Provisioning Profiles Directory Path为

/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles 
9.png

9.继续配置JOB

勾选Keychains and Code Signing Identities、Mobile Provisioning Profiles选择对应证书,直接保存。

10.png

10.继续配置脚本

11.png

参考脚本:

#!/bin/sh
# appName
export K_APP_NAME=""
# 项目名称
export K_PROJECT_NAME=""
# xcodeproj
export K_XCODEPROJ_NAME=".xcodeproj或.xcworkspace"
# project
export K_PROJECT_WORKSPACE_NAME="project"
# scheme名称
export K_SCHEME=""
# 编译类型(用于区分发布还是AdHoc模式,可以忽略)
export K_BUILD_TYPE="Development"
# 编译配置(主要根据自己的多环境进行配置,比如Release,Debug等)
export K_CONFIGURATION="Release"


# 包名前缀
export K_IPA_PREFIX=""
# 包类型
export K_IPA_TYPE="_alpha_"
# export
export K_EXPORT="export"
# Resources
export K_RESOURCES="Resources"


# xcode环境
export XCODE=/usr/bin

# 项目workspace
export K_WORK_SPACE=$WORKSPACE/$K_PROJECT_NAME/$K_XCODEPROJ_NAME/$K_PROJECT_WORKSPACE_NAME.xcworkspace

# 工程目录
export K_PRO_SPACE=$WORKSPACE/$K_PROJECT_NAME

# info.plist路径
export K_PROJECT_INFOPLIST_PATH=$WORKSPACE/$K_PROJECT_NAME/$K_APP_NAME/$K_RESOURCES/项目名-Info.plist;

# cd 工程目录
cd $K_PRO_SPACE

# 获取当前版本号
export K_VERSION_PRO=`/usr/bin/agvtool mvers -terse1`

# 取build值
export K_BUILD_VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${K_PROJECT_INFOPLIST_PATH})

# ExportOptions位置
export ExportOptionsPlistPath=/Users/用户/Desktop/项目名-Release/ExportOptions.plist

# 包释放根目录
export K_DIST_ROOT_PATH=/Users/用户/Desktop/项目名-Release

# 获取时间
export K_JENKINS_TIME=`date +%Y%m%d%H%M`

# 包/时间
export K_DIST_PATH=$K_DIST_ROOT_PATH/$K_JENKINS_TIME

# xcarchive文件
export K_ARCHIVE_PATH=$K_DIST_PATH/$K_APP_NAME.xcarchive

# 导出目录
export K_EXPORT_PATH=$K_DIST_PATH/$K_EXPORT

# 包命名规则示范:
export K_IPA_NAME=$K_IPA_PREFIX$K_VERSION_PRO$K_IPA_TYPE$K_BUILD_VERSION"_"$K_JENKINS_TIME


###############################################################################################################

# 目录判断
if [ ! -d $K_DIST_ROOT_PATH ]; 
then
   mkdir $K_DIST_ROOT_PATH
fi

if [ ! -d $K_DIST_PATH ];
then
   mkdir $K_DIST_PATH
fi


# 解锁钥匙串
# security unlock-keychain -p "电脑密码" ~/Library/Keychains/login.keychain-db

# clean
$XCODE/xcodebuild clean  -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet

# build
$XCODE/xcodebuild build -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet

# archive
$XCODE/xcodebuild archive -archivePath $K_ARCHIVE_PATH -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME 

$XCODE/xcodebuild -exportArchive -archivePath $K_ARCHIVE_PATH -exportPath $K_EXPORT_PATH -exportOptionsPlist $ExportOptionsPlistPath -allowProvisioningUpdates

cd $K_DIST_PATH

# 移除打包生成的.xcarchive文件
rm -rf 项目名.xcarchive


cd $K_DIST_PATH/$K_EXPORT

# 重命名包文件
mv 项目名.ipa $K_IPA_NAME.ipa

echo $K_IPA_NAME

# 包本地路径
export K_APP_PATH=$K_DIST_PATH/$K_EXPORT/$K_IPA_NAME.ipa

echo $K_APP_PATH

# svn上传
svn import -m "Jenkins upload ipa" $K_APP_PATH http://用户名@上传目录/$K_IPA_NAME.ipa --username 用户名 --password 密码


11.构建一次

12.png
  • 失败了查看控制台输出日志
    错误原因:Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/ 拷贝描述文件失败了。
    开放Jenkins下面Library权限,参照MAC Jenkins安装》第一步。
    再跑一次,结果如下:
    错误:Command CodeSign failed with a nonzero exit code 签名失败。
    修正: 打开钥匙串,设置证书可信任或者打开xcode,在对应项目上signing & Capabilities签名栏设置信任配置
13.png

重新做一次第七步,也就是替换login.keychain ,然后在 Keychains and Provisioning Profiles Management重新上传login.keychain

再次构建,就可以了

注意我这里导出的包放在了桌面,把desktop读写权限也开一下。

我的打包执行后包存放目录

14.png
  • 如果还报错Command CodeSign failed with a nonzero exit code
    可以尝试把脚本中的打开钥匙串代码放开注释
  • 2020-04-23补充
    如果更换了证书,在进行打包导出的时候需要更换ExportOption.Plist文件

你可能感兴趣的:(iOS+Jenkins持续构建-编译打包上传)