其实标题起的有点大,主要是使用shell中的&和wait这两个命令。
运维大佬不要嘲笑。
无星的前端之旅(四)——小程序持续集成前面介绍了背景,我们有一套代码要发40多个客户的小程序主体。
在Jenkins中加shell去完成上传开发版这个操作。但是需要进行多参数化配置,换句话说就是40多家客户我们要打40多个包,分别上传。
shell的执行方式是,前面执行完了,我们才能执行下一个命令。
因此如果我们打一个包并上传的时间是1分钟,那40家就是40分钟。这谁顶得住啊。
所以需要考虑如何压缩这个打包上传时间,能不能同时打包,同时上传。
原本的shell如下,变量我就写中文代替了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| 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
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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分钟。