初探 Go 語言 Project Layout (新人必看)

cover photo

很多人初次進入 Go 語言,肯定都會尋找在 Go 裡面是否有一套標準且最多人使用的 Framework 來學習,但是在 Go 語言就是沒有這樣的標準,所有的開源專案架構目錄都是由各團隊自行設計,沒有誰對誰錯,也沒任何一個是最標準的。那你一定會問,怎樣才是最好的呢?很簡單,如果可以定義出一套結構是讓團隊所有成員可以一目瞭然的目錄結構,知道發生問題要去哪個地方找,要加入新的功能,就有相對應的目錄可以存放,那這個專案就是最好的。當然這沒有標準答案,只是讓團隊有個共識,未來有新人進入專案,可以讓他在最短時間內吸收整個專案架構。

Continue reading “初探 Go 語言 Project Layout (新人必看)”

Drone CI/CD 支援 Auto cancellation 機制

大家一定會問什麼是『Auto cancellation』呢?中文翻作自動取消,這機制會用在 CI/CD 的哪個流程或步驟呢?我們先來探討一個情境,不知道大家有無遇過在同一個 branch 陸續發了 3 個 commit,會發現在 CI/CD 會依序啟動 3 個 Job 來跑這 3 個 commit,假設您有設定同時間只能跑一個 Job,這樣最早的 commit 會先開始啟動,後面兩個 commit 則會處於 Penging 的狀態,等到第一個 Job 完成後,後面兩個才會繼續執行。

Continue reading “Drone CI/CD 支援 Auto cancellation 機制”

在 Docker 內設定使用者及群組權限的三種方式

docker

如果平常本身有在玩 Docker 的開發者肯定知道透過 docker command 啟動的容器預設是使用 root 來當作預設使用者及群組,這邊會遇到一個問題,當 Host 環境你有 root 權限就沒有此問題,如果你沒有 root 權限,又有需求在 Docker 容器內掛上 Volume,會發現產生出來的檔案皆會是 root 權限,這時候在 Host 完全無法寫入。本篇教大家使用三種方式來設定容器使用者權限。

Continue reading “在 Docker 內設定使用者及群組權限的三種方式”

Ansible 設定 Google Container Registry 搭配 Drone 自動上傳

blog logo

最近剛好有需求要串接 GCR (Google Container Registry),專案如果是搭配 GCP 服務,個人建議就直接用 GCR 了。本篇要教大家如何透過 Ansible 管理遠端機器直接登入 GCR,透過特定的帳號可以直接拉 Image,接著用 docker-compose 來重新起動服務,這算是最基本的部署流程,那該如何用 Ansible 登入呢?請看底下教學。

Continue reading “Ansible 設定 Google Container Registry 搭配 Drone 自動上傳”

用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry

github

很高興收到 GitHub 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvnnuget,這篇主要跟大家介紹如何用 Drone 快速串接 CI/CD 流程的『自動上傳 Docker Image 到 GitHub Registry』,底下來看看如何使用 GitHub 提供的 Docker Registry。

Continue reading “用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry”

Go 語言目錄結構與實踐

golang logo

很高興今年錄取 Modernweb 講師,又有機會去宣傳 Go 語言,這次的議程最主要跟大家介紹 Go 專案的目錄該如何設計,一個基本的專案該需要有哪些功能,以及如何實現。大家剛入門 Go 時,肯定會開始找是否有一套 Web Framework 可以參考實踐,可惜的是,在 Go 語言沒有定義任何的目錄結構,所有的結構都可以根據團隊的狀況而有所改變,而這邊我想強調的是如果能讓團隊看到結構後,一目瞭然知道什麼功能該放哪個目錄,或什麼目錄內大概有什麼功能,那其實就夠了。看了許多開源專案,每個設計方式都是不同,但是當你要找什麼功能時,其實從根目錄就可以很清楚的知道要進入哪個地方可以找到您想要的功能及程式碼。這次在 Moderweb 上面的議題,就是分享我在開源專案所使用的目錄結構,以及結構內都放哪些必要的功能。

Continue reading “Go 語言目錄結構與實踐”

用 10 分鐘安裝好 Drone 搭配 GitLab

Drone+GitLab

如果你沒在使用 GitLab CI,那可以來嘗試看看 Drone CI/CD,用不到 10 分鐘就可以快速架設好 Drone,並且上傳一個 .drone.yml 並且開啟第一個部署或測試流程,安裝步驟非常簡單,只需要對 Docker 有基本上的了解,通常都可以在短時間完成 Drone CI/CD 架設。

Continue reading “用 10 分鐘安裝好 Drone 搭配 GitLab”

Minio 從 Docker 容器移除 healthcheck 腳本

minio golang

Minio 是一套開源專案的 Object 儲存容器,如果你有使用 AWS S3,相信要找一套代替 S3 的替代品,一定會想到這套用 Go 語言開發的 Minio 專案。讓您在公司內部也可以享有 S3 的儲存容器,不需要變動任何程式碼就可以無痛從 AWS S3 搬到公司內部。剛好最近在整合 Traefik 搭配 Minio,由於 Minio 原先已經內建 healthcheck 腳本,所以當運行 Minio 時,使用 docker ps 正常來說可以看到類似 Up 7 weeks (healthy) 字眼,但是 Minio 運行了三分鐘之後,狀態就會從 healthy 變成 unhealthy,造成 Traefik 會自動移除 frontend 的對應設定,這樣 Web 就無法顯示了。我在 Udemy 上面有介紹如何用 Golang 寫 healthcheck,大家有興趣可以參考看看,coupon code 可以輸入 GOLANG2019

Continue reading “Minio 從 Docker 容器移除 healthcheck 腳本”