QQ小程序 CL构建
小程序 CI 构建
QQ 小程序开发者可以在小程序项目中轻松接入 CI,在 git 操作时触发构建操作(上传小程序版本,设置体验版)。
说明:
-
文档中提供两种 CI 接入方式:GitHub Actions 和 Drone CI
-
小程序官方 Docker 构建镜像:qqminiapp/build:latest
准备工作
获取 appToken
appToken:用于小程序构建过程中的身份验证。
-
打开 qq小程序管理端
-
登录
-
进入设置页面
-
进入开发设置页
-
点击生成 appToken
-
管理员扫码
-
得到 appToken
方式一:使用GitHub Actions
使用 Docker 镜像 + GitHub Actions 实现 QQ 小程序持续集成方案, 适用于 GitHub 的 QQ 小程序项目仓库。
关于GitHub Actions
GitHub Actions 是 GitHub 官方提供的持续集成( CI )服务,于 2018年10月推出,详见 官方文档。
qq小程序CI构建实现
一、 新建项目
GitHub 中新建小程序项目或打开已有小程序项目,可以在下图中看到 Actions 选项。
二、 编辑GitHub Actions的yaml文件
在小程序项目根目录下增加文件 .github/workflows/test.yml
文件
小程序 CI 构建 yml 小例子如下:
name: CI
#写法一:在push事件时触发构建
on: [push]
#写法二:在master分支的push操作时触发构建
#on:
## push:
## branches:
## - master
jobs:
build-qq-ci: #job名称
runs-on: ubuntu-latest #运行环境
steps:
#第一步:获取小程序源码
- name: Checkout
uses: actions/checkout@master
#第二步:上传小程序版本到管理端,并将此版本设置为体验版(设置体验版可选)
- name: Build
uses: docker://qqminiapp/build:latest
env:
PLUGIN_VERSION: 1.0.0
PLUGIN_DESC: CI自动构建上传
PLUGIN_APPTOKEN: ${{ secrets.APPTOKEN }}
PLUGIN_BUILDUSER: ${{ github.actor }}
PLUGIN_EXPERIENCE: true
#PLUGIN_FIRSTPAGE: pages/index/index
#PLUGIN_USEPACKAGEJSON: true
#PLUGIN_NPMBUILD: true
#PLUGIN_SOURCECODEPATH: ./test
说明:
-
env
:需要传入镜像文件的参数。其中PLUGIN_VERSION
、PLUGIN_DESC
、PLUGIN_APPTOKEN
必填,PLUGIN_BUILDUSER
和PLUGIN_EXPERIENCE
选填。 -
PLUGIN_VERSION
:小程序版本号。 -
PLUGIN_DESC
:小程序版本描述。 -
PLUGIN_APPTOKEN
:从小程序管理端获取到的 appToken。此处可直接填 appToken,或者可以使用 secrets 变量secrets.APPTOKEN
。secrets 变量设置方式见下图。 -
PLUGIN_BUILDUSER
:小程序开发版的发布者(小程序管理端->开发管理->开发版本的发布者)。此处使用了 GitHub 提供的 环境变量github.actor
( 构建者 GitHub 账号名 )。 -
PLUGIN_EXPERIENCE
:表示是否把当前版本设置为体验版。true:设置为体验版,false 或不加此参数:只上传开发版本,不会被设置为体验版。 -
PLUGIN_FIRSTPAGE
:填写后,扫小程序二维码会默认打开此页面。 -
PLUGIN_USEPACKAGEJSON
:是否使用项目根目录下的package.json
中的版本号version
和版本描述uploadDesc
。为 true 时,CI 配置中的version
和desc
不需要填写,直接读取 。package.json
中的版本号和版本描述;为 false 或不填,则需要填写 CI 配置中的version
、desc
。 -
PLUGIN_NPMBUILD
:是否进行 npm 构建。true: 需要构建 npm (npm install + 构建 npm);false 或不填:不需要进行 npm 构建 -
PLUGIN_SOURCECODEPATH
:小程序源码相对目录,例如:如果小程序源码不在根目录,在 dist 目录下,如何指定源码目录。方法一:如果项目根目录下存在project.config.json
文件,可 添加配置miniprogramRoot: dist
小程序源码目录参数(相对路径)。方法二:ci 配置文件中增加PLUGIN_SOURCECODEPATH: ./dist
参数指定源码目录,这种方式需要注意 dist 目录下得有project.config.json
文件
三、 执行构建操作
编写好 yml 文件后,执行 git push
操作时,GitHub Actions
就会触发构建操作了。
如下图中,打开 actions
菜单,点击 workflow runs
里面的工作流程,可以看到 GitHub Actions
的详细执行过程。在 build 的执行记录里,可以看到手Q打开体验版url消息。复制 url 地址在 QQ 中点击就可以打开体验版小程序了。
构建完成后,就可以在小程序管理端查看提交的体验版小程序了。
方式二:使用 Drone CI
Drone CI 是一个开源 CI 工具,其原生支持 Docker,结合小程序 CI 构建 Docker 镜像能很方便的实现小程序的持续集成。详见 Drone官方文档。
关于 Drone 的构建环境选择:
-
Drone 官方提供的云构建环境(https://cloud.drone.io/):项目要求是公开的,不支持私有项目
-
开发者自己搭建私有构建环境( Drone CI 服务器 ):需要自己搭建 Drone 服务
使用方式
-
在 GitHub 中新建代码仓库
-
打开 https://cloud.drone.io 或开发者自己部署的 Drone 网站( 部署方式详见 https://docs.drone.io/installation/runners/ ),使用 GitHub 账号登录
-
在登录后的界面中可以看到构建记录
-
在小程序项目根目录编写 .drone.yml 的 CI 配置文件
小程序 CI 构建小例子如下:
# yml小例子 kind: pipeline name: default steps: - name: CI Auto Build image: qqminiapp/build:latest settings: version: 1.0.0 desc: CI自动构建上传 appToken: xxx buildUser: ${DRONE_REPO_OWNER} experience: true #firstPage: pages/logs/logs #usePackageJson: true #npmBuild: true #sourceCodePath: ./test
when: # CI构建触发时机 event: push branch: master
**说明:**
* `image`: 需要在stages中使用qq小程序构建镜像( `qqminiapp/build:latest` )
* `settings`:需要传入镜像文件的参数。其中 appToken 必填;buildUser、experience、firstPage 选填;usePackageJson 选填,当其为 true 时,可不填写 version 和 desc,当其为 false 或不填,则 version 和desc 必填。
* `version`:小程序版本号
* `desc`:小程序版本描述
* `appToken`:QQ 小程序管理端获取的 appToken
* `buildUser`:小程序开发版的发布者(小程序管理端->开发管理->开发版本的发布者)。推荐填写 Drone提供的环境变量。DRONE\_BRANCH:分支名,DRONE\_REPO_OWNER:git账号名。buildUser 选填,不填默认为“CI”,不同的 buildUser,会在开发者管理端生成不同版本。可使用 Drone 提供的 [环境变量](https://docker-runner.docs.drone.io/configuration/environment/variables/)。
* `experience`:表示是否把当前版本设置为体验版。true:设置为体验版,false 或不加此参数:只上传开发版本,不会被设置为体验版。
* `firstPage`:扫描小程序二维码,默认打开的页面。
* `usePackageJson`:是否使用小程序项目根目录下的 `package.json` 中的版本号 version 和版本描述 uploadDesc 。为 true 时,ci 配置文件中的version 和 desc 不生效,直接读取 `package.json` 中的版本号和版本描述;为 false 或不填,则需要填写 CI 配置中的 version、desc
* `npmBuild`:是否进行 npm 构建。true: 需要构建 npm (npm install + 构建 npm);false 或不填:不需要进行 npm 构建
* `sourceCodePath`:小程序源码相对目录,例如:如果小程序源码不在根目录,在 dist 目录下,如何指定源码目录?方法一:如果项目根目录下存在 `project.config.json` 文件,可 添加配置 `miniprogramRoot: dist` 小程序源码目录参数(相对路径)。方法二:ci 配置文件中增加 `sourceCodePath: ./dist` 参数指定源码目录,这种方式需要注意 dist 目录下得有 `project.config.json` 文件。
5\. 进行 `git push` 操作,在 https://cloud.drone.io/ 中可查看构建过程以及小程序访问地址。打开 [qq小程序管理端](https://q.qq.com/),登录后打开开发管理,在开发版本中可以看到 push 后触发的 CI 构建上传的小程序版本。