小程序自动化构建-干货

基于 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![二维码](${qrCodeUrl})" +

                        "\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_title
      text 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 = true
  connection.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.text

  manager.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;
}

 

5. 结论

通过 Minigram,我们可以在 CI/CD 流水线中实现小程序的自动化构建,避免手动操作带来的问题,提升开发效率。希望这篇文章能帮助你更好地理解并实践 Minigram 在小程序自动化构建中的应用!

posted @ 2025-03-31 18:06  木易-故事里的人  阅读(52)  评论(0)    收藏  举报