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

cover photo

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

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

用 Go 語言實作 Job Queue 機制

golang logo

很高興可以在 Mopcon 分享『用 Go 語言實現 Job Queue 機制』,透過簡單的 goroutinechannel 就可以實現簡單 Queue 機制,並且限制同時可以執行多少個 Job,才不會讓系統超載。最後透過編譯放進 Docker 容器內,就可以跑在各種環境上,加速客戶安裝及部署。

Continue reading “用 Go 語言實作 Job Queue 機制”

在 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”

GitHub 推出 CI/CD 服務 Actions 之踩雷經驗

GitHub Actions 簡介

今年很高興又去 Cloud Summit 研討會給一場議程『初探 GitHub 自動化流程工具 Actions』,這場議程沒有講很多如何使用 GitHub Actions,反倒是講了很多設計上的缺陷,以及為什麼我現在不推薦使用。GitHub Actions 在去年推出來,在這麼多 CI/CD 的免費服務,GitHub 自家出來做很正常,我還在想到底什麼時候才會推出,beta 版出來馬上就申請來試用,但是使用下來體驗非常的不好,有蠻多不方便的地方,底下我們就來聊聊 GitHub Acitons 有哪些缺陷以及該改進的地方。

Continue reading “GitHub 推出 CI/CD 服務 Actions 之踩雷經驗”

10 分鐘內用 Traefik 架設 Drone 搭配 GitHub 服務

這標題也許有點誇張,但是如果實際操作一次,肯定可以在 10 分鐘內操作完成。本篇來教大家如何用 Traefik 當作前端 Proxy,後端搭配 Drone 服務接 GitHub,為什麼會用 Traefik,原因很簡單,你可以把 Traefik 角色想成是 Nginx,但是又比 Nginx 更簡單設定,另外一點就是,Traefik 自動整合了 Let’s Encrypt 服務,您就不用擔心憑證會過期的問題。假如機器只會有一個 Drone 當 Host 的話,其實也可以不使用 Traefik,因為 Drone 其實也是內建自動更新憑證的功能。如果您對 Traefik 有興趣,可以直接參考底下兩篇文章

Continue reading “10 分鐘內用 Traefik 架設 Drone 搭配 GitHub 服務”

在 docker-in-docker 環境中使用 cache-from 提升編譯速度

提升 docker build 時間

在現代 CI/CD 的環境流程中,使用 Docker In Docker 來編譯容器已經相當流行了,像是 GitLab CIDrone 都是全走 Docker 環境,然而有很多人建議盡量不要在 CI 環境使用 Docker In Docker,原因在於 CI 環境無法使用 Host Image 資料,導致每次要上傳 Image 到 Docker Hub 時都需要重新下載所有的 Docker Layer,造成每次跑一次流程都會重複花費不少時間,而這個問題在 v1.13 時被解決,現在只要在編譯過程指定一個或者是多個 Image 列表,先把 Layer 下載到 Docker 內,接著對照 Dockerfile 內只要有被 Cache 到就不會重新再執行,講得有點模糊,底下直接拿實際例子來看看。

Continue reading “在 docker-in-docker 環境中使用 cache-from 提升編譯速度”