技术标签: unity jenkins Unity开发方案和知识
通过本文可以了解到如何在windows和mac上部署Jenkins。并且通过Jenkins实现Unity在IOS,安卓和PC等多平台自动打包的功能,并且可以将打包结果通过飞书机器人同步到飞书群内。优化工作流,提高团队的开发效率。文末记录了实际使用Jenkins时遇到的各种问题,以及对应的解决方法。
我们团队工作中配置了专门的mac设备,用于处理打包任务,各个职能的人可以根据自己的需要登录到Jenkins后台执行对应的打包指令。并且工作日会根据git提交情况定时自动构建,每天将各个平台的构建包,通过Testflight等方式同步给组内的成员。
官网:Jenkins
官方文档说明:Jenkins User Documentation
填写账号和开机密码(如果不知道自己的账号,可以查看下方win10无法安装的问题处理,查看自己的账号),点击Test credentials确保账号正确
进入服务选择jenkins
双击Jenkins,启动类型设置为自动。
登录页签,输入当前的开机密码。回到上个页面点击启动
启动成功后,点击之前报错界面的retry
1.搜索栏搜索管理工具
2.本地安全策略
3本地策略->用户权限分配->右键作为服务登录->属性
添加用户组->高级->输入名字->立即查找->选中账户点确定
安装界面account为下图的用户名,必须包含域。密码为开机密码
命令行执行 brew install jenkins
修改Jenkins工作目录
输入一开始设置的端口号
http://127.0.0.1:8080/
初次需要输入密码
填入对应git地址,选择配置好的ssh key
如果未创建ssh key,按照下面的步骤创建ssh key
选择Ssh username with private key,
把private key 填入就可以了 (注意这里填的是私钥-----BEGIN RSA PRIVATE KEY----- xxx -----END RSA PRIVATE KEY----- )
尝试build,成功说明git配置正确
启动
net start jenkins
关闭
net stop jenkins
启动
brew services start jenkins
停止
brew services stop jenkins
重启
brew services restart jenkins
1.修改环境变量JENKINS_HOME E:\JenkinsHome
2.修改jenkins.xml
在jenkins的安装目录下修改JENKINS_HOME
<env name="JENKINS_HOME" value="%JENKINS_HOME%"/>
之后重启jenkins
Mac下Jenkins的默认安装路径为
/Users/xxx/.jenkins
对应的配置文件config.xml也放置在该目录下
默认的workspace
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
ManageJenkins->Manage plugins->可选插件->搜索unity 安装对应插件
Manage Jenkins->Global ToolConfiguration
添加对应的引擎地址
设置unity 地址C:\Program Files\Unity\Hub\Editor\2020.1.0f1c1
这里特别注意mac配置unity的话,路径最后要以Unity.app为结尾。
先在unity的editor文件夹创建BuildTools
TypeScript |
确保可以正常运行
Unity相关命令行
https://docs.unity3d.com/Manual/CommandLineArguments.html
添加Invoke Unity3D Editor
选择对应版本
添加命令
C++ |
注意设置名称,之后会作为参数。这里选的是选项型参数,一行代表一个选项,第一个代表默认选项
在之后的脚本里可以通过${platform} 获取参数(这里的platform就是上面的参数名称)
例子一,shell脚本直接
Bash |
例子二,unity3Deditor命令调用。这里--platform是自定义的参数可以自定义其他任意参数
Bash |
之后在unity内的editor可以通过System.Environment.GetCommandLineArgs()获取该参数
C# |
安装Conditional BuildStep
在构建步骤的时候,可以添加Conditional Step
这里添加了一个String match的条件,满足条件(platform字段为pc时)才会执行对应的构建步骤.
后续的构建步骤可以像之前的普通步骤一样添加
在插件界面安装Xcode integration 插件
Manage Credentials界面,配置全局凭证
这里先按照前面的根据条件构建,当平台名为ios时再进行此操作
Automatic Signing如果失败的话,可以使用ManualSigning
需要先去develop后台生成一个新的profile,下载之后双击启用。
然后在manualSigning的uuid填入新的profile证书的uuid
uuid的查看方式是在安装完profile之后 ,在 资源库/MobileDevice/Provisioning Profiles/xxx.mobileprovision
这里mobileprovision文件名就是对应的uuid可以根据安装时间进行查看。
TestFlight上传需要用到altool
Bash |
注意这里的Apikey是在appstore connect的用户和访问界面的秘钥界面生成的。生成秘钥后可以下载对应的p8秘钥文件,需要将该文件放置在 users/xxx/private_keys 目录下
apiIssuer 的id就是在用户和访问界面issuer id
组内人员需要进行测试时请按照下方指南进行操作
另外补充一些后台需要进行的操作
一个是需要在用户和访问界面,添加需要使用testflight的测试人员的apple id
添加后会向该测试人员发送一个邮件邀请,对方同意之后需要到应用的TestFlight界面。
如果还没有内部测试组,可以先添加测试组。如果已经存在测试组,就点击已有的测试组,将新加入的开发人员加入到测试组中
在群聊的设置中根据如下步骤添加机器人
在工程指定目录创建一个python脚本feishumsg.py(这里的目录地址为 ./toolscripts/feishumsg.py), 复制webhook地址 填到url内
Python |
在Jenkins后台添加构建步骤
填入如下命令
PowerShell |
运行成功之后可以在对应群聊收到消息
安装Role based Authorization Strategy插件
原因是缺少 dx.bat 和 dx.jar ,实际上31.0.0有d8.bat和d8.jar
进入对应unity的sdk目录 C:\Program Files\Unity\Hub\Editor\2020.1.0f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\31.0.0
命令行运行 mklink dx.bat d8.bat
C:\Program Files\Unity\Hub\Editor\2020.1.0f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\31.0.0\lib
命令行运行 mklink dx.jar d8.jar
或者直接复制对应文件
相关处理链接
命令行运行如下指令
C# |
这是jenkins的Unity3d Editor工具,在不传-projectPath 参数的时候会把当前的目录作为参数传入。如果传入后拼接的地址,不是unity工程所在的目录,就会报错。所以,需要在editor脚本上添加
-projectPath xx 参数,最后拼接的地址为unity工程所在地址
这个是由于Unity工程打开的时候,出现的问题。把Unity工程都关闭就行
运行脚本时出现上面的报错,原因是没有对应的requests模块,在命令行输入
pip install requests,安装requests模块
mac上运行 python3 -m pip install requests
相关处理链接
进入/usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist文件中的httpListenAddress修改为0.0.0.0 重启,就能连接了
如果还不行查看是否存在 ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist文件,进行同样修改
删除 /Users/XXX/.jenkins 下的.owner文件
这是因为默认的git拉取超时是10分钟,在clone大的项目的时候可能出现超时的情况。在源码管理里面添加高级克隆行为参数,设置超时时间即可
通过括号+cd对应路径的方式可以解决该问题 ,修改后的指令如下
Bash |
直接在bash 命令行下执行cmake --version,没有报错,说明cmake其实已经安装了。是环境变量的问题。bash命令行下执行which cmake。查看到cmake的路径为 /opt/homebrew/bin/cmake。之后在Jenkins后台 系统管理->系统配置->全局属性部分的环境变量添加对应变量
Bash |
用以下命令刷新sshkey,底下的targetAddress替换成实际的仓库地址(或者ip)
Bash |
刷新完之后,找到/Users/qsgdmj/.ssh/的 id_rsa(私钥)和id_rsa_pub(公钥),在jenkins后台添加对应的私钥,在仓库账户上添加公钥。之后可能会出现下方12.No ED25519 的问题。继续按下方解决方式处理
在命令行执行git.exe ls-remote -h -- [email protected]:xxx/xxx.git,弹出提示之后输入yes
命令行执行一下指令
Bash |
可以看到homebrew.mxcl.jenkins.plist配置所在的位置,打开后修改ProgramArguments里的--httpListenAddress=本机ip。
ProgramArguments的第一个项为jenkins所在地址,用finder 打开该地址/opt/homebrew/opt/jenkins/bin/jenkins
上一级目录同样有一个文件homebrew.mxcl.jenkins.plist。把该文件的httpListenAddress也改成本机ip(如果这一步不执行可能出现每次restart jenkins时,ip又被重新修改了)
还有就是修改.jenkins/目录下的jenkins.model.JenkinsLocationConfiguration.xml,将jenkinsUrl改成新的本机地址,之后调用brew services restart jenkins
比如下面的构建日志,中途出现报错"Build Finished, Result: Failure." 但是最后的构建结果却是"Finished: SUCCESS"
C# |
添加Text Finder插件
之后添加构建后步骤,Search files or the console log for regular expression(s)
填入之前出现的报错
由于打包机为Mac,所以需要先将移动硬盘的格式修改为APFS
移动硬盘的格式可以右键->显示简介 查看。如果已经是APFS格式可以跳过这个步骤
具体操作是命令行输入diskutil list
可以看到所有的硬盘信息
YAML |
可以看到信息/dev/disk6 (external, physical)
external代表移动硬盘,disk6为该移动硬盘的编号
之后命名行输入
diskutil eraseDisk JHFS+ T7 disk6
T7为新的硬盘名称,disk6为对应编号
之后在程序坞打开磁盘工具,选择该移动硬盘,选择抹掉
之后选择对应的文件格式
至此硬盘设置工作完成。
工作路径修改到移动硬盘会遇到一些权限问题。具体操作为
(1)将jenkins的配置config.xml的workSpace修改为
<workspaceDir>Volumes/T7/Workspace/JenkinsWorkspace/${ITEM_FULL_NAME}</workspaceDir>
(移动硬盘名称为T7,对应路径为Volumes/T7)
之后执行 brew services restart jenkins 重启jenkins
这时直接运行会报错"Operation not permitted",原因是由于mac本身权限管理,导致Jenkins无法直接对移动硬盘进行操作。
(2)参照该网址内的权限修改操作,设置完全磁盘权限。https://stackoverflow.com/questions/61248588/jenkins-unable-to-start-jenkins-on-an-external-hard-drive
这里需要注意用which java时,显示的/usr/bin/java 实际上是一个映射,并不是正在java_home的位置
需要执行/usr/libexec/java_home -V 可以看到真正的java_home路径
之后重启jenkins
(3)修改完磁盘访问权限,如果jenkins还是无法对移动硬盘进行操作,可以关闭Mac的sip设置
具体操作为
(4)拥有磁盘权限之后,jenkins执行任务时还可能出现如下问题:未受保护的ssh key。
Plain Text |
这时候需要到Jenkins后台,将对应的ssh key的范围由全局修改为系统
至此,问题全部解决,可以正常执行Jenkins任务
删除Library下的Bee目录,然后重新启动Unity
在MacOs系统上,当Unity工程放在移动硬盘上进行安卓打包的时候会出现这个问题。原因是移动硬盘的格式问题。可以参照问题15的前置工作,将移动硬盘格式修改为APFS
详细报错内容如下
Ada |
登录appstore后台,发现是因为有新的许可证协议
点击协议上的链接同意协议即可
文章浏览阅读4.1w次,点赞50次,收藏268次。图论算法摘要1. 图的概念图一个图(graph) G=(V,E)G=(V,E)G=(V,E) 由顶点(vertex)集 VVV 和边(edge)集 EEE 组成。每一条边就是一个点对 (a,b),a,b∈V(a,b),a,b∈V(a,b),a,b∈V。有时候也把边叫做弧(arc)。有向图如果点对(a,b),a,b∈V(a,b),a,b∈V(a,b),a,b∈V是有序的,那么图就是有向的..._npc问题
文章浏览阅读7.6k次,点赞8次,收藏24次。目录问题阐述与解决效果RVO Avoidance与Detour Crowd AI Controller的区别如何使用Detour Crowd AI Controller蓝图C++弃用的写法新版写法(也很简便)问题阐述与解决效果在项目存在大规模寻路人群时,很容易出现两个角色的寻路路径相冲突,就会造成这种互斥现象。使用AI ControllerUE4为此..._detour crowd
文章浏览阅读1.1w次,点赞22次,收藏146次。《信息系统安全》教材(作者:陈萍,张涛,赵敏)的课后习题答案_信息系统安全第二版课后答案
文章浏览阅读3.2k次,点赞3次,收藏13次。ajax 是不能跨域。那么怎么解决前端发送请求的跨域问题呢。超详细,1、设置响应头、2、通过jsonp 3、通过调用jQuery封装的jsonp 4、httpclient 5、nginx_ajax请求跨域
文章浏览阅读2.9w次,点赞68次,收藏453次。HTML5+CSS期末大作业:个人网站设计——响应式个人简历介绍网页(5页) HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水_响应 期末 作业
文章浏览阅读1.4k次。python 用PIL Matplotlib处理图像的基本操作_jupyter 显示matplotlib图片完全
文章浏览阅读993次。Java Web开发的用到的框架之多简直令人发指,而且因为版本的更新换代导致的问题也是层出不穷。然而这也是Web技术不断演化的结果,要么选择接受,要么引领节奏。原来常用的Javaweb框架是SSH(Struts + Spring + Hibernate)后来随着Spring的强大以及Struts漏洞上的等等问题,演变成为了Spring + SpringMVC + Hibernate/Mybatis。互联网这块比较常见的是Mybatis。再后来也慢慢演变为了Springboot + Mybatis。1. _javaweb框架
文章浏览阅读294次。最近写的lua脚本需要运行在多个平台,因而一些平台相关的属性必须区别设置。如路径分隔符。在lua中,没有找到相关判断操作系统的函数。因此相关设置一直手工设置,增加了环境配置的时间。 在luarocks模块中,有一个luarocks.site_config模块(一个lua文件),其安装时便设定了操作系统类型。因此我们可以从这个模块获取操作系统:示例:require "..._lua判断操作系统
文章浏览阅读6.2k次,点赞6次,收藏39次。摘要广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。(来自百度百科)算法思想1.对图中的任..._广度优先算法可行路径matlab
文章浏览阅读1.1w次,点赞5次,收藏38次。支付宝 当面付 条码支付 应用场景:商家使用扫码设备,扫描用户支付宝钱包上的条码/二维码,完成收款。支付流程:API列表: 接口名称 描述 API地址 alipay.trade.pay 统一收单交易支付接口 https://docs.op..._支付宝的应用场景
文章浏览阅读7.7k次。iPhone12怎么隐藏底部小白条?很多iPhone 12用户反馈在看手机或者玩游戏的时候,屏幕底部的小白横条非常碍眼,但是又不知道怎么隐藏掉,所以小编今天整理了下iPhone12隐藏底部横条方法,帮大家一键隐藏底部横条,一起来看看吧!iPhone12隐藏底部横条方法:利用“引导式访问“功能。打开 iPhone “设置”-“辅助功能”,下拉找到“引导式访问”并开启: 在使用该功能之前,建议仔细阅..._iphone玩王者荣耀怎么把下面那个横条去掉
文章浏览阅读550次。第一步、安装深度的“显卡驱动器”在deepin v20 中默认没有显卡驱动管理器,需要命令行安装,命令如下(刚开始一直出错,当我第一次打开应用商店,就可以安装了,好神奇):sudo apt install deepin-graphics-driver-manager安装深度的“显卡驱动器”,切换到因特尔默认驱动,然后重启两次,确认切换成功后,进行下一步。第二步、卸载英伟达开源驱动如果刚刚安装好系统..._linux终端命令安装显卡驱动是闭源的吗