Tomcat Jenkins iOS自动打包

Tomcat Jenkins iOS自动打包

Jenkins 可以配合测试人员或者 CI 打包,主要作用是提供打包页面选择和参数传递,最后导出 ipa 包。

打包方式有如下几种

  • 借助 Jenkins Xcode插件,配置好参数打包
  • 自行编写脚本打包(xcodebuild)
  • 使用脚本唤起 fastlan 打包

当然首选直接配置了,不过还是会遇到很多配置的坑,我总共打了30次才成功。

前言:使用 brew 安装软件可以避免很多问题,打包失败,多半是配置和路径问题。

注意:需要安装 JDK 环境

JDK安装

由于 Tomcat和 Jenkins 都需要 Java 环境,所以需要安装 JDK

brew tap AdoptOpenJDK/openjdk
brew install adoptopenjdk8

Tomcat 安装

搜索 tomcat

brew search tomcat

安装 tomcat9, 不建议安装最新版本。

brew install tomcat@9

Tomcat 启动方式

  1. 单次启动, 该运行方式需要保持终端常驻
catalina run
  1. 直接执行脚本启动

    该方式不需要保持终端常驻,在 Tomcat路径/usr/local/Cellar/tomcat下的某个 bin 文件下,如下图

    截屏2021-03-10 下午4.22.52

  2. brew 启动

brew services start tomcat

打开浏览器,输入 http://localhost:8080/可以查看是否启动成功。

Tips: 不建议使用最新版本 Tomcat, 我使用 Tomcat11时遇到 jenkins 启动总是启动失败。

Jenkins安装

1.Jenkins官网下载 .war 包

截屏2021-03-10 下午5.18.03

  1. 直接将 jenkins.war 包放在 Tomcat的 webapps 目录下,启动 tomcat 会自动解压和启动,如下图:

截屏2021-03-10 下午5.20.52

此时需要重启一下 Tomcat

打开浏览器,输入 http://localhost:8080/jenkins 可以进入Jenkins 如下图:

img

如果404请重启或者安装其他tomcat/Jenkins 版本试一试。

可能会遇到的问题

端口被占用,修改 Tomcat 端口或者找出并杀掉占用的服务。

Tips: 以下流程访问参考链接配置,这里我只记录下遇到的问题。

配置详情:iOS-最新 Jenkins 自动化打包配置教程–掘金-老谭泡菜

Jenkins 初始化

如果出现下面这个界面,说明你的软件安装步骤已经完美成功了。

img

终端cat 提示的路径获取密码进行初始化。

之后选择安装推荐插件,可能会安装多次。

img

设置管理员账户信息,之后就算完成 Jenkins 的初始化了。

img

配置插件

插件推荐:

  • Git Parameter Plug-In: 主要用于源码和分支管理和参数化构建的。
  • Xcode integration: 非脚本构建必须
  • Keychains and Provisioning Profiles Management: 管理要是和证书的,这里我没使用。
安装插件的方式
  1. 选择Manage JenKins

img

  1. 选择管理插件

img

  1. 搜索插件安装或本地上传文件安装

img

安装完成后,开始配置了。噩梦才刚刚开始。

新建任务

点击 Jenkins首页 > 新建Item。输入任务名称并选中自由风格工程,下一步。

img

在通用选项里可进行一些描述信息填写和构建包丢弃计划(非必要设置),如图:

img

之后就是进行插件配置了

Git Parameter Plug-In

该插件主要用于参数化配置和选择,参数可以后面使用和脚本配置使用。

可以配置 git 参数,其他参数,如发版模式 Debug\Release

比如我配置了 git 分支选择,和构建环境选择参数,如下图

截屏2021-03-11 下午2.47.23

这里定义的 brach 和 configuration在后面的环境中就可以作为变量使用${branch}${configuration}

打包的时候就可以通过Build with parameters打包

截屏2021-03-11 下午2.51.22

分支过滤

我们项目每个版本都会创建一个分支,并且会有对应的 bug 分支,每一个开发同学还会自建版本分支,所以会造成 git 远程分支较多,打包的时候难以快速选择到目标分支。这种情况下我们就需要进行分支过滤。

点击插件的高级

通过高级进入分支过滤

过滤示例:只保留 features 下 main 分支和 bufFix 分支

只保留 main 分支和 bugFix 分支

.*表示任意
|表示与 参考Jekins 配置多个分支过滤

源码管理

这里需要填写您的账号密码,否则可能不具有拉取代码权限。

构建

执行Shell

由于我主要借助插件打包,所以 执行Shell部分我只执行了pod install

一开始这里没遇到问题,后来遇到了

遇到的问题

command not foundpod 找不到

libexec/temp/jenkins10049699527950477165.sh: line 2: pod: command not found

解决办法

步骤1:打开 Jenkins, 系统配置 --> 系统设置 --> 全局属性添加环境变量,勾选

步骤2:打开终端,输入echo $PATH, 复制输出的路径到 jenkins

步骤3:添加键值对,键PATH,值刚刚复制的

