5

UWA Pipeline小技巧|正则表达式的运用

 1 year ago
source link: https://blog.uwa4d.com/archives/UWA_PipelineV2-10.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

几乎所有游戏研发项目组都希望将打包、上传、检测等需重复操作的工作交给自动化流水线进行处理,当执行这类自动化任务时,如果出现项目更改、Unity版本差异、出包变动等情况,项目组就需要重新配置相关参数,才能确保流水线正常运行。

如果可以不频繁改动参数,而用相同配置让任务灵活地适应不同情况,流水线运行的效率将会大幅提高,真正做到无需干预、自动运行。正则表达式就能起到这样的作用,它是一种在字符串操作中非常常见的处理模式,可以通过部分关键字或特定样式规格,快速筛选出符合要求的结果。

UWA Pipeline在部分功能的配置上已经支持正则表达式,可以实现对一类不同参数的适配。接下来我们就举例几种应用场景,供大家在UWA Pipeline内配置参数时参考。

一、上传至包管理——apk/ipa包路径

很多团队会根据包体的类型(比如Mono/IL2CPP)、迭代的版本号(比如v3.2.010)、或者时间日期(比如20230101),在出包时为安装包进行命名,把相应的标志性字符串作为名称的一部分,方便区分和管理。

通过“上传至包管理”步骤,将安装包自动上传,可以方便大家进行自动安装和测试。但由于上传功能,需要填写安装包的绝对路径,具体到“.apk/.aab/.ipa”文件,而每次出包时安装包的命名都有变化,所以相关的配置也得跟着修改才能确保流水线的正常运行。

1.png

这种情况下,在apk/ipa包路径的配置上使用正则表达式,就可以实现对某些关键字或特定格式的匹配,不再需要人工频繁修改,让流水线任务的执行实现真正的“自动化”。

1. 关键字的匹配
举例来说,项目出包的命名会固定带有“IL2CPP”这个关键字,前后可能会有其他不确定的字母和数字,比如“C:\Users\vip\Downloads\test\packIL2CPPempty.apk”。

UWA Pipeline在路径配置上支持“路径+正则”的形式,所以我们在填写apk包路径时,可以写成:
C:\Users\vip\Downloads\test\^[a-z0-9A-Z]*I{1}L{1}2{1}C{1}P{1}P{1}[a-z0-9A-Z]*\.apk$

Pipeline会以开始符“^”和结束符“$”作为对正则表达式内容的识别:非正则部分依旧使用路径字符串进行比对;正则部分则使用正则表达式的语法进行匹配。

2.png

因此我们可以把原有路径写为:
C:\Users\vip\Downloads\test^.*IL2CPP.*\.apk$

3.png

2. 特定格式的匹配
举例来说,我们在项目出包时的命名中,加入了当天日期以作区分。
比如“C:\Users\vip\Downloads\test\pack20230101empty.apk”,安装包命名的特征是“xxxx xx xx”样式的日期格式。

此时“路径+正则表达式”可以写作:C:\Users\vip\Downloads\test^.*\d{4}\d{1,2}\d{1,2}.*\.apk$

4.png

这里要注意“\d{n}”的使用,这个组合实现了对一串长度为n的未知数字的匹配,可以灵活匹配日期、版本号等固定的数字格式。


二、正则表达式的其余应用场合

除了“上传至包管理”步骤外,UWA Pipeline内还有很多功能在相关的配置上可以使用正则表达式,用“关键字”和“特定格式”的匹配,来适应大部分参数内容上的变动,降低人力修改的投入。主要应用场景有:

1.“真人真机测试”步骤中的安装包路径配置。

5.png

2.“本地资源检测”步骤中,UnityPath和projectPath的路径配置。

6.png

这里需要提醒大家的是:配置UnityPath时,路径要精确到Unity.exe;配置projectPath时,要精确到项目工程所在的目录,而不是其下某个具体的资源文件夹。

3.“AssetBundle检测”步骤中,扫描目录的路径配置。

7.png

和其他路径配置不同的是,“AssetBundle检测”扫描路径的配置可以不拘于项目工程目录一级,而可以指定到所需的任意文件夹。

4.“Build Report”步骤中的UnityPath、Unity工程路径、Android包体路径、iOS包体路径设定。

8.png

注意点基本同上:“UnityPath”要精确到Unity.exe;“Unity工程路径”要精确到项目工程所在目录;“Android包体路径”要精确到.apk;“iOS包体路径”要精确到.ipa。


三、本地资源检测Setting界面中路径的配置

在最近的本地资源检测3.1.0版本更新中,已经支持了正则表达式(详细可见《本地资源检测|单规则多阈值设置功能上线》),大家可以在指定规则下,对一类具有相同命名特征的文件夹或资源进行扫描。

9.png

在配置时,您可以选择使用路径字符串进行比对,或者使用正则表达式进行匹配。

1.Unity本地资源检测中,资源的路径都用“Assets”开头的相对路径进行表示,路径的匹配功能也对这个相对路径进行匹配。

2.为了和转义符号做区分,所有的路径分隔符,使用“/”。若要在正则表达式中对分隔符进行匹配,应当使用“ [/] ”。

3.如果使用正则表达式进行匹配,正则表达式匹配的策略是“部分匹配”,即只要资源的一部分路径被正则表达式匹配成功,该资源就被认为匹配成功,会列入要检测的资源清单。如果要对资源的路径做完整的匹配,可以使用符号“^”和“$”来表示路径的开始和结束。

本地资源检测中正则表达式主要的使用情况有以下两种:

1. 匹配具有某一类命名特征的文件夹
举例来讲,假如我们想扫描多个命名中带有“Texture”的文件夹下的资源,那么通过“.”、“*”等的组合使用,正则表达式可以写成:Assets[/].*Texture.*[/],从而划定规则的检测范围。

10.png

这里需要注意的是,项目中可能会存在带有“Texture”命名的具体资源,比如Assets\ABC001\Texture002.jpg。如果大家的正则表达式写得不严谨,那么这些本不在扫描范围内的资源很有可能也出现在扫描结果中。

11.png

所以我们要注意排除这些“同名”资源的干扰。这里有个比较简单的原则:文件夹的右侧一定会有斜杠;资源的右侧一定没有斜杠。

因为最终的扫描结果是资源,形式上一定是“Assets/文件夹1层/文件夹2层/文件夹N层/资源.格式”,所以当我们希望匹配的是文件夹时,在正则表达式的最后加上固定的“[/]”,如此就不会被“同名”资源干扰。

2. 匹配具有某一类命名特征的资源文件
举例来讲,假如我们想要扫描项目纹理资源中,命名带有“001”的一类纹理,结合我们之前的理解,正则表达式可以写成:Assets[/].*001[^/]*\.jpg

12.png

同样的,我们在写正则表达式的时候,要注意那些“同名”文件夹对检测结果的干扰。

13.png

基于“文件夹的右侧一定会有斜杠;资源的右侧一定没有斜杠”,我们要确保正则表达式筛选出的结果里排除“斜杠”的存在。所以我们可以写成“[^/]*”。

14.png

正则表达式在UWA Pipeline及各个产品中的使用,看似并不亮眼,但只要能合理运用,大家就能避免大量繁琐的设置和修改操作,减少对流水线任务的中断与干扰,让“自动化”的执行效率更上一层楼。

UWA Pipeline内还有很多类似的使用小技巧,可以起到很多意想不到的作用。今后我们也会给出更多的参考,也欢迎大家积极分享。

想要实际体验UWA Pipeline?请点击《免费试用 |UWA性能保障体系全体验》,15天Pipeline全服务试用就在眼前!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK