基于 minigram 实现小程序自动化构建
1. 引言
在小程序开发过程中,手动构建和发布是一个繁琐且容易出错的流程。为了解决这个问题,我们可以借助 Minigram 这个轻量级的小程序编译工具,实现自动化构建,提高开发效率。
2. Minigram 简介
Minigram 是一个 Node.js 版的小程序编译工具,能够在不依赖微信开发者工具的情况下完成小程序的构建,适用于 CI/CD 场景。
2.1 主要功能
-
代码压缩、混淆
-
依赖解析与构建
-
支持 CI/CD 集成
-
支持 TypeScript、LESS/SASS 等预处理语言
3. 环境准备
在开始自动化构建之前,我们需要准备以下环境:
3.1 安装 Node.js 和 Minigram
确保本地安装了 Node.js,然后全局安装 Minigram:
npm install -g minigram
3.2 初始化小程序项目
如果已有小程序项目,可以跳过此步骤。
npx minigram init my-miniapp
cd my-miniapp
4. 实现小程序自动化构建
4.1 编写构建脚本
date npm install #npm install -g npm@latest #npm install -g miniprogram-ci miniprogram-ci \$action \--project ./project.config.json \--pp ./ \--pkp /opt/private.$appid.key \--appid $appid \--uv $version \--enable-es6 true \--enable-minify true \--compile-condition '{}' \--disable-dev-tools true \--qrcode-format image \--qrcodeOutputDest ./qrcode.jpg \--verbose/data/soft/ossutil-v1.7.19-linux-amd64/ossutil64 cp -f /data/jenkins/workspace/test-xcx-preview/qrcode.jpg oss://xxx-xxx/test-xcx/
import java.util.*; import java.text.SimpleDateFormat;//构建结果 def buildResult = manager. getResult()//构建用户 def buildUser= manager.getEnvVariable("BUILD_USER")//项目名称 def jobName= manager.getEnvVariable("JOB_NAME")//构建结果页面 def buildUrl= manager.getEnvVariable("BUILD_URL")//构建说明 //def buildDes = manager.getEnvVariable("description") def buildDes = manager.getEnvVariable("desc")//构建环境 def buildEnv= manager.getEnvVariable("version")//构建类型 def buildType= manager.getEnvVariable("action")//GIT分支 def gitBranch = manager.getEnvVariable("branch")manager.listener.logger.println("项目名称:"+ jobName) manager.listener.logger.println("构建分支:"+ gitBranch) manager.listener.logger.println("构建环境:"+ buildEnv) manager.listener.logger.println("构建类型:"+ buildType) manager.listener.logger.println("构建用户:"+ buildUser) manager.listener.logger.println("构建结果:"+ buildResult)if(buildResult == "SUCCESS"){//解析蒲公英上传返回数据//ipa下载地址 ipaDownloadUrl = "https://www.pgyer.com/"+ manager.getEnvVariable("buildShortcutUrl")def timestamp = System.currentTimeMillis()def qrCodeUrl = "https://xxx-xxx.oss-cn-zhangjiakou.aliyuncs.com/test-xcx/qrcode.jpg?ts=${timestamp}"//ipa二维码ipaQrCode = manager.getEnvVariable("buildQRCodeURL")//ipa应用程序包ipabuildIdentifier = manager.getEnvVariable("buildIdentifier")//ipa 版本号ipabuildVersion = manager.getEnvVariable("buildVersion")manager.listener.logger.println("ipa下载地址"+ipaDownloadUrl) manager.listener.logger.println("ipa二维码地址:"+ipaQrCode) manager.listener.logger.println("ipa应用程序包名:"+ipabuildIdentifier) manager.listener.logger.println("ipa版本号:"+ipabuildVersion) dingding("小程序打包构建","### [ "+jobName+" ] 构建成功" +"\n\n构建分支:" + gitBranch + "\n\n构建类型:"+ buildType +"\n\n三端类型:" + "小程序" +"\n\n应用版本号:"+ buildEnv +"\n\n二维码图片:\n" +"\n\n构建日期:" + getNowTime() + "构建 " + "\n\n构建用户:"+ buildUser +"\n\n查看详情:[项目地址]("+buildUrl+")")}else if(buildResult == "ABORTED"){dingding("test-xcx","### [ test-xcx ] 构建被终止\n" + " " + getNowTime() + " 终止\n\n[查看详情]("+buildUrl+")")}else{dingding("test-xcx","### [ test-xcx ] 构建失败\n分支:" + gitBranch + "\n\n" + " " + getNowTime() + " 构建\n\n[查看详情]("+buildUrl+")")}//发送钉钉消息 def dingding(p_title,p_text){manager.listener.logger.println("--------------------------"+p_title+p_text)def json= new groovy.json.JsonBuilder()json {msgtype "markdown"markdown {title p_titletext p_text}at {atMobiles([])isAtAll false}}manager.listener.logger.println("发送钉钉数据:"+json)def connection = new URL("https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx").openConnection()connection.setRequestMethod('POST')connection.doOutput = trueconnection.setRequestProperty('Content-Type', 'application/json')def writer = new OutputStreamWriter(connection.outputStream)writer.write(json.toString());writer.flush()writer.close()connection.connect()def respText = connection.content.textmanager.listener.logger.println("钉钉返回结果:"+respText ) }//获取当前时间 def getNowTime(){def str = "";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar lastDate = Calendar.getInstance();str = sdf.format(lastDate.getTime());return str; }