网站首页 > 技术教程 正文
我们知道 CI/CD 是 devops 中最重要的环节,特别是对于现在的云原生应用,CI/CD 更是不可或缺的部分,对于 CI/CD 工具有很多优秀的开源工具,比如前面我们介绍的 Jenkins 以及gitlab ci都是非常流行常用的 CI/CD 工具,但是这两个工具整体使用来说有点陈旧和笨重,本文将为大家介绍一个比较热门的轻量级 CI/CD 开源工具:Drone,介绍如何将 Drone 和 Kubernetes 进行结合使用。
本篇文章是 Drone 系列文章中的第一篇文章,需要有一定的 Kubernetes 基础知识,我们将通过 Helm 在 Kubernetes 集群上面安装 Drone,如果你已经有运行在 K8S 集群上面的 Drone 应用,则可以忽略本文内容。
Drone
Drone 是用 Go 语言编写的基于 Docker 构建的开源轻量级 CI/CD 工具,可以通过 SaaS 服务和自托管服务两种方式使用,Drone 使用简单的 YAML 配置文件来定义和执行 Docker 容器中定义的 Pipeline,Drone 由两个部分组成:
- Server端负责身份认证,仓库配置,用户、Secrets 以及 Webhook 相关的配置。
- Agent端用于接受构建的作业和真正用于运行的 Pipeline 工作流。
Server 和 Agent 都是非常轻量级的服务,大概只使用 10~15MB 内存,所以我们也可以很轻松的运行在笔记本、台式机甚至是 Raspberry PI 上面。
要安装 Drone 是非常简单的,官方文档中提供了 Drone 集成 GitHub、GitLab、Gogs 等等的文档,可以直接部署在单节点、多个节点和 Kubernetes 集群当中。
我们这里会使用 Helm 来将 Drone 安装到 Kubernetes 集群当中,如果你对 Kubernetes 还不是很熟悉,可以先去学习下我们的 Kubernetes 进阶课程和对应的视频教程,如果对 Helm 也不是很熟悉的,也可以先去查看下前面的Helm 初体验文章,这里关于 Helm 的安装我们不再细说了。
安装
这里我们使用 Helm Chart 官方仓库中包含的 Chart 包:https://github.com/helm/charts/tree/master/stable/drone,文档中有详细的使用说明。由于 Drone 需要和代码仓库进行连接,如果没有配置,则无法启动,我们这里将结合 GitHub 和 Drone 使用,首先需要先在 GitHub 中注册一个新的 OAuth 应用程序,登录 GitHub,进入页面https://github.com/settings/applications/new,添加如下信息:
创建完成后会获得用于配置 Drone 的 ClientID 和 ClientSecret,记录这两个值,然后创建一个名为 drone-values.yaml 的文件,通过覆盖 values.yaml 中的 values 值来自定义 Drone,内容如下:
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: 'true' hosts: - drone.qikqiak.com tls: - secretName: drone-tls hosts: - drone.qikqiak.com sourceControl: provider: github github: clientID: 上面获得的ClientID值 clientSecretKey: clientSecret clientSecretValue: 上面获得的ClientSecret值 server: https://github.com server: adminUser: cnych # github 的用户名 ## Configures drone to use kubernetes to run pipelines rather than agents, if enabled ## will not deploy any agents. kubernetes: ## set to true if you want drone to use kubernetes to run pipelines enabled: true persistence: enabled: true existingClaim: dronepvc
我们通过 Ingress 对象来暴露 Drone 服务,而且还配置了一个kubernetes.io/tls-acme: 'true'的 annotation,这个是因为我们集群中安装了 Cert-Manager,所以我们可以自动化 https,同样可以参考前面的文章使用 Let’s Encrypt 实现 Kubernetes Ingress 自动化 HTTPS,另外设置server.adminUser我们 GitHub 的用户名,这样我们登录后就具有管理员权限了,另外比较重要的server.kubernetes.enabled=true,将该参数设置为 true,则运行 Drone 的任务的时候就是直接使用 Kubernetes 的 Job 资源对象来执行,而不是 Drone 的 agent,这样设置为 true 后,安装完成后,就没有 drone agent 了,最后通过指定 persistence.existingClaim 指定了一个 PVC 来用于数据持久化,所以在安装之前需要先创建 dronepvc 这个 PVC 对象(volume.yaml):
apiVersion: v1 kind: PersistentVolume metadata: name: dronepv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain nfs: server: 10.151.30.11 path: /data/k8s --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: dronepvc namespace: kube-ops spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
然后通过上面自定义的 values 文件来安装 Drone:
$ kubectl apply -f volume.yaml $ helm repo update $ helm install --name drone \ --namespace kube-ops \ -f drone-values.yaml \ stable/drone Release "drone" has been installed. Happy Helming! LAST DEPLOYED: Mon Aug 5 23:35:22 2019 NAMESPACE: kube-ops STATUS: DEPLOYED RESOURCES: ==> v1/ServiceAccount NAME SECRETS AGE drone-drone-pipeline 1 18d drone-drone 1 18d ==> v1/RoleBinding NAME AGE drone-drone 18d ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE drone-drone-server 1 1 1 0 18d ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE drone-drone drone.qikqiak.com 80, 443 18d ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE drone-drone-server-6f66b47dc-69qmf 0/1 ContainerCreating 0 0s ==> v1/Secret NAME TYPE DATA AGE drone-drone-source-control Opaque 1 18d drone-drone Opaque 1 18d ==> v1/ClusterRole NAME AGE drone-drone-pipeline 18d ==> v1/ClusterRoleBinding NAME AGE drone-drone-pipeline 18d ==> v1/Role NAME AGE drone-drone 18d ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE drone-drone ClusterIP 10.105.20.182 <none> 80/TCP 18d NOTES: ********************************************************************************* *** PLEASE BE PATIENT: drone may take a few minutes to install *** ********************************************************************************* From outside the cluster, the server URL(s) are: http://drone.qikqiak.com
注意我们这里使用的 Drone Chart 版本是drone-2.0.5,不同的版本配置略有不同,注意查看文档。
安装完成后,可以查看对应的 Pod 状态:
$ kubectl get pods -n kube-ops -l app=drone NAME READY STATUS RESTARTS AGE drone-drone-server-6f66b47dc-69qmf 1/1 Running 0 96s
最后需要做的就是给域名 drone.qikqiak.com 添加上 DNS 解析,我们这里是一个正常的域名,直接解析到 nginx-ingress Pod 的任意一个节点即可,如果你是自定义的域名记住在你要访问 drone 的节点上的 /etc/hosts 中添加上域名隐射。
在浏览器中访问 drone.qikqiak.com,正常这个时候就会跳转到 GitHub 进行认证登录,认证后会将 GitHub 的代码仓库同步到 Drone 来,也可以手动同步代码仓库:
点击项目右边的ACTIVATE激活,进入项目中也可以根据自己的需求进行配置:
到这里我们就通过 Helm 成功安装了 Drone,下一篇文章再和大家探讨如何使用 Drone 的 Pipeline 来进行 CI/CD。
猜你喜欢
- 2024-10-13 大前端教程之Dokcer,部署方式,CICD的解决方案
- 2024-10-13 CI/CD之三:用filebeat,kafka,kylin,superset快速实现度量
- 2024-10-13 使用 GitLab CI 和 Docker 自动部署 Spring Boot 应用
- 2024-10-13 gitlab ci 维护记录(gitlab cicd)
- 2024-10-13 基于docker-compose的Gitlab CI/CD实践&排坑指南
- 2024-10-13 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
- 2024-10-13 搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
- 2024-10-13 还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲
- 2024-10-13 将Docker镜像安全扫描步骤添加到CI/CD管道
- 2024-10-13 微服务API网关NGINX、ZUUL、Spring Cloud Gateway与
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)