基于 GitLab CI 的 小程序自动化部署
小程序发布了 miniprogram-ci 已经一段时间了。
不建议采用通过命令行来触发上传动作, 通过 miniprogram-ci 更为方便
小程序中的 体验版 和 开发板
开发版: 开发者通过 [代码]微信开发者工具[代码] 上传代码的版本。不同开发者上传后,对应着不同的 [代码]开发版[代码],[代码]开发版[代码] 不能直接被访问到。通过 微信开发者工具 上的 [代码]预览[代码] 功能,生成二维码预览(二维码有效时间较短 20~30 min)。
体验版: 在 微信公众平台 后台,指定某个 [代码]开发版[代码] 指定为 [代码]体验版[代码]。[代码]体验版[代码] 长期有效,只能指定一个。
所以如果我们可以将 [代码]体验版[代码] 始终指定某一个开发者 的 [代码]开发版[代码] 上,然后每次通过这个开发者上传小程序代码。这样就只需要访问 [代码]体验版[代码] 即可。
小程序自动部署
常用的 CI/CD 有很多,由于小程序上传代码只能通过 [代码]微信开发者工具[代码]。
而 [代码]微信开发者工具[代码] 只能支持 Windows/Mac 而不支持 Linux,所以最后决定采用 GitLab CI。
因为 [代码]GitLab CI[代码] 中的 GitLab Runner 可以执行 GitLab CI 中的任务。我们使用 [代码]GitLab Runner[代码] 在自己电脑上注册个 Runner 来执行上传小程序代码的任务。
GitLab CI 配置流程
下载 GitLab Runner Install,注册一个 Runner
运行 gitlab-runner register 根据命令提示操作
[代码]# 输入 GitLab 服务地址
Please enter the gitlab-ci coordinator URL (e.g. <https://gitlab.com/>):
https://gitlab.com
# token 在对应项目中的 Setting => CI/CD => Runners 中 如下 图1
Please enter the gitlab-ci token for this runner:
hVGe8TvU5KL-ZQqsv48z
# 输入描述信息
Please enter the gitlab-ci description for this runner:
this is description for the runner
# 注意: 这里输入的 tags 会在后面 .gitlab-ci.yml 配置的时候用到。
Please enter the gitlab-ci tags for this runner (comma separated):
test
# 是否作执行没有指定 tags 的 builds
Whether to run untagged builds [true/false]:
false
# 是将 Runner 锁定至当前项目
Whether to lock the Runner to current project [true/false]:
true
# 注册成功
Registering runner... succeeded runner=hVGe8TvU
# 输入 Runner 执行环境
Please enter the executor: docker, docker-ssh, shell, parallels, ssh, virtualbox, docker+machine, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
[代码]
[图片]
这个时候就注册号好了。我们去到项目的 Setting => CI/CD => Runners 下会发这个 Runner
[图片]
注意: 此时这个 Runner 前面是个 感叹号,我们运行
[代码]gitlab-runner start
[代码]
配置 .gitlab.yml 文件,在项目根目录下创建 .gitlab-ci.yml 文件
[代码]image: node:9 # 制定任务执行时的 docker 镜像
stages: # 定义阶段用于执行任务(定义了 build 和 deploy 两个阶段)
- build
- deploy
build: # 定义 build 任务
stage: build # 该任务属于 build 阶段
script: # 执行下面脚本
- yarn install
- yarn build
artifacts: # 制定任务成功后保存的文件(可以在 GitLab 上下载)
name: $CI_JOB_NAME
untracked: false # 是否添加所有 git untracked 的文件
paths: # 需要添加文件的位置
- dist
tags: # tags 制定运行在哪个 Runner 上
- gitlab-org
deploy: # 定义 deploy 任务
stage: deploy # 该任务属于 deploy 阶段
dependencies: # 该任务依赖 build 阶段的所有任务
- build
variables: # 定义变量
VERSION: 1.0.0
DESCRIPTION: 描述内容
CLI: C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat
script: # 执行下面脚本
# 下面是 小程序 上传代码的脚本,以 Windows 为例
# https://developers.weixin.qq.com/miniprogram/dev/devtools/cli.html#4-%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%8A%E4%BC%A0%E4%BB%A3%E7%A0%81
- %CLI% -u %VERSION%@%cd% --upload-desc %DESCRIPTION%
tags: # 这里需要在我们刚注册的 Runner 运行,和注册时的 tags 匹配
- test
[代码]
注意:小程序上传代码通过开发工具的 命令行调用
GitLab Pipelines
当我们提交将代码 push GitLab 后, 当 GitLab 检测到 [代码].gitlab-ci.yml[代码] 文件后, 会自动触发 Pipeline 任务,如图:
[图片]
我们在 GitLab 上看 这个 Pipeline 下的 Jobs 的运行状态
当 [代码]deploy[代码] Job 成功后,就表示我们自动化的上传代码流程成功。
修改开发者工具源代码。
由于在执行cli的时候,错误并不会抛出。(比如开发者工具没有登录,但是 cli 执行 upload 命令的时候错误没有抛出,导致就pipeline 显示成功)
所以我们需要在修改开发者工具目录下的 cli.bat 文件,添加一行内容
[代码]@echo off
set CALLING_DIR=%CD%
cd /d %~dp0
.\node.exe .\cli.js %*
+ if %errorlevel% neq 0 exit /b %errorlevel%
...
[代码]