概要
Drone是Go語言編寫的,基于容器技術的CI/CD系統。是目前為止個人感覺最輕量級的CI/CD系統,使用本身非常友善容易。目前Drone文檔嚴重缺乏,而且好多文檔是之前曆史版本的使用文檔,是以在安裝和使用時會有一些小麻煩,除去這些一切很舒服。前一篇已經寫完如何安裝Drone,本篇會以一個執行個體來講一下,如何用Drone完成一個最簡單Golang項目的部署。
激活指定項目
打開部署好的Drone頁面:

搜尋你要做自動化部署的項目(這兒是test-drone項目):
點選『ACTIVATE』進入:
激活成功進入配置頁。注意,Project settings要選擇Trusted,因為要挂載主控端檔案系統;其他按需要選擇。
預設配置檔案是.drone.yml, 一般也就用這個檔案。到此項目激活成功,可以開始下一步行動了。
配置私鑰
進入配置頁面,輸入Secret Name和對應的Secret Value後點選「ADD A SECRET」,就成功添加私鑰
Docker Hub相關私鑰
這兒要配置2個私鑰,Docker Hub的使用者名和密碼,即執行docker login時要輸入的使用者名和密碼
docker使用者名對應key: docker_user
docker密碼對應key: docker_pass
DingTalk
本文使用釘釘的小機器人來做通知,這兒需要把釘釘的token也放到私鑰中
釘釘token對應key: dingding
釘釘token擷取方式:
釘釘組(3人可建立組) -> 組設定 -> 小組助手 -> 新增
選擇「自定義」後成功建立助手,檢視webhook,如:
https://oapi.dingtalk.com/robot/send?access_token=d4a22b306d1c15a9e80504087cde8e637b8c66fa024554ffef0926a4dea1xxxx這兒的token=後面的64位字串就是要釘釘的token值
.drone配置
pipeline主配置
kind: pipeline
type: docker
name: demo-go # 指定項目名稱
steps配置-編譯
- name: 編譯
image: golang:alpine # 本項目是golang項目, 是以使用go鏡像
environment:
CGO_ENABLED: "0" # 指定環境變量
commands:
- go build -o test-drone # 執行編譯指令
steps配置-建構鏡像
- name: 建構鏡像
image: plugins/docker # 建構docker鏡像專用鏡像
volumes:
- name: docker # 挂載下面定義的Volumn
path: /var/run/docker.sock # 與主控端用同一docker
settings: # plugins/docker用到的相關配置
username:
from_secret: docker_user # alicloud指定的docker hub的使用者名(前面配置)
password:
from_secret: docker_pass # alicloud指定的docker hub的密碼(前面配置)
repo: registry.cn-beijing.aliyuncs.com/zhaoweiguo/test # 要推送docker位址
registry: registry.cn-beijing.aliyuncs.com # 使用的docker hub位址
tags: ${DRONE_BUILD_NUMBER} # docker的tag值, 預設每次加1
steps配置-Kubernetes 部署
- name: Kubernetes 部署
image: guoxudongdocker/kubectl:v1.14.1 # 執行kubectl的鏡像
volumes:
- name: kube # 挂載下面定義的Volumn
path: /root/.kube # 使用主控端配置的kube配置
commands:
# 把deployment.yaml中的#Tag修改為上面打包的docker的tag值
- sed -i "s/#Tag/${DRONE_BUILD_NUMBER}/g" deployment.yaml
- kubectl apply -f deployment.yaml # 執行kubectl apply
steps配置-釘釘通知
- name: 釘釘通知
image: guoxudongdocker/drone-dingtalk # 釘釘通知專用鏡像
settings:
token:
from_secret: dingding # 釘釘的token(前面配置)
type: markdown
message_color: true
message_pic: true
sha_link: true
when:
status: [failure, success] # 不管成功與否都發通知
要挂載的volumn:
volumes:
- name: kube
host:
path: /tmp/cache/.kube # 注意: 需要提前把kube的配置資訊放到指定目錄
- name: docker
host:
path: /var/run/docker.sock
觸發條件
trigger:
branch:
- master # master分支收到推送就觸發
建構結果
把上面項目送出後,打開建構頁面如下:
釘釘也收到通知:
因為沒有輸入正确的docker_username,是以這次部署失敗了,但不影響大家對整體的了解。
說明
本文隻是最簡單的Go項目編譯、建構鏡像、部署到k8s以及最後的釘釘通知。隻是為了講解Drone的使用,省略了單元測試、內建測試、可用性測試等。源碼參見:
Drone測試執行個體源碼