跳到主要内容

基于Github + Drone + K8s 构建私有 CI/CD 平台

· 13 分钟阅读
月子喵

最搬家收拾东西的是发现比起去年, 我的拥有的东西翻了个倍. 原来4个大箱子就打包完了, 现在8个才刚够. 我之前文章中提到我做了一个物品管理系统, 但是由于搬家的时候比较忙, 大部分的东西都没有统计进去.


正好马上到了五一, 想乘此机会把东西统计出来.


目前这个系统还在开发当中, 所以部署都是在自己的PC上面的, 使用的时候必须在 PC 启动然后 nginx 做 https 协议的反向代理, 手机浏览器才能正常的拍摄照片录入. 非常的麻烦, 所以借此机会想和内网的服务一起做一个整合.


以前我的内网是有一个 gitlab 的, 但是由于太臃肿了, 再加上github 现在免费的无限量私有库, 非常的香. 就去掉了. CI/CD 工具开源的也没啥可以选的, 就老牌的 Jenkins 和新兴的 Drone这俩可选的, 以前公司用的就是 jenkins 总觉得太丑了,配置太麻烦了. 所以选了 Drone 来作死

%}
Preview

准备

  • 搭建好的 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 结尾

%}
Preview

点击创建后会到这里

%}
Preview

将图上的 Client IDClient 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-apihaozi-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 界面

%}
Preview

找到你的项目 点击

%}
Preview

点击激活, drone 会自动在 repo 中添加一条 webhook, 可以在 github 项目中查看, 类似下图

回到 drone 进入项目, 一般来说不用动下面的配置, 有需要的话就微调一下

%}
Preview

.drone.yml

主要是分为3部分, 如果等我写好的话就是 四部分(加一个 测试)

下面是每个部分用到的 plugin 文档,

以下是我使用的插件的配置, 以及注释

加载中.....

🐛

随便写点啥 , push 个 commit 上去激活一下

%}
Preview

点进去看看

%}
Preview

要注意这里的日志有些憨批, 不是实时更新的, 可能差的很远..., 有次到k8s容器调试错误, 发现这个页面的日志和 容器内的 build 日志, 差了一大截

%}
Preview

333333

全部完成

%}
Preview

TG也收到消息了

注意事项

.drone.yml 千万要和 drone setting 里面的 Configuration 配置一样, 不然 Github Webhook 会一直提示 Service Timeout

自家家里网不好的话记得挂代理, 或者使用换源

记得一步步调试好最后再组装起来, 合起来调试比较麻烦