小程序:自动化部署方案

小程序集成CI/CD可以让我们在发布流程,版本控制上得到更好的体验。

主要有以下几点优势:

  1. 小程序的发布版本必定和gitlab的代码版本保持一致
  2. 解决多人开发时需要频繁切换体验版,提升发布效率
  3. 解决上线前提审版本后需要切回体验版的问题
  4. 根据约定的小程序版本命名规范,可以追踪到具体的代码版本

集成CI/CD思路

  1. 打包小程序
  2. 借助小程序官方提供的 miniprogram-ci 中的脚本调用方式,结合gitlab ci执行对应的发布脚本。
    a. 执行脚本时需要传版本参数、指定发布机器人、描述说明(这里我们将commit message作为描述)

在这里插入图片描述

集成后的开发&发布模式

  1. 发布alpha版本:代码提交到test分支自动发布(commit message作为发布的描述说明),默认此分支设置的机器人就是体验版本,多次发布无需切换体验版。
  2. 发布beta版本:将test代码合并到preview分支,自动打包提交,此分支设置的机器人就是beta版本,需要在微信公众平台提交审核,审核通过后,管理员看到是beta版本,进行灰度发布。
  3. 发布正式版本:将test/preview 代码合并到master分支,自动打包提交,此分支设置的机器人就是正式版本,需要在微信公众平台提交审核,审核通过后,管理员看到是线上版本,进行全量发布。
    开发时,无需在微信开发者工具中上传代码。
    微信公众平台中的版本管理中只能看到机器人发布的版本,不再有个人提交的版本。
    在这里插入图片描述

集成步骤

1、安装miniprogram-ci

npm i miniprogram-ci -D

2、准备ci.js 发布脚本文件

const ci = require('miniprogram-ci')

// gitlab-runner执行脚本时,传进来的参数
var params = process.argv.splice(2)
var version = params[0]
var robot = parseInt(params[1])
var desc = params.splice(2).join(' ')

// appid 和privateKeyPath需要设置下
const project = new ci.Project({
    
    
  appid: '',
  type: 'miniProgram',
  projectPath: './',
  privateKeyPath: './ci-private.key',
  ignores: ['node_modules/**/*', 'src/**/*']
})

/** 上传 */
async function upload({
    
     version = '0.0.0', desc = 'test', robot = 1 }) {
    
    
  await ci.upload({
    
    
    project,
    version,
    desc,
    setting: {
    
    
      es7: true,
      minify: true,
      autoPrefixWXSS: true
    },
    robot,
    onProgressUpdate: console.log
  })
}

upload({
    
     version, desc, robot })

更多发布设置可参考官方文档

3、密钥文件

具体位置是在小程序管理平台中的,开发->开发设置->小程序代码上传->小程序代码上传密钥。
将生成的密钥文件放在项目的根目录下,如图:
注:密钥文件只有小程序的管理员有权限生成。
在这里插入图片描述

4、ip白名单

这里添加 ip 白名单,指定的 ip 才能执行上传脚本。
在这里插入图片描述

5、.gitlab-ci.yml 发布文件

我们约定test分支作为发布体验版的分支,preview分支作为发布beta版本的分支,master分支作为发布正式版本的分支。beta版本和正式版本对应的都是线上环境,alpha版本对应的是测试环境,因此打包命令有所区分,分别是npm run build 和 npm run build:test,打包命令需要在package.json中支持。
在gitlab-runner中执行发布脚本,并传入所需的参数。
注:每次开发新版本,需要手动修改版本号。

# test、preview和master分支默认支持线上部署

stages:
  - build
  - deploy

# 小程序版本设置,每次开发新版本需要手动更新
variables:
  PROJECT_VERSION: 1.0.0

# 安装依赖&&构建打包
build test:
  stage: build
  only:
    - test
  tags:
    - f2e
  script:
    - cnpm i
    - npm run build:test
    - node ci.js $PROJECT_VERSION.$CI_COMMIT_SHORT_SHA.alpha 1 $(git log -1 --pretty=%B)

build preview:
  stage: build
  only:
    - preview
  tags:
    - f2e
  script:
    - cnpm i
    - npm run build
    - node ci.js $PROJECT_VERSION.beta 2 $(git log -1 --pretty=%B)

build prd:
  stage: build
  only:
    - master
  tags:
    - f2e
  script:
    - cnpm i
    - npm run build
    - node ci.js $PROJECT_VERSION 3 $(git log -1 --pretty=%B)

package.json

{
    
    
	...
  "scripts": {
    
    
    ...
    "build": "cross-env NODE_ENV=production ./node_modules/.bin/wepy build --no-cache",
    "build:test": "cross-env NODE_ENV=test ./node_modules/.bin/wepy build --no-cache",
		...
  },
  ...
}

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/113448724