Skip to content

使用Zadig实现小程序自动发布 原创

痛点

自动化已经常态化,99%的公司或多或少都实现了部分自动化功能,比如应用的打包部署、服务器的批量维护、自动化测试等。

在实际工作中,我基本完成了前端、后端、移动端的自动化,但是一直没有涉及到小程序,主要原因在于:

  • 小程序的开发受限平台的开发工具
  • 在开发小程序过程中,编译以及部署,都是开发通过可视化开发工具实现
  • 小程序应用比较少,容易忽略

这就导致在开发小程序过程中,构建发布程序到生产或测试环境的时候,都是开发人员手动操作,发布不同的环境可能需要切换不同的分支,这样不仅增加了重复性工作,也大大增加了出错的概率。

鉴于此,我们决定将小程序实现自动化,减少开发的工作量,提升工作效率。

工具介绍

要实现小程序的自动发布并不难,我们可以借助miniprogram-ci工具实现,在改工具之前,大佬们大都是自己开发各种自动化脚本,现在我们就不用那么麻烦了。

miniprogram-ci是从微信开发工具中抽离的关于小程序/小游戏项目代码的编译模块,开发者可以不使用一些开发者工具,独立使用它就可以完成小程序代码的上传、预览等操作。其主要提供以下功能:

  1. 上传代码,对应小程序开发者工具的上传
  2. 预览代码,对应小程序开发者工具的预览
  3. 构建 npm,对应小程序开发者工具的: 菜单 - 工具 - 构建 npm
  4. 上传云开发云函数代码,对应小程序开发者工具的上传云函数能力
  5. 上传云托管代码,对应小程序开发者工具的上传云托管能力
  6. 上传云存储/静态托管文件,对应小程序开发者工具 - 云开发 - 云存储和静态托管文件管理
  7. 代理,配置 miniprogram-ci 的网络请求代理方式
  8. 支持获取最近上传版本的 sourceMap
  9. 支持 node 脚本调用方式和 命令行 调用方式

前置工作

申请 APP ID

APP ID 是在微信后台申请,开发一般会提供。

制作构建镜像

要使用miniprogram-ci,需要我们安装该模块,安装命令如下:

bash

npm install miniprogram-ci --save

为此,我们准备好具有miniprogram-ci命令的镜像。

dockerfile

FROM node:14.20.0-buster-slim

RUN apt update && \

    apt install curl  git -y && \

    npm install -g miniprogram-ci --registry=https://registry.npmmirror.com

然后制作镜像并推送到镜像仓库。

bash

$docker build -t registry.cn-hangzhou.aliyuncs.com/coolops/node:14.20.0-buster-slim .

$docker push registry.cn-hangzhou.aliyuncs.com/coolops/node:14.20.0-buster-slim

PS:根据实际情况选择 node 版本。

Zadig 配置

前置条件

  • 拥有可用的 Zadig 服务
  • 已经关联好代码仓库

开始配置

1、添加构建镜像

在 Zadig 的系统配置 ->构建镜像管理处添加上面制作出来的构建镜像,如下:

d2744fb42050da9be9624c8cea0e4ee4 MD5

2、创建项目

在 Zadig 中,选择 项目 -> 新建项目,添加一个小程序专属的项目,如下:

3c03b707ec1f88172afbd45229059c05 MD5

然后跳过向导,我们不需要环境,如下:

35936a91f73a5117de185063fd39dddf MD5

3、添加服务

添加服务的方式根据自己的情况来,不论是 YAML 项目还是 Helm Chart 项目,实际中我们都不会使用这些方式进行部署,随意选择就好,比如我这里选择的是 Helm Chart 项目。

f223ab52d13bb8bb90c38da1f1ed1e82 MD5

之所以配置 Helm values,是为了让服务组件显示正常。

4、添加构建脚本

首先选择构建环境以及代码信息,如下:

7fb0975886493f00af3aad6f73b7b4a5 MD5

我们选择的是自定义的构建镜像。

然后添加一个构建变量,改变量的作用是设定推送机器人编号,我定义为 ROBOT_NUM,如下:

cfaf0b85cc76c4b97cf576d8fac4ccb8 MD5

