Jenkins 实现 iOS 项目自动打包

Jenkins 实现 iOS 项目自动打包Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建…

Jenkins 概述

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

安装 Jenkins

由于Jenkins 依赖于Java,所以在安装Jenkins前,需要先检查是否已安装Java环境。 在终端输入命令进行检测:

$ java -version

前往官网下载

Jenkins 实现 iOS 项目自动打包 点击进入安装说明页面,可以按照提示命令安装

使用 Homebrew 软件包管理器安装Jenkins 。

自制安装程序 jenkins-lts 。

安装命令:

  • 安装最新的LTS版本brew install jenkins-lts
  • 安装特定的LTS版本: brew install jenkins-lts@YOUR_VERSION
  • 启动 Jenkins 服务brew services start jenkins-lts
  • 重新启动 Jenkins 服务: brew services restart jenkins-lts
  • 更新 Jenkins 版本: brew upgrade jenkins-lts

安装步骤

  • 启动 Jenkins 服务后,浏览 http://localhost:8080 ,该页面需要确认是管理员安装,让我们输入密码,密码存放在红色的目录下,取出来填到输入框里就行。 Jenkins 实现 iOS 项目自动打包
  • 选择安装推荐的插件。 Jenkins 实现 iOS 项目自动打包
  • 等待插件安装完成,有的插件可能会安装失败,建议重试,直到把建议安装的都装好。 Jenkins 实现 iOS 项目自动打包
  • 插件安装完成后会自动跳转到配置完管理员账户 Jenkins 实现 iOS 项目自动打包
  • 点击保存并完成,完成注册

Jenkins 配置

打开浏览器,输入localhost:8080,即可打开Jenkins,输入密码,点击继续。

重启Jenkins

因部分插件依赖可能出现错误 Jenkins 实现 iOS 项目自动打包 待创建好用户后,可以重启Jenkins,并用刚创建的账户或者admin账户登录Jenkins。 重启Jenkins方法,命令行中输入jenkins-lts,回车即可。

安装iOS相关插件

iOS打包需要钥匙串中访问证书、描述文件等,所以我们要安装钥匙串和描述文件插件。 进入Jenkins->系统管理->插件管理安装相关插件,可通过右上角过滤搜索。然后选择需要安装的插件,进行勾选,安装。安装成功后可以选择是否重启Jenkins。 Jenkins 实现 iOS 项目自动打包 Jenkins 实现 iOS 项目自动打包 Jenkins 实现 iOS 项目自动打包 等待安装完成后重启 jenkins Jenkins 实现 iOS 项目自动打包

配置钥匙串

成功之后,我们可以在Jenkins首页->系统管理中发现刚才我们安装的Keychains and Provisioning Profiles Management,点击进入配置钥匙串和描述文件。 Jenkins 实现 iOS 项目自动打包 上传keychain和provisioning Profile文件。 Jenkins 实现 iOS 项目自动打包 可以在钥匙串中看到登录的钥匙串路径,然后只需要按照路径找到这个文件上传(点击upload)即可。 Jenkins 实现 iOS 项目自动打包 注意:login.keychain-db是上传不了的,我们需要复制一份,改为login.keychain。另外上传的时候,找不到路径,是因为资源库被隐藏起来了,需要使用command+shift+.将其显示出来,就可以了。 Jenkins 实现 iOS 项目自动打包 注意:Code Signing Identity是可以配置多个的,我们可以把通知证书、发布证书都加入到里面,方法就是点击下面的Add Code Sign Identity。

配置描述文件

先上传Provisioning Profiles文件,这些文件的路径为/Users/[你的电脑用户名]/Library/MobileDevice/Provisioning Profiles,在此路径下找到相应的项目的profile文件上传,拖入终端会显示整个路径,复制过来,点击保存就OK了,现在 Jenkins不需要一个一个上传描述文件了😁。 Jenkins 实现 iOS 项目自动打包 到此为止整个插件配置完成

创建一个工程

新建任务

选第一个,输入工程名称,点击确定。 Jenkins 实现 iOS 项目自动打包

构建配置

General

Jenkins 实现 iOS 项目自动打包

源码管理

我使用Git,credentials是登录的账号密码,打包分支可以根据需要设置 Jenkins 实现 iOS 项目自动打包 如果没有添加一个,如下图 Jenkins 实现 iOS 项目自动打包

构建环境

选择刚才插件填写的对应证书。 Jenkins 实现 iOS 项目自动打包

