Drone 搭配 Kubernetes 部署 Go 語言項目

在之前寫過一篇『Drone 搭配 Kubernetes 升級應用程式版本』,裡面內容最主要介紹 honestbee 撰寫的 drone 外掛: drone-kubernetes,但是此外掛並非用 Go 語言所撰寫,而是用 Shell Script 透過 方式來更新專案項目,但是這邊會有幾個缺點,第一點就是假設在 Develop 環境永遠都是吃 master 分支,也就是讀取 Image 的 標籤,這時候此外掛就無法作用,第二點此外掛無法讀取 kubernetes YAML 檔案,假設專案要修正一個 ENV 值,此外掛也無法及時更新。綜合這兩點因素,只好捨棄此外掛,而本篇會帶給大家另一個用 Go 語言所撰寫的外掛,是由 @Sh4d1 所開發的項目,用法相當容易,底下會一步一步教大家如何部署 Go 語言項目。

GitHub 工作流程及部署

團隊只會有兩種環境,一種是 Staging 另一種則是 Production,而前者是根據只要 master 分支有變動,則會更新 Staging,而後者則需要下 Tag 才會正式部署到 Production,在 Drone 預設值內,是不開啟 Tag 事件,所以需自行到後台打開 (如下圖),未來可以透過 drone-cli 用 command 方式打開,目前此功能正在 Review 中。

底下會來一步一步教大家如何設定 Drone。

準備 Go 項目

本篇會用 Go 語言寫個小型 Http 服務,來證明使用 tag 事件及 master 分支都可以正確部署,底下先看看 Go 的程式碼:

從上面程式可以看到,在編譯 Go 語言專案時,可以從外部帶入 version 變數,證明目前的 App 版本。請參考 Makefile 內的

只要是 master 分支的 commit,就會執行 ,如果是 push tag 到伺服器,則會執行 。最後看看 Drone 如何編譯

記得將 , 和 設定好。

上傳容器到 DockerHub

上一個步驟可以編譯出 linux 的二進制檔案,這時候就可以直接放到容器內直接執行:

其中 用的是 docker scratch 最小 image 搭配 SSL 憑證檔案,接著把 go 編譯出來的二進制檔案放入,所以整體容器大小已經是最小的了。看看 drone 怎麼上傳到 DockerHub。

其中 會自動將 分支上傳到 標籤,而假設上傳 版本時,drone 則會幫忙編譯出三個不同的 tag 標籤,分別是 , , 這是完全符合 Semantic Versioning,如果有在開源專案打滾的朋友們,一定知道版本的重要性。而 Drone 在這地方提供了很簡單的設定讓開發者可以上傳一次 tag 做到三種不同的 image 標籤。

部署更新 Kubernetes

這邊推薦大家使用 Sh4d1/drone-kubernetes 外掛,使用之前請先設定好三個參數:

KUBERNETES_SERVER

KUBERNETES_CERT

KUBERNETES_TOKEN

可以打開家目錄底下的 檔案直接找到,cert 及 token 請先透過 pod 找到 secret token name:

拿到 secret name 之後,再透過底下指令找到 及

其中 token 還需要透過 base64 decode 過,才可以設定到 drone secret。完成上述步驟後,可以來設定 drone 部署:

其中 就是該服務的 deploy 檔案:

大家可以找到 ,這邊需要寫個 sed 指令來取代 ,部署到 staging 則是 ,如果是 tag 則取代為

這邊有個問題就是,我們怎麼讓在同一個 image:latest 下,也可以保持更新 App 呢,首先必須設定 為 ,以及設定一個 env 讓 drone 可以動態修改 template 檔案

目的是讓每次 kubernetes 都可以讀取不一樣的 template 確保 image 都可以即時更新,假設少了上述步驟,是無法讓 staging 保持更新狀態。畢竟使用 kubectl apply 時,如果 yaml 檔案是沒有更動過的,就不會更新。

而 Tag 就不用擔心,原因就是 就會改變不一樣的值,所以肯定會即時更新,那假設團隊想要上傳相同 tag (這是不好的做法,請盡量不要使用),這時候動態修改 env 的作法就發揮功效了。從上面的教學,現在我們看安新的透過 GitHub Flow 來完成部署 Staging 及 Production 了。

影片簡介

下面影片並無包含實作部分,會介紹我在團隊怎麼使用 GitHub Flow 部署,更多實作詳細細節,可以參考 Udemy 上面影片

https://www.youtube.com/watch?v=qLla47eJUQc

心得

作者我尚未深入玩過 GitLab CI 或者是 Jenkins 搭配 Kubernetes 來部署專案,但是我相信以複雜及學習難度來說,用 Drone CI 是比較簡單的,這部分就不多說了,大家實際操作比較過才知道。希望能帶給有在玩 Drone 的開發者有些幫助。另外我在 Udemy 上面開了兩門課程,一門 drone 另一門 golang 教學,如果對這兩門課有興趣的話,都可以購買,目前都是特價 $1800

Go 語言實戰 $1800 (台幣)

一天學會 DEVOPS 自動化流程 $1800 (台幣)

線上程式碼

文章链接:https://gocn.vip/article/825、

文章來自: 『Drone 搭配 Kubernetes 部署 Go 語言項目』

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180827B0TEF400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券