小程序ci自动打包上传到微信平台

这篇具有很好参考价值的文章主要介绍了小程序ci自动打包上传到微信平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 yarn start  -- index.js配置文件
/*
 * @Date: 2024-01-04 10:58:50
 * @Description: 
 */
const fs = require('fs')
const spawn = require('cross-spawn')
const inquirer = require('inquirer')
const ci = require('miniprogram-ci');
const { getFeiShuDocContent } = require('./feishuNotify')

/** 确认用户的选项 */
function checkList() {
  const promptList = [
    {
      type: 'list',
      message: '请选择操作类型',
      pageSize: 100,
      name: 'action',
      choices: [
        {
          name: '开发',
          value: 'develop',
        },
        {
          name: '打包',
          value: 'build',
        },
      ],
    },
    {
      type: 'list',
      message: '选择环境',
      pageSize: 100,
      name: 'env',
      choices: [
        {
          name: '测试',
          value: 'dev',
        },
        {
          name: '预发布',
          value: 'pre',
        },
        {
          name: '生产',
          value: 'prod',
        },
      ],
    },
    
  ]
  return inquirer.prompt(promptList)
}

const additionalList = [
  {
    type: 'input',
    message: '请输入打包备注:',
    name: 'desc',
  }
]


checkList().then(({ action, env }) => {
  let arr = []
  if (action == 'build') {
    inquirer.prompt(additionalList).then(({desc}) => {
      if(desc) {
        arr = ['run', 'build:weapp', '--', '--mode', `${env}`]
      }else {
        return 
      }
      uploadProject({arr, desc, env})
    })
  } else {
    arr = ['run', 'build:weapp', '--', '--watch', '--mode', `${env}`]
    spawn('npm', arr, {
      stdio: 'inherit',
    })
  }
})


function uploadProject(options) {
  const {arr, desc, env }  = options
  spawn.sync('npm', arr, {
    stdio: 'inherit',
  })
  /** 读取配置文件(如果项目中 公共文件 配置的变量 比如version) */
  const configData = fs.readFileSync('src/core/config/index.ts', 'utf-8')
  const project = new ci.Project({
    appid: appId,
    type: 'miniProgram',
    projectPath: `./dist/weapp`,
    privateKeyPath: `./script/private.appId.key`, //配置了公网IP后,下载密钥文件
    ignores: [],
  })
  /** version版本获取 */
  const match = configData.match(/export const version = '(.+?)'/)
  const version = match && match[1]
  /** 总包 */
  let totalSize = '0KB'
  /** 主包 */
  let mainSize = '0KB'
  let errorMsg = ''
  ci.upload({
    project,
    version: version,
    desc: desc || '',
    threads: 50,
    setting: {
      es6: true,
      es7: true,
      minify: true,
      minifyJS: true,
      minifyWXML: true,
      minifyWXSS: true,
    },
  })
  .then((res) => {
    res.subPackageInfo.forEach((item) => {
      if (item.name === '') {
        mainSize = `${Math.round(item.size / 1024)}KB`
      } else if (item.name === '__FULL__') {
        totalSize = `${Math.round(item.size / 1024)}KB`
      }
    })
  })
  .catch((err) => {
    console.log('上传失败')
    errorMsg = '上传失败'
  })
  .finally((res) => {
    //发送通知 (拓展: 可以绑定飞书文档)
    getFeiShuDocContent({
      desc,
      errorMsg,
      version,
      mainSize,
      totalSize,
      env
    })
  })
}
飞书群机器人通知-配置文件feishuNotify.js

小程序ci自动打包上传到微信平台,小程序,ci/cd,微信

const https = require('https'); 
const { spawn } = require('cross-spawn')

/** 发送飞书通知 */
function sendNotifyFeiShu(option) { 
  const data = JSON.stringify({
      msg_type: 'interactive',
      card: {
        'config': {
          'wide_screen_mode': true,
        },
        'i18n_elements': {
          'zh_cn': [
            {
              'tag': 'markdown',
              'content': `**【小程序】- 打包日志**
版本:${option.version}
操作人:${option.userName}
打包分支:${option.branchName}
主包大小:${option.mainSize}
环境:${option.development}
**更包备注:${option.desc} **
            `,
            },
          ],
        },
      },
    }
)
  /** 发送机器人通知 */ 
   //这个就是飞书群里面的机器人的Webhook 地址
  postRequest({ path: '/open-apis/bot/v2/hook/47e40a4f-fa60-4e4b-b598-da45201b143b', data })
}

/** 获取飞书文档文本内容 */
async function getFeiShuDocContent(options) {
  // 如果需要绑定飞书文档, 需要在飞书开发平台创建企业应用,然后就会有这些数据
  //const data = JSON.stringify({
    //app_id: 'cli_a5197b60c4b0xxxxx',
    //app_secret: 'aNbQHj8OhYyY6KCasFJsIhasatxxxxxx'
  //})
  try {
    /** 当前分支信息 */
    const branchResult = spawn.sync('git', ['rev-parse', '--abbrev-ref', 'HEAD'])
    /** 分支名称 */
    const branchName = branchResult.status === 0 ? branchResult.stdout.toString().trim() : ''
    /** 当前用户信息 */
    const result = spawn.sync('git', ['config', 'user.name'])
    /** 用户名称 */
    const userName = result.status === 0 ? result.stdout.toString().trim() : ''
    /** 当前时间 */
    const time = new Date()
    /** 环境 */
    let development = '正式站'
    if(options.env == 'dev') {
      development = '测试站'
    }else if(options.env == 'pre') {
      development = '预发布'
    }

    /** 发送飞书通知 */
    if(!options.errorMsg) {
      sendNotifyFeiShu({...options, branchName, time, userName, development})
    }
  } catch (error) {
    console.log(error)
  }
}

