其实标题起的有点大,主要是使用shell中的&和wait这两个命令。
运维大佬不要嘲笑。
无星的前端之旅(四)——小程序持续集成前面介绍了背景,我们有一套代码要发40多个客户的小程序主体。
在Jenkins中加shell去完成上传开发版这个操作。但是需要进行多参数化配置,换句话说就是40多家客户我们要打40多个包,分别上传。
shell的执行方式是,前面执行完了,我们才能执行下一个命令。
因此如果我们打一个包并上传的时间是1分钟,那40家就是40分钟。这谁顶得住啊。
所以需要考虑如何压缩这个打包上传时间,能不能同时打包,同时上传。
原本的shell如下,变量我就写中文代替了
function npminstall(){
echo "拉依赖"
cd 代码文件夹下
npm install
}
function buildwx(){
echo "执行构建"
# echo '环境:'$1
# echo '文件名:'$2
# echo '客户名:'$3
npx cross-env 环境=$1 文件名=$2 客户名=$3 node build/build.js wx
}
function upload(){
echo "执行上传"
# echo '文件名:'$1
# echo 'appid:'$2
# echo 'version:'$3
npx miniprogram-ci upload --pp ./dist/${1}/wx --pkp ./privatekey/private.${2}.key --appid ${2} --uv ${3} -r 1 --enable-es6 true
}
#------------------待构建配置------------------
configs=(
"xxx客户;xxx环境;xxx文件名;xxxxappid"
"xxx客户;xxx环境;xxx文件名;xxxxappid"
)
##读取version变量
version=‘xxx文件读取’
#------------------执行批量构建------------------
npminstall
for xxx in ${configs[@]};do
客户名=`echo ${xxx} | awk -F ";" '{print $1}'`
环境=`echo ${xxx} | awk -F ";" '{print $2}'`
文件名=`echo ${xxx} | awk -F ";" '{print $3}'`
appid=`echo ${xxx} | awk -F ";" '{print $4}'`
buildwx ${环境} ${文件名} ${客户名}
upload ${文件名} ${appid} ${version}
echo "$客户名 上传完毕"
done
就是一个简单的for循环,根据配置信息批量打包。40多家就是40分钟。
&:可以将命令转到后台执行,不阻塞。
wait:可以等待前面命令全部执行完毕,避免终端提前退出。
因此我们改造一下批量构建的shell
npminstall
for xxx in ${configs[@]};do {
客户名=`echo ${xxx} | awk -F ";" '{print $1}'`
环境=`echo ${xxx} | awk -F ";" '{print $2}'`
文件名=`echo ${xxx} | awk -F ";" '{print $3}'`
appid=`echo ${xxx} | awk -F ";" '{print $4}'`
buildwx ${环境} ${文件名} ${客户名}
upload ${文件名} ${appid} ${version}
echo "$客户名 上传完毕"
} &
done
wait
echo "全部完成"
就这样,将Jenkins的整个时间,从40分钟,降到了3分钟。
网友评论