我选择的是枚举类型,定义了三个机器人代码(机器人可选 1 ~ 30),如下:

3255cbb3adce81382b8924ec90313cc6 MD5

最后,我们编写构建脚本,如下:

shell

#!/bin/bash

set -e



cd ${SERVICE}



npm config set cache ${WORKSPACE}



npm install --registry=https://registry.npmmirror.com  && npm run build:weapp




APP_VERSION=$(grep -w 'version' dist/project.config.json | awk -F: '{print $2}' | grep -oP "[0-9].[0-9].[0-9]")

APP_DESC=$(grep -w 'description' dist/project.config.json | awk -F: '{print $2}'| sed 's/"//g' | sed 's/,//g')

WECHAT_APP_ID="xxxxx"



eval BRANCH=\${${REPO_0}_BRANCH}



echo "========================="

echo "version: ${APP_VERSION}"

echo "desc: ${APP_DESC}"

echo "branch: ${BRANCH}"

echo "robot: ${ROBOT_NUM}"

echo "========================="




# 推送

miniprogram-ci \

  upload \

  --pp ./dist \

  --pkp ./secret/private.${WECHAT_APP_ID}.key \

  --appid ${WECHAT_APP_ID} \

  -r ${ROBOT_NUM} \

  --enable-es6 true \

  --ud 发布分支:"${BRANCH}"发布描述:"${APP_DESC}" \

  --uv ${APP_VERSION}

注意:

  • 我们是将小程序版本以及描述信息放在了 project.config.json 文件中,每个企业用法可能不一样。
  • 我将小程序的密钥放在代码仓库的 secret 文件夹下

然后保存构建退出。

5、添加工作流

现在,我们添加工作流进行应用发布,我这里选择的是自定义工作流,如下:

4b638091321c0d69480cc80695816d9e MD5

新增阶段,如下:

2204be48f5b13ae41cfac774b77d2126 MD5

然后新增任务,选择构建,如下:

c095d37d9e5810745d74877e2c675c43 MD5

选择对应的服务组件,如下:

f3eae717ce8f1984fecc69664af65258 MD5

固定 ROBOT_NUM 参数(我们约定测试环境用机器人 1,生产环境用机器人 6),如下:

489e261e4aacf3a78d23a2774200f509 MD5

配置默认分支,测试环境用 test 分支,如下:

a0a86ee18447f25784992a51ac45945a MD5

最后,配置触发器,实现开发将代码推送到对应分支,则自动触发流水线进行发布,如下:

31523471c8755607a95b23ae1cd02870 MD5

然后保存退出即完成配置。

6、测试

配置完成后,需要测试工作流是否正常。

首先进行手动测试。在工作流对应的服务并执行,如下:

bc3d846b8fb419bef1e72eae86518b2d MD5

带流水线运行成功表示配置正常,如下:

992e5cda164a9ea39bb806f0f7dfd708 MD5

再次进行 webhook 测试,我们需要在代码仓库更改代码并推送。

我在测试分支添加一个文件并推送,如下:

b8a7c090b33fd96da42bef498e62ad87 MD5

然后在 Zadig 上发现流水线正常被触发,如下:

5ea295e4139b81a7570c39fc5a85499b MD5

到此我们完成了小程序测试环境的自动化,其他应用和环境相识操作即可。

总结

单纯想实现小程序自动化并不难,只要适配到企业本身的架构、使用哪种方式都可以,我们之所以选择 Zadig,主要还是其操作简单、使用便捷以及开发测试人员使用成本比较低的原因。

目前我们已经将所有的发布工作都迁移到 Zadig 上了。

不过在使用自定义工作流配置小程序自动发布过程中,还是需要一些优化:

  • 需要 IM 通知,在应用发布成功后可以及时告知对应的人员
  • 执行工作流的时候,默认是勾选了所有应用,当应用很多且不需要发布所有的时候,需要挨个去取消(个人觉得手动勾选比手动取消更容易接收)

整体使用上面没有太大的问题,小伙伴们在测试小程序自动发布的时候和我的可能有所区别,根据实际情况来做调整即可。

最近更新