/** POST请求 */
function postRequest(options) {
  return new Promise((resolve, reject) => {
    const { path, data, headers} = options;
    const req = https.request({
      hostname: 'open.feishu.cn', 
      port: 443,
      path, 
      method: 'POST', 
      headers: { 
        'Content-Type': '"application/json; charset=utf-8"',
        ...headers
      } 
    }, (res) => {
      let responseData = '';
      res.on('data', (chunk) => {
        responseData += chunk;
      });
      res.on('end', () => {
        resolve(JSON.parse(responseData))
      });
    });
    req.on('error', (error) => {
      reject(`${options.path}:${error.message}`)
    });
    req.write(data);
    req.end();
  })
}

/** GET请求 */
function getRequest(options) {
  return new Promise((resolve, reject) => {
    const req = https.request(options.path,
      { method: 'GET', headers: { 'Authorization': `Bearer ${options.token}` } }, (res) => {
        let responseData = '';
        res.on('data', (chunk) => {
          responseData += chunk;
        });
        res.on('end', () => {
          const { data, code } = JSON.parse(responseData)
          if(code == '0') {
            resolve(data)
          }
        });
      });
      req.on('error', (error) => {
        reject(`${options.path}:${error.message}`)
      });
      req.end();
  })
}

module.exports = {
  getFeiShuDocContent
}
项目文件结构

小程序ci自动打包上传到微信平台,小程序,ci/cd,微信文章来源地址https://www.toymoban.com/news/detail-823311.html

到了这里,关于小程序ci自动打包上传到微信平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker 配置 Gitea + Drone 搭建 CI/CD 平台

    本文的IP地址是为了方便理解随便打的,不要乱点 首先使用 docker 搭建 Gitea 服务器,用于管理代码版本,数据库选择mysql Gitea 服务器的 docker-compose.yml 配置文件如下: 运行前先去数据库服务器中新建一个名为 gitea 的数据库 命令: CREATE DATABASE gitea 编写完成后在当前目录下运行

    2024年01月23日
    浏览(32)
  • ESP32连接到oneNET云平台,传数据到微信小程序

    学习物联网的同学们在进行毕业设计时都需要面对一个共同的问题:如何使用传感器获取数据并将其上传至云平台,然后通过微信小程序访问云平台数据。在这个过程中,恰巧在课程设计中接触到了ESP32,发现它内置蓝牙和WiFi模块, 这不是天生的上传云平台圣体吗? 因此,

    2024年04月15日
    浏览(32)
  • 前端自动化部署,Devops,CI/CD

    提到 Jenkins,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps  Development  和  Operations  的组合,是一种方法论,并不特指某种技术或者工具。DevOps 是一种重视  Dev  开发人员和  Ops  运维人员之间沟通、协作的流程。通过自动化的软件交付,使软件的构建

    2024年02月10日
    浏览(47)
  • 【前端自动化部署】,Devops,CI/CD

    提到 Jenkins ,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合,是一种方法论,并不特指某种技术或者工具。 DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。通过自动化的软件交付,使软件的构建,测试,发

    2024年02月10日
    浏览(35)
  • 从0到1搭建属于自己的Gitlab CI/CD平台

    MCNU云原生 ,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握! CI和CD是软件开发中常用的缩写,分别代表持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)。它们是实现高效软件交付流程的关键概念,Gitlab CI/CD是目前市场上应

    2024年02月09日
    浏览(48)
  • uniapp分享微信提示由于不支持的分享类型无法分享到微信,App分享为微信小程序方法,由于不支持的分享类型无法分享到微信,由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信.

    在使用uniapp开发App分享微信,提示 由于不支持的分享类型无法分享到微信 ,就很苦恼,明明已经按照文档,该配置的都配置了,结果兴致勃勃的分享一下,结果提示一个这种错误,记录一下解决方案。 配置关联小程序 登录微信开放平台 https://open.weixin.qq.com/ 点击直达 在 管

    2024年02月09日
    浏览(38)
  • CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集

    日常开发中,每次代码编写完成后,都需要手动打包,并且上传服务器,无论本地打包的时间或者上传文件到服务器都需要花费大量的时间来完成,都是重复的并且毫无意义,应该将时间花费在更有价值的时间上;所以编写这篇文章,将自己收集、搭建、测试的步骤或经验汇

    2024年02月08日
    浏览(38)
  • DevOps:自动化部署和持续集成/持续交付(CI/CD)

    在现代软件开发领域,DevOps(Development和Operations的组合)已经成为一个不可或缺的概念。它代表了一种将软件开发和运维(Operations)紧密结合的方法,旨在提高软件交付速度、质量和可靠性。本文将深入探讨DevOps中的关键概念,特别是自动化部署和持续集成/持续交付(CI/C

    2024年02月07日
    浏览(51)
  • PHP-利用miniprogram-ci工具实现一键上传微信小程序代码

    利用miniprogram-ci工具在后台实现一键上传微信小程序代码,避免了微信开发者工具的繁琐。 我用的是宝塔,可以直接在宝塔上安装Node.js版本管理器 安装在指定文件夹里,这个可以根据项目情况选择。记住路径,后面需要用到。 我用的是ThinkPHP6,安装在了extend扩展文件夹里面

    2024年04月23日
    浏览(29)
  • CI/CD---使用新版云效流水线自动部署Java项目

    两大基本前提: 1、有一个自己的云服务器 2、项目代码已经提交到代码仓库,如gitee,github等 为什么需要流水线 1、除了第一次需要新建流水线,配置脚本外,后续所有的部署只需要提交代码后,点击运行流水线就行 。 2、流水线还可以回滚,此功能太过友好了。 3、当然,

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包