K8S环境使用gitlab+drone2 进行持续交付
drone2开始虽然可能没有后续版本了,但是还是可以关注Gitness。drone2分类了每个项目的CICD信息,不像drone1一样全部堆在一个页面上。后面再补充一些关于drone在云原生环境更丝滑的用法。
原文地址:K8S环境使用gitlab+drone2 进行持续交付
K8S环境使用gitlab+drone2 进行持续交付
环境说明
1、K8S:1.23.0
2、docker: 20.10.13
3、gitlab: 14.7
4、drone: 2
5、nfs: 4
drone版本说明
drone有两个大版本分别是drone1和drone2,从drone2开始被EDGE收购,重启项目为:Gitness。
本次教程提供的yaml文件同时适用于1和2
drone1界面
drone2界面
开始部署
第一步、创建 OAuth 应用程序
在gitlab创建出GitLab OAuth 应用程序授权资源
第二步、创建共享密钥
创建共享密钥以验证运行器与中央无人机服务器之间的通信。
# 您可以使用 openssl 生成共享密钥
[root@llody-dev ~]#openssl rand -hex 16
303b6068fb64fe4296da1f1def6295db
第三步、启动drone-server
apiVersion: v1
kind: Service
metadata:
name: drone-service
namespace: default
spec:
selector:
app: drone
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
---
apiVersion: v1
kind: ConfigMap
metadata:
name: drone-config
namespace: default
data:
DRONE_GITLAB_SERVER: "gitlab地址"
DRONE_GITLAB_CLIENT_ID: "GitLab oauth 客户端 ID"
DRONE_GITLAB_CLIENT_SECRET: "GitLab oauth 客户端密钥"
DRONE_RPC_SECRET: "上面生成的共享密钥"
DRONE_SERVER_HOST: "drone地址,建议填写域名"
DRONE_SERVER_PROTO: "https"
DRONE_USER_CREATE: "username:gitlab管理员名称,admin:true"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: drone-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: drone
template:
metadata:
labels:
app: drone
spec:
containers:
- name: drone
image: drone/drone:2
volumeMounts:
- name: drone-data
mountPath: /data
envFrom:
- configMapRef:
name: drone-config
ports:
- containerPort: 80
- containerPort: 443
resources:
limits:
cpu: 2000m
memory: 2048Mi
requests:
cpu: 100m
memory: 512Mi
volumes:
- name: drone-data
persistentVolumeClaim:
claimName: drone-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
# pvc名称
name: drone-pvc
spec:
# 读写权限
accessModes:
- ReadWriteOnce
# 使用的存储类
storageClassName: managed-nfs-storage
# 定义容量
resources:
requests:
storage: 5Gi
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
#nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
labels:
app: drone
name: drone
namespace: default
spec:
rules:
- host: droneci.llody.com
http:
paths:
- backend:
serviceName: drone-service
servicePort: 80
path: /
pathType: ImplementationSpecific
tls:
- hosts:
- droneci.llody.com
secretName: wildcard.llody.com-tls
其中有几点需要注意
1、文件中依赖了NFS存储
2、文件中使用了treafik作为ingress对外暴露端口
3、configmap中的几个变量解释一下:
DRONE_GITLAB_CLIENT_ID** 必需的字符串值提供您的 GitLab oauth 客户端 ID。
DRONE_GITLAB_CLIENT_SECRET** 必需的字符串值提供 GitLab oauth 客户端密钥。
DRONE_GITLAB_SERVER** 选项字符串值提供您的 GitLab 服务器 URL。默认值为 gitlab.com 处的服务器地址。`https://gitlab.com`
DRONE_GIT_ALWAYS_AUTH** 可选的布尔值将 Drone 配置为在克隆公共存储库时进行身份验证。仅当使用启用了私有模式的自承载 GitLab 时,才应启用此功能。
DRONE_RPC_SECRET** 必需的字符串值提供在上一步中生成的共享密钥。这用于验证服务器和运行器之间的 rpc 连接。必须为服务器和运行器提供相同的密钥值。
DRONE_SERVER_HOST** 必需的字符串值提供外部主机名或 IP 地址。如果使用 IP 地址,则可以包含端口。例如
drone.domain.com
DRONE_SERVER_PROTO** 必需的字符串值提供外部协议方案。此值应设置为 或 。如果配置 ssl 或 acme,则此字段默认为 https。`http``https`
DRONE_USER_FILTER**GitLab 用户或组织的可选逗号分隔列表。注册仅限于此列表中的用户或属于此列表中组织成员的用户。*如果未设置此值,则注册对公众开放。*
第四步、部署drone-runner
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: drone
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- create
- delete
- apiGroups:
- ""
resources:
- pods
- pods/log
verbs:
- get
- create
- delete
- list
- watch
- update
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: drone
namespace: default
subjects:
- kind: ServiceAccount
name: default
namespace: default
roleRef:
kind: Role
name: drone
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: drone-runner
labels:
app.kubernetes.io/name: drone-runner
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: drone-runner
template:
metadata:
labels:
app.kubernetes.io/name: drone-runner
spec:
containers:
- name: drone-runner
image: drone/drone-runner-kube:latest
ports:
- containerPort: 3000
env:
- name: DRONE_RPC_HOST
value: drone-service.default.svc.cluster.local # Drone Server地址
- name: DRONE_RPC_PROTO
value: http
- name: DRONE_RPC_SECRET
value: 303b6068fb64fe4296da1f1def6295db # Drone Server部署时候填写的secret共享密钥
---
apiVersion: v1
kind: Service
metadata:
name: drone-runner-service
spec:
selector:
app: drone-runner
ports:
- protocol: TCP
port: 3000
targetPort: 3000
第五步、登录
这里的用户名最好与gitlab中的账户名称保持一致
第六步、开启需要的选项,配置需要的证书密钥,如镜像仓靠地址,缓存等。
第七步、登录gitlab确认webhooks是否自动配置
注意:这个选项是在你的drone页面开启关联后自动配置的。
第八步、在nginx-test项目下编写.drone.yml
修改.drone.yml文件并推送到gitlab仓库
注意,我这里只做了一个操作,拉取我自己制作的镜像,打印当前路径和打印当前文件。默认会分两步,第一步会拉取代码,第二步会执行builds的job
更多pipeline请参考官网:https://docs.drone.io/pipeline/overview/
第九步、查看执行结果
总结
drone2开始虽然可能没有后续版本了,但是还是可以关注Gitness。
drone2分类了每个项目的CICD信息,不像drone1一样全部堆在一个页面上。
后面再补充一些关于drone在云原生环境更丝滑的用法。
更多推荐
所有评论(0)