如果Drone部署在K8S中,那么可以通过k8s secret来为drone runner提供secret。
注:必须安装drone-kubernetes-secrets组件,且runner配置evn参数DRONE_SECRET_PLUGIN_TOKEN、DRONE_SECRET_PLUGIN_ENDPOINT指向访问drone-kubernetes-secrets服务。而drone-kubernetes-secrets需配置evn参数SECRET_KEY与DRONE_SECRET_PLUGIN_TOKEN一致。
一、创建k8s secret
apiVersion: v1 kind: Secret type: Opaque data: username: ZHJvbmUtcm9vdA== password: MTIzNA== metadata: name: drone-docker-register-secret namespace: shendu-ops
二、使用Secret
1、在pipeline中定义外部drone secret资源关联k8s secret,以供调用
kind: pipeline type: kubernetes name: drone-build-demo metadata: namespace: shendu-ops --- kind: secret name: username get: path: drone-docker-register-secret name: username --- kind: secret name: password get: path: drone-docker-register-secret name: password
2、通过from_seecret参数使用secret变量
kind: pipeline type: kubernetes name: sd.services.modules.demo metadata: namespace: shendu-ops steps: - name: test image: busybox environment: USERNAME: from_secret: username PASSWORD: from_secret: password commands: - echo $USERNAME - echo $PASSWORD
三、限制使用
默认情况下创建的k8s secret是对所有git repositories和build events有效的。我们可以通过metadata.annotations添加对secret的使用范围限制。
1、使用X-Drone-Repos限制那些git repositories可以访问secret。该值采用shell glob模式匹配,多个值用”,“隔开。
metadata:
name: drone-docker-register-secret
annotations:
X-Drone-Repos: dev/demo,release/*
2、使用X-Drone-Events按事件限制访问secret
metadata: name: drone-docker-register-secret annotations: X-Drone-Events: push,tag