ios 在mac上配置Jenkins自动化打包

https://www.jianshu.com/p/5eda1a35246b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

之前使用jenkins安装包配置过Jenkins,但是配置好之后因为使用安装包安装的jenkins是在机器上新建的账户,所以在配置证书时比较麻烦,会有权限问题,必须把证书和描述性文件拷贝到jenkins账户下才可以,最近使用brewinstall安装jenkins感觉比较方便,可以共用系统的证书和描述性文件

1.安装之前先检查是否装有Jenkins依赖的java环境, Jenkins依赖的是JDK1.8.xx

java -version

如果出现以下信息,则说明已经安装了java,直接进行第3步,若没出现则进行第2步

java version "1.8.0_102"

Java(TM) SE Runtime Environment (build 1.8.0_102-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

2.安装JDK1.8

JDK1.8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载后进行安装,安装后进行第1步进行检查是否安装成功

3.检查是否有安装HomeBrew

brew -v

若出现以下信息则说明已安装HomBrew,若未出现则进行安装HomBrew

Homebrew 2.0.1

Homebrew/homebrew-core (git revision 6d0e9; last commit 2019-02-11)

HomeBrew安装方式:官方https://brew.sh, 亦可以直接直接在终端执行下面的命令

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

4.安装Jenkins

brew install jenkins

5.启动Jenkins服务,终端输入命令

jenkins

在浏览器中输入http://localhost:8080,首次安装应该会出现如下界面,这里需要你去找到Jenkins的初始密码,执行cat /Users/yao/.jenkins/secrets/initialAdminPassword 获取原始密码

 

填充密码后,点击继续进入插件安装方式选择,是推荐安装,还是自定义安装,一般都是选择推荐安装

 

 

 

 

插件安装过程中有可能会有些安装失败,没关系,后面可以在插件管理里面进行重新安装

安装插件完成后进入jenkins 进入创建账户页面

 

 

创建一个jenkins账户密码就可以了,然后进入jenkins URL配置页面,这里配置的URL就是局域网内可以使用的链接访问Jenkins的地址,比如因为我的ip地址是192.168.10.30, 且为固定ip, 所以我配置的是 https://192.168.10.30:8080/,当然这里也可以暂时不配置,在配置里面也可以进行配置

 

 

点击保存继续

 

6.插件安装

因为我是打从gitlab管理源码并打ios包,然后发布到fir上面,所以需要以下插件:

1,gitLab Plugin

2,gitLab Hook Plugin

3,Xcode integration

4,keychains and provisioning profiles Management

5,CocoaPods Jenkins Integration

6,build Timeout

7,description setter plugin

8,Email Extension Plugin

9,SSH Agent Plugin

10, workSpace Cleanup Plugin

11,fir-Plugin

进入Jenkins界面后,点击系统管理->插件管理->可选插件: 搜索自己想要安装的插件进行安装,待所有插件安装完成后进行重启Jenkins, 在浏览器中输入http://localhost:8080/restart

但是有些插件在上面是搜不到的,例如fir-Plugin,那只能自己去下载fir-Plugin然后使用高级方法安装.

fir-plugn下载

 

关闭Jenkins服务:  在Jenkins服务器网址后面加上exit    http://localhost:8080/exit

重启Jenkins服务:  在Jenkins服务器网址后面加上restart    http://localhost:8080/restart

7.创建任务

 

 

 

 

 

 

8.源码管理

我这里是用git管理的源码,所以选择git:

 

 

这个时候会报错,没有权限访问git仓库,因为这是私有仓库,所以需要配置SSH获取访问权限.

ssh-keygen -t rsa -C "你的邮箱标识"

 

 

把公共密钥放到git服务器, jenkins 私钥,jenkins.pub 公钥 

获取公钥

$ cat /Users/Shared/Jenkins/.ssh/id_rsa.pub

回到构建的项目查看,已经有访问权限了

8.构建

 

xcodeBuild打包脚本

echo 'start build TestDemo'

pwdwhoami

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

security unlock-keychain -p "你的打包机器密码" ~/Library/Keychains/login.keychain

#工程环境路径

workspace_path=.

#项目名称

project_name=FamilyDoctor

echo"第一步,更新库文件"

/usr/local/bin/pod update --verbose --no-repo-update

echo "第二步,清除缓存文件...................."

xcodebuild cleanrm -rf archiverm -f $project_name.ipa

echo "第三步,设置打包环境,准备开始打ipa包...................."

sed -i '' 's/\app-store\<\/string\>/\development\<\/string\>/' archieveOpt.plistsed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' $project_name.xcodeproj/project.pbxproj

echo "第四步,执行编译生成.app命令"

xcodebuild archive -workspace $project_name.xcworkspace -scheme $project_name -configuration Release -archivePath archive/$project_name.xcarchive CODE_SIGN_IDENTITY="iPhone Developer: Zhengyang Wu (JYGL73395F)" PROVISIONING_PROFILE_SPECIFIER="development_patient_kevin"echo "

第五步,执行编译生成.ipa命令"

xcodebuild -exportArchive -exportOptionsPlist archieveOpt.plist -archivePath archive/$project_name.xcarchive -exportPath ./ -configuration Release

-exportOptionsPlist archieveOpt.plist这里的archieveOpt.plist是我们在工程目录下新建的.plist文件,该文件指明打包的类型和teamid

 

.plist内容

 

 

9.上传fir

 

fir.im Token是必填的,查看方法:请登录fir.im后,点击头像选择API token进行查看

10.添加描述和链接

上传fir后肯定想显示一个链接,能直接跳到fir的二维码页面

添加set build description

 

 

 

 

构建后会出现如下效果:

 

 

可以看出显示的是html格式,并不是可以点击的链接,这是因为jenkins没有设置支持html语法,需要在

jenkins->系统管理->configure global security->Markup Formatter中选择"safe HTML"就可以了.

提交代码触发不了打包的问题:

进入gitLab项目   在对应位置添加

http://192.168.10.29:8080/gitlab/build_now

http://192.168.10.29:8080是jenkins的打包地址,添加位置如下

 

 

这样就可以自动触发打包了

遇到的问题 : jenkins 自动构建 IOS 包签名遇到问题   app: errSecInternalComponent Command /usr/bin/codesign failed with exit code 1

解决办法:

 编译之前添加 security unlock-keychain -p "你的密码" "path to keychain/login.keychain"

根本原因是Jenkins,ssh方式到slave机上,默认是没有账户的,但是访问钥匙串要求必须有用户身份,所以添加一步输入密码解锁钥匙串,可以给Jenkins一个用户身份。 build步骤前添加一步解锁钥匙串。 security unlock-keychain -p "login pwd" ~/Library/Keychains/login.keychain

11. 卸载Jenkins

如果忘记账户密码 可以彻底删除重新安装

如果brewinstall 安装的,彻底删除需在终端依次执行以下命令:

sudo rm -rf /Users/Shared/Jenkins

sudo dscl . -delete /Users/jenkins

sudo dscl . -delete /Groups/jenkins

sudo rm -f /etc/newsyslog.d/jenkins.conf

pkgutil --pkgs | grep 'org\.jenkins-ci\.' | xargs -n 1 sudo pkgutil —forget

如果安装包 安装的 可以彻底删除重新安装,彻底删除需在终端依次执行以下命令:

'/Library/Application Support/Jenkins/Uninstall.command’



解决 Jenkins M1 Mac (arm64) 节点构建 iOS / macOS App 时 CompileStoryboard 卡住的问题

 

问题发生在 Jenkins 节点机器为 M1 Mac (Apple Silicon, arm64) 的情况下,构建 iOS App 可能会卡住,目前我遇到的都是卡在 CompileStoryboard 的地方,全网搜了一下也没找到类似的状况。

排查了一下估计有可能是因为调用的 xcodebuild 不是运行的原生 arm64 架构。虽然理论上运行 Rosetta 转译的 x86_64 应用也应该没有问题,但目前最大的可能性就是这个了(因为尝试直接在 M1 Mac mini 节点上面构建是正常的)

目前 Jenkins 在节点上使用的 openjdk 仍然是 x86_64 的,导致 Jenkins 在节点执行任务时的 shell 也是 x86_64 的。

如何判断 Jenkins 是否使用的是 x86_64 架构的 shell:直接在 Terminal 执行 sysctl sysctl.proc_translated 将返回 0 ,在 Rosetta 转译模式下执行会返回 1。

解决方案:

  • 方案一:
    在构建脚本中,调用 xcodebuild 的时候,加上 arch -arm64 前缀,强制使用原生 arm64 的 xcodebuild 来构建 App。

     

     

    xcodebuild


    (注意需要判断一下当前是否在 arm64 Mac 上运行,x86_64 Mac 执行此命令会报错,如果你使用的构建脚本是 shell 可以用 uname -m 获取当前架构)

     

  • 方案二:安装原生支持 arm64 架构的 JDK,目前(2021年上半年)仅有 zulu 支持: brew install --cask zulu,然后让 Jenkins 使用该 JDK。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值