构建(关键)

点击增加构建步骤,选择执行shell,输入打包脚本 Jenkins 实现 iOS 项目自动打包

脚本说明

-exportArchive有一个文件adhoc_ExportOptions.plist。 Jenkins 实现 iOS 项目自动打包 不用自己创建,可以使用xcode导出ipa后,从导出的文件夹里获取。名字为ExportOptions.plist,修改一下名字就行了 method:有四种渠道。我将他们做了区分,分成四个不同的plist文件。

分别为 app-store ad-hoc enterprise development

打包导出ipa后需要执行上传内测或应用平台,我是上传的蒲公英, 使用cURL直接上传到蒲公英,具体命令蒲公英官方有提供 蒲公英API,获取uKey 和 _api_key也是在这个页面

到这里就配置完了,点击保存,可以开始构建了。

附打包脚本

#!/bin/sh
export LANG=en_US.UTF-8

# 1.设置配置标识,编译环境(根据需要自行填写 release |debug )
configuration="release"

# 工程名(根据项目自行填写)
APP_NAME="TestDome"

# TARGET名称(根据项目自行填写)
TARGET_NAME="TestDome"

# ipa前缀(根据项目自行填写)
IPA_NAME="测试"

# info.plist路径
#project_infoplist_path="./${TARGET_NAME}/Info.plist"
# 取版本号
#bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

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

# 日期
DATE=$(date +%Y%m%d-%H-%M-%S)
# 工程文件路径
ARCHIVE_NAME="${APP_NAME}_${DATE}.xcarchive"
# 存放ipa的文件夹名称(根据自己的喜好自行修改)
IPANAME="${APP_NAME}_${DATE}_IPA"

# 工程根目录#工程源码目录(这里的${WORKSPACE}是jenkins的内置变量表示(jenkins job的路径):/Users/plz/.jenkins/workspace/TestDome/)
# ${WORKSPACE}/TestDome/ 中的TestDome根据你的项目自行修改
CODE_PATH="${WORKSPACE}"

# 要上传的ipa文件路径 ${username} 需要换成自己的用户名
ROOT_PATH="/Users/${username}/Desktop/Jenkins"
ARCHIVE_PATH="${ROOT_PATH}/Archive/${ARCHIVE_NAME}"
IPA_PATH="${ROOT_PATH}/Export/${IPANAME}"
echo "ARCHIVE_PATH: ${ARCHIVE_PATH}"
echo "IPA_PATH: ${IPA_PATH}"
echo "IPA_PATH:\n${IPA_PATH}">> export_history.txt

# 导包方式(这里需要根据需要手动配置:AdHoc/AppStore/Enterprise/Development)
EXPORT_METHOD="AdHoc"
# 导包方式配置文件路径(这里需要手动创建对应的XXXExportOptionsPlist.plist文件,并将文件复制到根目录下[我这里在源项目的根目录下又新建了ExportPlist文件夹专门放ExportPlist文件])
if test "$EXPORT_METHOD" = "AdHoc"; then
    EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/AdHocExportOptions.plist
elif test "$EXPORT_METHOD" = "AppStore"; then
    EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/AppStoreExportOptios.plist
elif test "$EXPORT_METHOD" = "Enterprise"; then
    EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/EnterpriseExportOptions.plist
else
    EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportOptions/DevelopmentExportOptions.plist
fi

# 指ipa定输出文件夹,如果有删除后再创建,如果没有就直接创建
if test -d ${IPA_PATH}; then
    rm -rf ${IPA_PATH}
    mkdir -pv ${IPA_PATH}
     echo ${IPA_PATH}
else
     mkdir -pv ${IPA_PATH}
fi

# 进入工程源码根目录
cd "${CODE_PATH}"

# 执行pod
pod install --verbose --no-repo-update

#mkdir -p build

# 清除工程
echo "++++++++++++++++clean++++++++++++++++"
xcodebuild clean -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -configuration ${configuration}

# 将app打包成xcarchive格式文件
echo "+++++++++++++++++archive+++++++++++++++++"
xcodebuild archive -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -configuration ${configuration} -archivePath ${ARCHIVE_PATH}

# 将xcarchive格式文件打包成ipa
echo "+++++++++++++++++ipa+++++++++++++++++"
xcodebuild -exportArchive -archivePath ${ARCHIVE_PATH} -exportPath "${IPA_PATH}" -exportOptionsPlist ${EXPORT_METHOD_PLIST_PATH} -allowProvisioningUpdates

