Jenkins-React Native for Windows-发布配置
一、打包环境前置工作
1、搭建Windows版的Jenkins
2、Jenkins安装PowerShell插件
3、node版本 v14.11.0 yarn版本 v1.22.10 npm版本 6.14.8
4、安装Visual Studio 2019编译工具,并选择如下图片勾选的安装包
5、windows 10 SDK版本选择10.0.18362.0
此部分,在安装完成Visual Studio时,回弹出一个编辑的窗口。安装完重新执行exe也会提示。按如下图片操作
6、因为我们是传到阿里云的OSS上,需要安装下上传至OSS的工具。
参照:https://helpcdn.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.6.838.43a17a74BW0deN
二、Jenkins配置
1、新建一个Freestyle project项目
2、配置Git参数构造 --此处需要安装插件 Git Parameter
3、配置Git工程的AppName和GroupName
4、配置拉取git的信息
5、最后就是下面的PowerShell脚本了
三、开始打包命令
Jenkins配置拉取代码这块我就不讲了
echo "********初始化react-native-windows********"
npx react-native-windows-init --overwrite
echo "********生成打包文件********"
yarn install
yarn windows --release --logging
echo "将Assets 和 Bundle文件copy到需打包的目录中 --默认上面打包完之后没有这些文件"
xcopy C:\workspaces\retail-shop-client\windows\shopclient\Assets C:\workspaces\retail-shop-client\windows\Release\shopclient\Assets\ /e /i /y
xcopy C:\workspaces\retail-shop-client\windows\shopclient\Bundle C:\workspaces\retail-shop-client\windows\Release\shopclient\Bundle\ /e /i /y
echo "使用命令打包msix文件"
cd "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64"
.\makeappx.exe pack /h SHA256 /d "C:\workspaces\retail-shop-client\windows\Release\shopclient" /p "C:\workspaces\retail-shop-client\windows\Release\shopClient.msix"
echo "创建签名 -- 不用每次都生成,除非CN=Administrator有变动(此内容在需要打包目录的AppxManifest.xml文件中也会有一个CN=,参照这个即可 --建议这个操作手动操作,不用写到脚本中因为后面的导出签名操作,我还没解决怎么获取到创建的签名值"
#New-SelfSignedCertificate -Type Custom -Subject "CN=Administrator" -KeyUsage DigitalSignature -FriendlyName "xiniu" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
echo "导出签名 -- 签名不变,也不需要重复操作 --建议手动操作"
#定义密码:
#$password = ConvertTo-SecureString -String xiniu -Force -AsPlainText
#导出签名文件 --建议手动操作:
#Export-PfxCertificate -cert "Cert:\CurrentUser\My\DC1CB1D548C8C339F7C1C16BCAFC4CBE7CE7FB5B" -FilePath C:\workspaces\retail-shop-client\windows\shopClient.pfx -Password $password
echo "对msix包进行签名 --将上面手动操作导出的签名文件pfx路径指定下即可"
#.\signtool.exe sign /fd SHA256 /a /f C:\workspaces\retail-shop-client\windows\shopClient.pfx /p xiniu C:\workspaces\retail-shop-client\windows\shopClient.msix
echo "将签名打包好的运行文件和证书上传至OSS --先安装OSS工具"
#下载网页的OSS buncket路径(根据实际需要调整)
echo "********下载网页的OSS buncket路径(根据实际需要调整)********"
SET oss_bucket_url="https://xn-static.oss-cn-hangzhou.aliyuncs.com"
#阿里云OSS的EndPoint,用于上传(根据实际需要调整)
echo "********阿里云OSS的EndPoint,用于上传********"
SET oss_end_point="https://oss-cn-hangzhou.aliyuncs.com"
#阿里云OSS的accessKey(根据实际需要调整)
echo "********阿里云OSS的accessKey(根据实际需要调整)********"
SET oss_access_key="根据自己的填写"
#阿里云OSS上传buncket的oss相对路径(根据实际需要调整)
echo "********阿里云OSS上传buncket的oss相对路径(根据实际需要调整)********"
SET oss_bucket_dir="oss://根据自己的填写"
#阿里云OSS的accessKeySecret(根据实际需要调整)
echo "阿里云OSS的accessKeySecret(根据实际需要调整)********"
SET oss_access_key_secret="根据自己的填写"
#Json文件在OSS buncket下的存储路径(根据实际需要调整)
echo "********文件在OSS buncket下的存储路径(根据实际需要调整)********"
SET upload_oss_folder=%AppName%
#用于OSS上传的本地安装的ossutil命令文件(在不同机器上需要调整)
echo "********用于OSS上传的本地安装的ossutil命令文件(在不同机器上需要调整)********"
SET oss_util_batch="C:\software\ossutil64\ossutil64.exe"
#SS URL
SET oss_upload_upload_dir=%oss_bucket_dir%%upload_oss_folder%
#appurl
SET app_update_file="C:\workspaces\retail-shop-client\windows\app"
#配置ossutile连接
echo "********配置ossutile连接********"
C:\software\ossutil64\ossutil64.exe config -e oss-cn-hangzhou.aliyuncs.com -i 根据自己的填写 -k 根据自己的填写
#上传OSS
echo "********上传********"
C:\software\ossutil64\ossutil64.exe cp C:\workspaces\retail-shop-client\windows\app -rf oss://根据自己的填写/shop-client/
echo "********所有操作执行成功********"
四、搭建的一些问题排查
1、官网文档:https://docs.microsoft.com/zh-cn/windows/msix/package/manual-packaging-root
2、最后签名.\signtool.exe命令执行的时候提示,An unexpected internal error has occurred
官网文档解释:https://docs.microsoft.com/zh-cn/windows/msix/package/signing-known-issues
官方提供的排查文档:https://docs.microsoft.com/zh-cn/windows/msix/desktop/desktop-to-uwp-known-issues
最终的解决方法:
appxmanifest.xml文档中,Publisher="CN=xiniu"只填这一项
签名时,New-SelfSignedCertificate -Type Custom -Subject “CN=xiniu” -KeyUsage DigitalSignature -FriendlyName “xiniunet” -CertStoreLocation “Cert:\CurrentUser\My” -TextExtension @(“2.5.29.37={text}1.3.6.1.5.5.7.3.3”, “2.5.29.19={text}”)
3、解决PowerShell无法执行yarn命令 --应该要重启下
参照文档:https://blog.csdn.net/qq_45062261/article/details/100132489
4、虚拟机磁盘扩容 for windows --实际是因为这个打包很费空间给了50G不够依赖都有5G以上建议100G以上,所以后来扩容了
参照:https://www.diskgenius.cn/download.php
5、Jenkins默认工作目录更改 --这个问题是,实际当时手动执行打包命令提示找不到路径,因为默认安装windows版的Jenkins是有一个.jenkins的目录,可能无法识别,后来更改了目录到c:\workspaces中
参照:https://www.freesion.com/article/55011185461/
6、PowerShell报错,继续执行 --这点很重要,因为我们在执行yarn windows --release --logging的时候,第一次是会自动安装我们运行 的程序,第二次的时候会提示错误,因为其实我们jenkins打包不需安装的,所以需要跳过检测到的报错