img


CocoaPods requires your terminal to be using UTF-8 encoding.

解决办法

其实错误提示已经给出方案,在构建脚本种加入

export LANG=en_US.UTF-8

所以最后我的 shell 为

export LANG=en_US.UTF-8
pod install
Jenkins Xcode构建配置

这里的配置是非常重要和细节的,不确定的点击后面问号仔细看。

这里还需要根据项requires a provisioning profile with the Push Notifications and Associated Domains features目特性和需求配置,我的配置如下:

项目配置部分

截屏2021-03-10 下午5.55.32

Tips: 这里的 Configuration 参数可以使用上面定义的变量即:${Configuration}达到动态选择打包的效果

导出设置

截屏2021-03-10 下午6.00.20

Code signing & OS X keychain options(非常重要)

这里最容易出错,而且根据项目不同配置不同。

我们证书签名都是统一管理,xcode 项目没有选择 Automatic Signing

截屏2021-03-10 下午6.08.02

所以我选择了 Manual signing(其实我是试过了其他两个不行)

截屏2021-03-10 下午6.02.19

Provisiong profile UUID 怎么找?

由于这一步配置错误,导致总是打包失败。

首先需要知道的是Provisioning porfile位置在那里,大部分人的在:

/Library/MobileDevice/Provisioning Profiles

进入这个目录之后。你会发现有很多个,全部都是 UIID 的,你不知道哪个对应哪个项目,而且还有 Debug 和 Release 的。

我的办法是:全部删除,然后打开xcode项目,重新下载 Release 的 provisioning profile.

Unlock Keychin(非常重要)

这个配置正确,jenkin才有访问钥匙串证书的权限。

截屏2021-03-10 下午6.10.10

我们的xcode项目Signing 没有勾选,所以没有选择 Automatic Signing

遇到问题
Advanced Xcode build options

这里最需要注意的是,如果项目是使用 cocoapods 或者 xcworkspace 工程。则需要填写Xcode Workspace File

截屏2021-03-10 下午6.17.36

遇到的问题

问题1

error: module 'xxxx' not found某个私有库没有找到

解决

由于配置中没有配置Xcode Workspace File,所以直接默认编译 xcodeproj,所以这里需要配置。

使用脚本构建(可选)

如果使用 Xcode 插件则不需要以下。

shell 脚本

Date="$(date +"%m%d_%H%M")"
Day="$(date +"%m%d")"

workspace_path=$WORKSPACE
archive_path=$JENKINS_HOME/workspace/Packages/项目名

cd $workspace_path
pod install

cd 项目名.xcodeproj

# 我的项目中有配置bugly的脚本,打包时会上传DSYM,影响打包速度。
# 打包给测试使用时,用不到,所以使用perl正则找到配置bugly的脚本,替换为空字符串。
cat project.pbxproj | perl -pe "s/(?<=shellScript = \").*UPLOAD_DSYM_ONLY=1.*(?=(\"))//" > 999.pbxproj
mv -f 999.pbxproj project.pbxproj

xcodebuild archive \
-workspace "$workspace_path/项目名.xcworkspace" \
-scheme $Scheme \
-configuration $Configuration \
-archivePath $archive_path/项目名.xcarchive

xcodebuild \
-exportArchive \
-archivePath $archive_path/项目名.xcarchive \
-exportPath $archive_path \
-exportOptionsPlist $WORKSPACE/${ExportType}_ExportOptions.plist

#删除旧xcarchive
rm -rf archive_path/项目名.xcarchive
#改名
IpaName="${Scheme}_${Configuration}_${Date}.ipa"
mv $archive_path/项目名.ipa $archive_path/$IpaName

if [ $UP_PGY == true ] 
then
IPA="$archive_path/$IpaName"
PGYUSERKEY="user_key"
PGYAPIKEY="api_key"
PGYDESC="Jenkins自动打包"

#自动上传到蒲公英
curl -F "file=@$IPA" \
-F "uKey=$PGYUSERKEY" \
-F "_api_key=$PGYAPIKEY" \
-F "updateDescription=$PGYDESC" \
"https://qiniu-storage.pgyer.com/apiv1/app/upload"
fi

构建后操作

构建后操作我这里选择归档成品,这样打包完成后就可以直接在页面上下载 ipa包

截屏2021-03-11 下午1.53.03

遇到的坑

requires a provisioning profile with the Push Notifications and Associated Domains features

这个错误在我一开始打包的时候遇到。没有配置 Xcode Workspace File和 Configuration, 当时 Coding & Signing 也没有配置。

参考

iOS-最新 Jenkins 自动化打包配置教程–掘金-老谭泡菜:比较齐全的安装教程,其中的 jenkins Xcode插件配置非常重要,包含上传包到fir(插件版)

Tomcat+Jenkins iOS 自动打包–花果山松鼠:包含 Tomcat 部分的使用,直接使用 Jenkins.war 放在 Tomcat, 使用脚本打包方式, 还包含上传到蒲公英(脚本版)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值