最搬家收拾东西的是发现比起去年, 我的拥有的东西翻了个倍. 原来4个大箱子就打包完了, 现在8个才刚够. 我之前文章中提到我做了一个物品管理系统, 但是由于搬家的时候比较忙, 大部分的东西都没有统计进去.
正好马上到了五一, 想乘此机会把东西统计出来.
目前这个系统还在开发当中, 所以部署都是在自己的PC上面的, 使用的时候必须在 PC 启动然后 nginx 做 https 协议的反向代理, 手机浏览器才能正常的拍摄照片录入. 非常的麻烦, 所以借此机会想和内网的服务一起做一个整合.
以前我的内网是有一个 gitlab 的, 但是由于太臃肿了, 再加上github 现在免费的无限量私有库, 非常的香. 就去掉了. CI/CD
工具开源的也没啥可以选的, 就老牌的 Jenkins
和新兴的 Drone
这俩可选的, 以前公司用的就是 jenkins 总觉得太丑了,配置太麻烦了. 所以选了 Drone 来作死
准备
- 搭建好的 K8s 集群 * 1
- Helm 3 * 1
- 镜像仓库 我用的是自建的 harbor, 你可以选择 阿里云, dockerhub 之类的
安装
下面是 github 作为代码仓库的安装方式, 如果需要其他的代码源请参考 Drone Doc
参考 drone chart 使用 helm 来安装, 主要修改以下内容
Ingress 配置
SourceControl
这部分按照, 官方教程 或者我的步骤来做
在github登录的状态下点击这里, 创建 Github OAuth Apps
按照提示填写, 其中的
HomePage URL
是你的 drone 的地址(必须是公网)Authorization callback URL
是 drone 登录成功的回调地址(必须是公网)- 必须为
/login
结尾
- 必须为
点击创建后会到这里
将图上的 Client ID
和 Client Secret
填写到下面的配置中, provider
选择 github
修改地址 HOST 地址, (必须公网)
设置 adminUser
为 你的github 名
设置 kubernetes
为 开启
安装
自行选择需要安装的 ns
编写构建 Dockerfile
由于我的项目是一个前后端分离的项目, API 和 Web 是两个不一样的 repo, 所以需要分开写
别急的到 drone 里面测试, 现在本地 docker build 通了再去测
Web 项目构建
项目使用 Vue 编写, Dockerfile 使用多阶段构建
web 打包完成
NodeJS API 构建
nodejs 使用了 node-canvas 来绘制标签图片, 所以需要安装一些额外的依赖.
Nodejs 构建完成
K8s 编排文件
我给我的这两个起了个名字 haozi-api
和 haozi-web
先编写 Deployment
wms api deployment
主要设置一下
wms api service
wms web deployment
wms web service
ingress
这里和 drone 一样 使用了 cert-manager
来签发证书
要注意下面的 path
因为需要吧 wms.haozi.cool/api
开头的所有请求转发到 api server. 所以开启了 nginx.ingress.kubernetes.io/rewrite-target
, 然后才可以正则匹配
测试 编排
拿第二步 dockerfile build 出来的镜像都测试一下, 看看能不能跑通, 如果可以的话就可以开始编写下一步了
kubectl apply -f xxxx.yaml -n haozi-app
编写 Drone 配置
在上面的编排文件测试完成后, 进入 drone 界面
找到你的项目 点击
点击激活, drone 会自动在 repo 中添加一条 webhook, 可以在 github 项目中查看, 类似下图
回到 drone 进入项目, 一般来说不用动下面的配置, 有需要的话就微调一下
.drone.yml
主要是分为3部分, 如果等我写好的话就是 四部分(加一个 测试)
下面是每个部分用到的 plugin 文档,
- 构建镜像
- 更新k8s
- 使用 TG 提醒构建是否完成 (你也可以使用别的插件, 推送到 钉钉, Slack, Server 酱之类的)
- Drone 环境变量参考
以下是我使用的插件的配置, 以及注释
🐛
随便写点啥 , push 个 commit 上去激活一下
点进去看看
要注意这里的日志有些憨批, 不是实时更新的, 可能差的很远..., 有次到k8s容器调试错误, 发现这个页面的日志和 容器内的 build 日志, 差了一大截
全部完成
TG也收到消息了
注意事项
.drone.yml
千万要和 drone setting 里面的 Configuration 配置一样, 不然 Github Webhook 会一直提示Service Timeout
自家家里网不好的话记得挂代理, 或者使用换源
记得一步步调试好最后再组装起来, 合起来调试比较麻烦