评论

基于 GitLab CI 的 小程序自动化部署

在 windows 机器上,通过 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%
...
最后一次编辑于  2021-05-28  
点赞 6
收藏
评论

2 个评论

  • Ivy  姚艳梅
    Ivy 姚艳梅
    2019-08-23

    推荐一个好用的开源工具:https://buildkite.com/docs/integrations/github-enterprise可以在github, gitlab上面build CI pipeline, 可以安装mac/windows的agent(agent也可以装在本地),完成自动化测试,还支持hooks

    2019-08-23
    赞同
    回复 1
    • 七、尘1
      七、尘1
      2019-08-26
      额,看着挺不错的样子,有时间研究研究
      2019-08-26
      回复
  • undefined
    undefined
    2019-07-29

    您好,您是本地电脑搭建的 gitlab 么?还是公司服务器搭建的 gtilab,本机配置的 runner,我们现在的需求是团队开发,如何在 Linux 系统上搭建的 gitlab,跑您这套流程呢?

    2019-07-29
    赞同
    回复 6
    • 七、尘1
      七、尘1
      2019-08-08
      GitLab 用的官网的,ci 分两步 build 和 deploy, 代码 build 的时候随便在那台机器上, 但是 deploy 上传代码的时候依赖小程序开发者工具,所以必须在 windows 上或者 mac 上。
      2019-08-08
      回复
    • undefined
      undefined
      2019-08-09回复七、尘1
      我理解的是一但 ci 开始运行,不只能在一台机器上跑么?您那边是俩步都在本机上跑的(本机下载 runner,关联的官网的 gitlab 上)?
      2019-08-09
      回复
    • 七、尘1
      七、尘1
      2019-08-09
      build 用 GitLab 免费提供的 share runner 上执行的, deploy 在自己的 runner 上执行的
      2019-08-09
      回复
    • 金蛋
      金蛋
      2019-12-09回复七、尘1
      share-runner如何gitlab-ci如何配置?
      2019-12-09
      回复
    • 七、尘1
      七、尘1
      2019-12-09
      通过 tags 指定 share-runner 的机器
      2019-12-09
      回复
    查看更多(1)
登录 后发表内容