Jenkins自动打包配置uniapp工程执行脚本

背景

  • uniapp配置离线工程时,需要把www打包资源文件拷贝到iOS/Android相应的路径下,才能完成离线工程打包。其中,iOS/Android放置www资源文件路径如下:
    iOS:/Pandora/apps/__UNI__xxxxxxx/
    Android:/app/src/assets/apps/__UNI__xxxxxxx/

  • uniapp配置文件manifest.json
    该配置文件提供了包括平台,版本号,前端入口路径,各种key值等。

打包流程

  • 由于打包的时候,常见的输入参数包括:分支名称(默认为master),版本名称(versionName)和版本号(versionCode)。
    分支名称可以参考文章:shell脚本和jenkins的“Jenkins Branches to build切分支”

  • 针对版本名称和版本号进行比较和替换(见后面脚本)

  • unaipp需要通过cli语言(脚手架语言)改造,才能适合自动化打包。最后打包完之后,生成www资源文件,用于在一个工程的使用(即原生工程打包)。

脚本

rm -rf dist/build

# check versionName/versionCode
versionName="versionName"
versionCode="versionCode"
dir=`pwd`
file=$dir"/src/manifest.json"
echo "file:"$file

newName=$version_name
newCode=$version_code
nameNo=`grep $versionName $file`
echo "versionName: "$nameNo
codeNo=`grep $versionCode $file`
echo "versionCode: "$codeNo

currentName=`echo "${nameNo}" | sed -r "s/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/g"`
echo "currentName:"$currentNamever

currentCode=`echo "${codeNo}" | tr -cd "[0-9]"`
echo "currentCode:"$currentCode

if [ $currentName == $newName ]; then
    echo "get same name"
else
    echo "get different name"
    
    sed -i '' "s/$currentName/$newName/g" $file
fi

if [ $currentCode == $newCode ]; then
    echo "get same code"
else
    echo "get different code"
    
    sed -i '' "s/$currentCode/$newCode/g" $file
fi

#exit 0 #test
#check end

#检查npm库安装
npm install

#编译h5
npm run build-master:h5

cd dist/build/
zip -q -r app-demo-h5.zip h5

cd ../..
#编译APP打包资源
npm run build-master:app-plus

mv dist/build/app-plus dist/build/www

  • 说明:
sed -r "s/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/g"

通过正则表达式获取诸如4.07.20的字符串。
其中.表示以.分割;[0-9]表示匹配数字0到9的任何一个;+表示若干个(可以是1个,也可以是多个)

tr -cd "[0-9]"

通过tr语句获取一个完整且连续的数字序列,比如40720。
这里其实也可以使用上面sed语句来处理。

sed -i '' "s/$currentName/$newName/g" $file

在file文件中使用newName替换currentName字符串。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容