# 删除工程文件
# echo "+++++++++删除工程文件+++++++++"
# rm -rf $ARCHIVE_PATH


# 蒲公英上传结果日志文件路径
PGYERLOG_PATH="${IPA_PATH}/upload_pgyer_log"
# 创建蒲公英上传结果日志文件夹
mkdir -p ${PGYERLOG_PATH}
# 创建蒲公英上传结果日志文
touch "${PGYERLOG_PATH}/log.txt"

# 上传IPA到蒲公英 根据蒲公英官方文档编写
file_path="${IPA_PATH}/${IPA_NAME}.ipa"
echo "正在上传文件"
echo $file_path
curl -F "file=@${file_path}" -F "uKey=0ea4142136d51cbe5aaf94cdbf6aaeb1" -F "_api_key=16d3ff684c5576f9d9f6c958cf0a7300" https://upload.pgyer.com/apiv1/app/upload

构建 (打包上传)

立即构建

点击立即构建开始构建 Jenkins 实现 iOS 项目自动打包

点击构建版本可以查看状态和控制台输出信息 Jenkins 实现 iOS 项目自动打包

Jenkins 打包 ipa 常见错误汇总

问题1. pod时候会出现 command not found

当你jenkins服务在非OS X系统运行时,使用Mac节点的配置稍微不一样。

解决方案

  • 系统管理-系统配置-全局属性 Jenkins 实现 iOS 项目自动打包

值:在终端中输入echo $PATH将输出内容复制填写。

问题2:ipa包导出失败,导致报错:curl: (26) Failed to open/read local data from file/application

1.先去文件路径下查看打包是否成功,路径下包含已经IPA文件,确定路径没有问题;
2.查看脚本文件中的路径,脚本中的ipa名称与打包出来的IPA文件的名称不一致。
解决方案

将脚本中的ipa名称改为应用的显示名称

问题3. 打包时报错:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.

解决方案 1

xcode archive 导出 ipa 时不要勾选 Rebuild from Bitcode ,导出的 ExportOptions.plist 替换项目目录下的 AdHocExportOptions.plist Jenkins 实现 iOS 项目自动打包

解决方案 2

需要把xcode上的BitCode关闭,设置成No即可,project和targets里面对应的BitCode都需要关闭 Jenkins 实现 iOS 项目自动打包

问题4. 打包时报错:xcodebuild: error: 'APP.xcworkspace' does not exist

解决方案
Choose Product > Scheme > Manage Schemes.
Share your scheme:

Jenkins 实现 iOS 项目自动打包

也可能是Xcode Workspace File 路径错误

问题5. 编辑报错 error: /Users/plz/.jenkins/workspace/target_name/Pods/Target Support Files/Pods-HIGO/Pods-HIGO.release.xcconfig: unable to open file (in target "target_name" in project "target_name") (in target 'target_name' from project 'target_name')

解决方案

shell脚本中添加如下命令

1. sudo gem install cocoapods --pre
2. pod install
如果不行 加上 3. pod update        

问题6. 编辑报错 This project contains no schemes

解决方案

Jenkins 实现 iOS 项目自动打包

这里我们不能去Jenkins项目目录下修改Xcode项目的shared勾选,我们应该在本地的开发源码上修改,然后提交到git远程仓库,再次构建!!

问题7. 编辑报错 `xcodebuild -exportArchive -archivePath /xxx.xcarchive -exportOptionsPlist /Users/xxx/ExportOptions.plist -allowProvisioningUpdates -exportPath ./

error: archive not found at path ‘/xxx.xcarchive’ Build step ‘Execute shell’ marked build as failure`

解决方案

用脚本构建时,脚本输写错误

问题8. 编辑报错 error: archive not found at path '/Users/plz/Desktop/Jenkins/HIGO/Archive/HIGO_20210122-15-43-31.xcarchive'

查看日志发现在执行 pod install 时中断了,引入的三方库没有拉下来 Jenkins 实现 iOS 项目自动打包

解决方案

按照日志提示 shell 脚本 pod install 前执行 pod update PLPlayerKit –no-repo-update

参考文章

Jenkins+github+fir持续集成iOS项目

iOS: Jenkins + xcodebuild打包ipa + 上传蒲公英

今天的文章Jenkins 实现 iOS 项目自动打包分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23532.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注