如何实现小程序代码自动上传

angrybird2332022-09-15FrontendCI微信小程序

前言

miniprogram-ci 是从微信开发者工具中抽离的关于小程序/小游戏项目代码的编译模块。

开发者可不打开小程序开发者工具,独立使用 miniprogram-ci 进行小程序代码的上传、预览等操作。

获取小程序代码上传密钥和配置IP白名单

  1. 打开微信公众平台后台-> 开发 -> 开发管理 -> 开发设置 -> 小程序代码上传 -> 小程序代码上传密钥(如果没有,点击重置并下载保存好)
  2. 打开微信公众平台后台-> 开发 -> 开发管理 -> 开发设置 -> 小程序代码上传 -> IP白名单(填写用于打包编译上传小程序代码的服务器的IP地址)

编写上传小程序代码的脚本

  1. 新建ci文件夹并将各个环境的上传密钥保存到ci文件夹下面,ci/private-key/development.key, ci/private-key/test.key, ci/private-key/production.key,

  2. 初始化miniprogram-ci包

npm install miniprogram-ci --save-dev
  1. 编写上传小程序代码的脚本 ci文件夹下面,新建文件setting.json
{
  "version": "v1.0.0",
  "desc": "机器人上传 v1.0.0",
  "setting": {
    "es6": true,
    "es7": true,
    "minify": true,
    "minifyJS": true,
    "minifyWXML": true,
    "minifywXSS": true,
    "autoPrefixWXSS": false,
    "codeProtect": true
  }
}

ci文件夹下面,新建文件 upload.js

const path = require('path')
const ci = require('miniprogram-ci')
const ENV = process.argv[2]
const { appid } = require(`../src/project.config.${ENV}.json`)
const { version, desc, setting } = require('./setting.json')

console.log('appid: ' + appid)
console.log('version: ' + version)
console.log('desc: ' + desc)

const project = new ci.Project({
  appid,
  type: 'miniProgram',
  projectPath: path.join(__dirname, '../dist'),
  privateKeyPath: path.join(__dirname, `./private-key/${ENV}.key`),
  ignores: ['node modules/**/*'],
})

// 上传代码
(async () => {
  try {
    const result = await ci.upload({
      project,
      desc,
      version,
      setting,
      onProgressUpdate: console.log,
    })
    console.log('上传成功', result)
  } catch (error) {
    console.log('上传失败:', error)
  }
})()

修改package.json,增加下面命令

  "scripts": {
    "upload:dev": "node ./ci/upload.js development",
    "upload:uat": "node ./ci/upload.js test",
    "upload:prod": "node ./ci/upload.js production",
  },

配置持续集成和CI脚本

例如coding上的配置如下:

  pipeline {
    agent any
    stages {
      stage('检出') {
        steps {
          checkout([
            $class: 'GitSCM',
            branches: [[name: GIT_BUILD_REF]],
            extensions: [[$class: 'CloneOption', noTags: true, depth: 1, shallow: true]],
            userRemoteConfigs: [[
              url: GIT_REPO_URL,
              credentialsId: CREDENTIALS_ID
            ]]])
          }
        }
        stage('构建') {
          steps {
            echo '构建中...'
            script {
              sh 'node -v'
              sh 'npm -v'
              sh 'npm run cache dir'
              sh 'yarn config set registry "https://registry.npmmirror.com"'
              sh 'npm install'
              sh 'npm run build:dev'
            }

            echo '打包完成.'
          }
        }
        stage('上传') {
          steps {
            echo '上传中...'
            script {
              sh 'yarn upload:dev'
            }

            echo '上传完成.'
          }
        }
      }
    }
最后更新时间 9/18/2024, 8:13:52 AM