Drone统一管理.drone.yaml文件


theme: scrolls-light

Drone统一管理.drone.yaml文件

在赞叹drone的简洁与效率的同时,我们会发出疑问.drone.yaml文件难道必须要和工程放在一起才能触发吗,这样管理很不方便,而且与开发无关,ci的流程应该对开发透明才对,于是我去查了一些文档最终找到了这样一个参数

yaml DRONE_YAML_ENDPOINT

官方文档对于该参数的描述: https://docs.drone.io/extensions/configuration/#configuration

如何做到统一管理

根据官网的描述,在drone-server配置了该环境变量后,在触发ci的时候会根据该环境变量配置的远程地址获取yaml文件,知道了这些怎么统一去管理玩法就很多了。

我是如何管理的

我这里是基于k8s环境,如果是其他环境也类似

首先在drone-server配置DRONEYAMLENDPOINT环境变量,value的地址需要自行编写一个web程序,提供一个post api接口地址(我这里用go实现)

``` kind: Deployment metadata: labels: app: drone name: drone spec: replicas: 1 selector: matchLabels: app: drone strategy: {} template: metadata: labels: app: drone spec: containers: - image: drone/drone name: drone ports: - containerPort: 80 name: http env: - name: DRONEYAMLENDPOINT value: http://dronerepo-svc:8080 - name: DRONEGITEASERVER valueFrom: configMapKeyRef: name: drone-cm key: DRONEGITEASERVER - name: DRONEGITEACLIENTID valueFrom: configMapKeyRef: name: drone-cm key: DRONEGITEACLIENTID - name: DRONEGITEACLIENTSECRET valueFrom: configMapKeyRef: name: drone-cm key: DRONEGITEACLIENTSECRET - name: DRONERPCSECRET valueFrom: configMapKeyRef: name: drone-cm key: DRONERPCSECRET - name: DRONEUSERCREATE valueFrom: configMapKeyRef: name: drone-cm key: DRONEUSERCREATE - name: DRONESERVERHOST valueFrom: configMapKeyRef: name: drone-cm key: DRONESERVERHOST - name: DRONESERVERPROTO valueFrom: configMapKeyRef: name: drone-cm key: DRONESERVERPROTO volumeMounts: - mountPath: /var/run/docker.sock name: sock resources: {} volumes: - name: sock hostPath: path: /var/run/docker.sock status: {}

```

编写一个web程序,根据官网的参数和响应值进行配置,我这里只用到了namespace(仓库用户名)、name(仓库名称)、defaultbranch(触发分支) ``golang // 结构体 type Drone struct { Build struct{}json:"build" Repo struct{ NameSpace stringjson:"namespace" RepoName stringjson:"name" Branch stringjson:"defaultbranch" }json:"repo"`

}

处理了请求接下来就需要获取yaml,我这里yaml存储在了gitea里,根据上面请求的参数动态替换一下即可 var droneRepoUrl = "http://url/%s/dronerepo/raw/branch/%s/%s/%s/drone.yaml"

url := fmt.Sprintf(droneRepoUrl,drone.Repo.NameSpace,drone.Repo.Branch,drone.Repo.RepoName,drone.Repo.Branch)

```

这样我们根据ci触发时不同的用户,仓库,以及分支就可以统一进行管理了,下面是yaml仓库的结构 yaml . └── test (仓库) └── master (分支) └── drone.yaml (具体的yaml文件) 最后将程序打包部署到自己对应的环境中即可

这个时候就算项目根目录无.drone.yaml文件也可以正常去触发ci,如果没有成功触发需要查看drone-server的日志,是否请求地址错误或返回值有误

golang //返回的yamk需要在data中 type Data struct { Data string }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值