真香警告⚠:️这是一篇水文……(弄这个以前觉得挺难,弄好后发现就几个配置,能知足使用了)javascript
平常小程序开发中,测试、产品、后端有时频繁找开发要一个预览二维码,有时候测试找你要灰度环境,后端找你要测试环境的…… 原本好好的一个思路等到给完他们预览码了,结果本身发现:我须要干吗?我刚才是写什么来着?我刚怎么想这个思路的?并且小程序的体验版只能有一个,在多人开发中,那把谁提交的版本设为体验版呢?假如固定一我的提交,那他某天请假了。。。哈哈哈哈,因此利用自动部署,设置一个公共微信帐号提交是颇有必要的html
小声bb: 啰嗦了一大堆。。。那就再啰嗦一下😂java
在某一种机缘巧合下,我准备用gitlab-runner去实现一个自动化部署,在昨天(4月3号)我对这个仍是一窍不通的😆,虽然今天也只会一点,仍是写下来,由于我翻文档翻的好辛苦啊,都是英文😭,中文的这个介绍少的可怜。node
在微信小程序工具的官方文档中,咱们能够看到,开发者能够经过命令行或 HTTP 请求指示工具进行登陆、预览、上传等操做。文档传送门 git
这里演示 http 请求的方式:github
cli
命令工具若是提示服务端口已经关闭,请按照指示打开docker
打开后,咱们来用这个预览命令来验证下是否成功shell
打开谷歌浏览器 (随便啥浏览器啦),在窗口输入(不懂就看下图参数介绍)
:npm
http://127.0.0.1:你的端口号/preview?projectpath=你的项目地址
例如:
# projectpath后面的地址要通过url编码,我这里是/Users/mac/code/lab-runner/dist
http://127.0.0.1:49546/preview?projectpath=%2fUsers%2fmac%2fcode%2flab-runner%2fdist
复制代码
url编码在线工具地址小程序
若是输入连接后能看到二维码出现,那就ok啦
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
复制代码
sudo chmod +x /usr/local/bin/gitlab-runner
复制代码
官网下面还有 注册跑步者(这个跑步者说白了你能够想象成一个runner),安装服务和启动,咱们稍后说
.gitlab-ci.yml
文件这个文件官网是这么说明的 (文档入口)
GitLab
提供持续集成服务。若是将.gitlab-ci.yml
文件添加到存储库的根目录,并将GitLab
项目配置为使用Runner
,则每次提交或推送都会触发CI
管道。该.gitlab-ci.yml
文件告诉GitLab
跑步者该作什么。默认状况下,它运行有三个流水线阶段:build
,test
,和deploy
。你不须要使用全部三个阶段; 没有工做的阶段被忽略了。
看不懂不要紧,你建立一个就行啦
官方文档的:.gitlab-ci.yml 配置方式
别人翻译过的:.gitlab-ci.yml 配置方式
若是官方文档没看懂,不要紧,我来简单介绍下(我也只能简单介绍下 emmm)
# docker镜像
image: alpine:3.7
# 依赖的docker服务
services:
- node:latest
# 开始执行脚本前所需执行脚本
before_script:
- rm -rf ./dist
# 脚本执行完后的钩子,执行所需脚本
after_script:
- echo 'job执行完了'
# 该ci pipeline适合的场景
stages:
- build
- test
- deploy
# 定义的任务1
job1:
# 场景为构建
stage: build
# 所需执行的脚本,就是写一系列执行命令去执行
script:
- node -v
- npm -v
- npm i
- npm run build
# 在哪一个分支上可用
only:
- master
# 指定哪一个ci runner跑该工做
tags:
- docker
复制代码
image
和 services
这两个关键字容许使用一个自定义的
Docker
镜像和一系列的服务,而且能够用于整个job
周期。
before_script
和 after_script
before_script
用来定义全部job以前运行的命令,包括deploy
(部署)jobs
,可是在修复artifacts
以后。它能够是一个数组或者是多行字符串。after_script
用来定义全部job
以后运行的命令。它必须是一个数组或者是多行字符串.
stages
stages
用来定义能够被job
调用的stages
。stages
的规范容许有灵活的多级pipelines
。stages
中的元素顺序决定了对应job
的执行顺序:
- 相同
stage
的job
能够平行执行。- 下一个
stage
的job
会在前一个stage
的job
成功后开始执行。
job
.gitlab-ci.yml
容许指定无限量jobs
。每一个jobs
必须有一个惟一的名字,并且不能是上面提到的关键字。 如上面例子的job1
,名字能够随意起,job
中stage
选定相同场景的job
并行执行,job
的执行顺序根据stage
的定义来决定,例如上面stages
有:build
、test
、deploy
, 会先执行全部build
的job
而后test
最后再deploy
script
script
是Runner
执行的yaml
脚本。例如:
script:
- cd ./dist 进入 dist 文件夹
- npm -v 查看 npm 版本
- npm i 安装项目依赖
- npm run build 执行打包命令
...
复制代码
only
only
很简单,就是给定条件,限定该job
只在某个条件下执行,好比上面,限定只能在master
分支上执行
tags
指定哪一个
ci runner
跑该工做,好比:docker, shell,ssh
说了一大堆,我把我知道的都写上了,再多的。。。我也不知道啦😭,下面给出一个简单的 .gitlab-ci.yml
配置,你能够稍微改下,而后粘贴到本身的项目中
gitlab-ci.yml
配置注意: 这里是使用 shell 的调用方式,若是给定的打包机是mac,那么你得确保你电脑中的node环境和脚手架工具都已经安装好,若是没有安装好,则在script中经过命令作判断而后安装,这里默认都是安装好了
# stages 可写可不写,若是你的脚本很简单的话
stages:
- test
- build
# 定义在dev分支上执行的命令(实现效果:提交代码后,自动打包一个预览二维码)
dev:
stage: test
only:
- dev
script:
- git pull origin dev # 拉取最新代码,若是是在本身本机中,这里能够不用
- cd /Users/mac/code/lab-runner # 进入电脑项目的文件夹中
- cnpm -v # 查看cnpm版本,若是没有,能够执行下安装命令
- cnpm i # 安装项目依赖
- npm run build:weapp # 执行项目的打包命令,wepy是:npm run dev
- cd /Users/mac/Desktop # 进入将二维码要放入的文件夹
- curl -o wxappcodeQr.jpg http://127.0.0.1:58660/preview?projectpath=%2fUsers%2fmac%2fcode%2flab-runner%2fdist # 执行下载命令,端口号要改成你本身的
tags:
- shell
# 定义 master 上要执行的命令(打包后自动上传到微信平台)
master:
stage: build
only:
- master
script:
- git pull origin master # 拉取最新代码,若是是在本身本机中,这里能够不用
- cd /Users/mac/code/lab-runner # 进入项目目录
- cnpm -v
- cnpm i
- npm run build:weapp
- curl http://127.0.0.1:58660/upload?projectpath=%2fUsers%2fmac%2fcode%2flab-runner%2fdist # 上传版本
tags:
- shell
复制代码
将上面的代码传到 gitlab
上,点击右侧的列表,以下图,你会看到已有有一个任务,状态是 pending
状态
接下来,咱们注册成为一个跑步者,而且将gitlab-runner跑起来 官方文档
sudo gitlab-runner register
复制代码
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
复制代码
Please enter the gitlab-ci token for this runner
xxxxxxxxxx
复制代码
Please enter the gitlab-ci description for this runner
[hostame] my-runner
复制代码
Please enter the gitlab-ci tags for this runner (comma separated):
shell # 我这里由于用的shell,因此输入shell
复制代码
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell # 我这里选用的是shell
复制代码
而后若是成功的话,你能够看到成功的一个提示
接下来,咱们给我将Runner安装为服务并启动它:
cd ~
gitlab-runner install
gitlab-runner start
gitlab-runner run
复制代码
评论有指出须要加 ![]()
gitlab-runner run
命令,这里贴图说明做用
若是已经安装过的,先执行
gitlab-runner stop
gitlab-runner uninstall
复制代码
若是一直是 pending
没有变化,那执行下面的命令试试,若是还不行,那从新注册一遍呀,哈哈哈,没有啥是从新注册不行的, 我也是从新注册过好几回,忽然能够了 emmmm
gitlab-runner restart
复制代码
这时候,咱们再去github上看到,刚才的 pending
状态变了, 如今应该是一个 running
状态
若是失败了,能够点stages那里,可以看到失败的日志,自行排错就好了,谁不是经历了 n 次失败以后才成功的呢😭😭😭,我好几页失败呢 emmm
若是你成功啦,推送到dev分支,会直接在桌面给你生成一个预览二维码,最好在script定义命令,把这个二维码给传到gitlab上,成功后让测试本身去拿。
推送到 master
分支成功后,会自动打包上传到微信平台,(记得加版本号和描述。。。。),最好设置一个公共的微信号,无论有多少我的提交代码,体验版的二维码不须要频繁切换
好啦,这篇大水文到这里就结束了,欢迎来喷。。。