天天看點

Drone服務初使用

概要

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

激活指定項目

打開部署好的Drone頁面:

Drone服務初使用

搜尋你要做自動化部署的項目(這兒是test-drone項目):

Drone服務初使用

點選『ACTIVATE』進入:

Drone服務初使用

激活成功進入配置頁。注意,Project settings要選擇Trusted,因為要挂載主控端檔案系統;其他按需要選擇。

Drone服務初使用

預設配置檔案是.drone.yml, 一般也就用這個檔案。到此項目激活成功,可以開始下一步行動了。

配置私鑰

進入配置頁面,輸入Secret Name和對應的Secret Value後點選「ADD A SECRET」,就成功添加私鑰

Drone服務初使用

Docker Hub相關私鑰

這兒要配置2個私鑰,Docker Hub的使用者名和密碼,即執行docker login時要輸入的使用者名和密碼

docker使用者名對應key: docker_user
docker密碼對應key:   docker_pass           

DingTalk

本文使用釘釘的小機器人來做通知,這兒需要把釘釘的token也放到私鑰中

釘釘token對應key:   dingding           

釘釘token擷取方式:

釘釘組(3人可建立組) -> 組設定 -> 小組助手 -> 新增

Drone服務初使用

選擇「自定義」後成功建立助手,檢視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分支收到推送就觸發           

建構結果

把上面項目送出後,打開建構頁面如下:

Drone服務初使用

釘釘也收到通知:

Drone服務初使用

因為沒有輸入正确的docker_username,是以這次部署失敗了,但不影響大家對整體的了解。

說明

本文隻是最簡單的Go項目編譯、建構鏡像、部署到k8s以及最後的釘釘通知。隻是為了講解Drone的使用,省略了單元測試、內建測試、可用性測試等。源碼參見:

Drone測試執行個體源碼