Drone 搭配 Kubernetes 部署 Go 語言項目

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

如何在 Go 專案內寫測試

Go-brown-side.sh 相信大家都知道專案內不導入測試,未來越來越多功能,技術債就會越來越多,接手的人罵聲連連,而寫測試的簡單與否決定專案初期是否要先導入。為什麼專案要導入測試,導入測試有什麼好處,對於團隊而言,導入測試好處實在太多了,底下列了幾點是我個人覺得非常重要的。
  1. 減少 Review 時間
  2. 降低修改程式碼產生的的錯誤
  3. 確保程式碼品質
第一點非常實用,尤其在專案很忙的時候,同事間只有少許的時間可以幫忙看程式碼或討論,如果大家都有寫測試,在時間的壓力下,只要稍微看一下,CI/CD 驗證過無誤,大致上就可以上線了。第二點在於,團隊其他成員需要修改一個不確定的地方,商業邏輯修正可能會造成很大的錯誤,而測試在這時候就發揮效果。最後一點就是程式碼品質,不管是新功能,或者是 Bug,任何時間點都需要補上測試,就算 code coverage 已經很高了,但是只要有任何 bug 就要補測試,測試寫的越多,專案的品質相對會提高。在 Go 語言專案內該如何寫測試了,為什麼專案要導入 Go 語言的原因之一就是『寫測試太簡單』了,底下來介紹如何寫基本的測試。 Continue reading “如何在 Go 專案內寫測試”

Go 語言的 vendor 目錄

Go-Logo_Blue 很多朋友剛入門 Go 語言時,第一個會遇到的問題是,該如何設定專案配置,讓專案可以正常執行,在個人電腦該如何開發多個專案,這邊就會遇到該如何設定 $GOPATH,我在這邊跟大家講個觀念,開發環境只會有一個 $GOPATH,不管團隊內有多少專案,都是存放在同一個 GOPATH,避免每次開專案都要重新設定 $GOPATH,而專案內用到的相依性套件,請各自維護,透過官方提供的 wiki,請選一套覺得好用的來使用吧,沒有最好的工具,找一套適合團隊是最重要的。 Continue reading “Go 語言的 vendor 目錄”

Go 語言的 init 函式

Go-brown-side.sh 本篇會帶大家認識 Go 語言的 init 函式,在了解 init func 之前,大家應該都知道在同一個 Package 底下是不可以有重複的變數或者是函式名稱,但是唯獨 init() 可以在同一個 package 內宣告多次都沒問題。底下看例子,可以發現的是不管宣告多少次,都會依序從最初宣告到最後宣告依序執行下來。
package main

import (
    "fmt"
)

func init() {
    fmt.Println("init 1")
}

func init() {
    fmt.Println("init 2")
}

func main() {
    fmt.Println("Hello, playground")
}
Continue reading “Go 語言的 init 函式”

[影片教學] 使用 Filter 將專案跑在特定 Drone Agent 服務

drone-logo_512 Drone 是一套用 Go 語言撰寫的 CI/CD 開源專案,是由一個 Server 跟多個 Agent 所組成,Agent 上面必須安裝好 Dokcer 才可以順利測試及部署,但是團隊內會出現一個狀況,每個專案的測試及部署方式不同,有的測試需要 Agent 很多 CPU 或記憶體資源,有的小專案則不需要那麼多,但是當大專案把 agent 系統資源吃光,其他專案都跑不動了,這邊的解決方式就是再建立一台新的 Agent 服務,將需要大量資源的專案跑在該台新的 Agent,Drone 這邊有支援 filter 功能,讓開發者可以指定專案要跑在哪一台 Agent 上。底下來教大家如何設定 drone filter。 Continue reading “[影片教學] 使用 Filter 將專案跑在特定 Drone Agent 服務”

如何使用 Go 語言 Flag 套件 (影片教學)

Go-brown-side.sh 之前寫過一篇『用 Golang 寫 Command line 工具』教學,作者我錄了一個教學影片,教大家如何使用 Go 語言Flag 套件,套件用法很簡單,相信看了底下的影片教學馬上就會了,但是在這邊強調,用 flag 的時機會是在寫 command line tool 給同事或者是自己用,如果是寫大型 Web Application,不推薦使用 flag,原因是 flag 不支援讀取系統環境變數,如果是 web 服務,想要動態改變 port 或者是 DB 連線資訊,就變得比較複雜,也無法搭配 Docker 使用,更不用說想結合 Kubernetes。如果要寫大專案,請使用 urfave/clispf13/cobraContinue reading “如何使用 Go 語言 Flag 套件 (影片教學)”

Go 語言基礎實戰教學影片上線了

Screen Shot 2018-03-17 at 11.40.12 PM

購買連結

去年在台灣推廣 Drone 這套由 Go 語言所撰寫的開源專案,身為維護者之一,也將 Drone 跟 Gitea 完成整合。如果對於從開發到部署整個流程,還不是很了解的朋友,我個人就是推薦使用 Drone,去年九月也推出 Drone 的教學影片系列:『一天學會自動化測試及部署』,在公司使用 Drone 到現在,不曾看到服務中斷,啟動速度也是毫秒等級。為什麼會這麼穩定及快速呢?當然要歸功於 Go 語言。而這次我個人針對 Go 語言,錄製了一份基礎教學『GO 語言基礎實戰』。 Continue reading “Go 語言基礎實戰教學影片上線了”

Go 語言搭配 Docker Healthy Check 檢查

Screen Shot 2018-03-17 at 11.40.12 PMDocker 1.12 版本後,提供了 HEALTHCHECK 指令,通過指定的一行命令來判斷容器內的服務是否正常運作。在此之前大部分都是透過判斷程式是否 Crash 來決定容器是否存活,但是這地方有點風險的是,假設服務並非 crash,而是沒辦法退出容器,造成無法接受新的請求,這就確保容器存活。現在呢我們可以透過在 Dockerfile 內指定 HEALTHCHECK 指令來確保服務是否正常。而用 Go 語言開發的 Web 服務該如何來實現呢? Continue reading “Go 語言搭配 Docker Healthy Check 檢查”