很高興收到 GitHub 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvn 及 nuget,這篇主要跟大家介紹如何用 Drone 快速串接 CI/CD 流程的『自動上傳 Docker Image 到 GitHub Registry』,底下來看看如何使用 GitHub 提供的 Docker Registry。
[Read More]Go 語言目錄結構與實踐
很高興今年錄取 Modernweb 講師,又有機會去宣傳 Go 語言,這次的議程最主要跟大家介紹 Go 專案的目錄該如何設計,一個基本的專案該需要有哪些功能,以及如何實現。大家剛入門 Go 時,肯定會開始找是否有一套 Web Framework 可以參考實踐,可惜的是,在 Go 語言沒有定義任何的目錄結構,所有的結構都可以根據團隊的狀況而有所改變,而這邊我想強調的是如果能讓團隊看到結構後,一目瞭然知道什麼功能該放哪個目錄,或什麼目錄內大概有什麼功能,那其實就夠了。看了許多開源專案,每個設計方式都是不同,但是當你要找什麼功能時,其實從根目錄就可以很清楚的知道要進入哪個地方可以找到您想要的功能及程式碼。這次在 Moderweb 上面的議題,就是分享我在開源專案所使用的目錄結構,以及結構內都放哪些必要的功能。
[Read More]用 10 分鐘安裝好 Drone 搭配 GitLab
如果你沒在使用 GitLab CI,那可以來嘗試看看 Drone CI/CD,用不到 10 分鐘就可以快速架設好 Drone,並且上傳一個 .drone.yml
並且開啟第一個部署或測試流程,安裝步驟非常簡單,只需要對 Docker 有基本上的了解,通常都可以在短時間完成 Drone CI/CD 架設。
Minio 從 Docker 容器移除 healthcheck 腳本
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 。
[Drone] 將單一 Job 分配到多台機器,降低部署執行時間
在傳統 CI/CD 流程,都是會在同一台機器上進行,所以當有一個 Job 吃了很大的資源時,其他工作都必須等待該 Job 執行完畢,釋放出資源後,才可以繼續進行。現在 Drone 推出一個新功能,叫做 Multiple Machine 機制,現在開發者可以將同一個 Job 內,拆成很多步驟,將不同的步驟丟到不同機器上面去執行,降低部署執行時間,假設現在有兩台機器 A 及 B,你可以將前端的測試丟到 A 機器,後端的測試,丟到 B 機器,來達到平行處理,並且享受兩台機器的資源,在沒有這機制之前,只能在單一機器上面跑平行處理,沒有享受到多台機器的好處。
[Read More]透過 Drone CLI 手動觸發 CI/CD 流程
相信大家對於 Drone 並不陌生,這次來介紹 Drone 1.0 的新功能 (更多的 1.0 功能會陸續介紹,也可以參考之前的文章),叫做 promotion,為什麼作者會推出這功能呢?大家在團隊工作時,有些步驟真的無法導入 CI/CD 自動化流程,而是需要人工介入後,再做後續處理?相信一定會遇到此狀況,PM 或老闆看過沒問題後,才需要手動觸發流程,在此功能以前,都會麻煩工程師幫忙做後續自動化流程,但是有了 promotion,現在連 PM 都可以透過 Drone CLI 來自己做部署啦,這邊就是介紹給大家,如何透過 Drone CLI 指令來觸發已存在的工作項目。
[Read More]架設 Go Proxy 服務加速 go module 下載速度
Go 語言在 1.11 推出 go module 來統一市面上不同管理 Go 套件的工具,像是 dep 或 govendor 等,還不知道如何使用 go module,可以參考之前寫的一篇文章『Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具』,在團隊內如果每個人在開發專案時,都透過網路去下載專案使用到的套件,這樣 10 個人就會浪費 10 個人的下載時間,並且佔用公司網路頻寬,所以我建議在公司內部架設一台 Go Proxy 服務,減少團隊在初始化專案所需要的時間,也可以減少在跑 CI/CD 流程時,所需要花費的時間,測試過公司 CI/CD 流程,有架設 Go Proxy,一般來說可以省下 1 ~ 2 分鐘時間,根據專案使用到的相依性套件用量來決定花費時間。本篇來介紹如何架設 ATHENS 這套開源 Go Proxy 專案。
[Read More]用 Ansible 安裝 Drone CI/CD 開源專案
相信大家對於 Drone 開源專案並不陌生,如果對於 Drone 不了解的朋友們,可以直接看之前寫的系列文章,本篇要教大家如何使用 Ansible 來安裝 Drone CI/CD 開源專案。目前 Drone 可以支援兩種安裝方式: 1. 使用 Docker 2. 使用 binary,如果您是進階開發者,可以使用 binary 方式來安裝,像是在 Debug 就可以透過 build binary 方式來測試。一般來說都是使用 Docker 方式來安裝,在使用 ansible 之前,請先準備一台 Ubuntu 或 Debian 作業系統的 VM 來測試。
[Read More]Go Module 如何發佈 v2 以上版本
Go Module 是 Golang 推出的一套件管理系統,在 Go 1.11 推出後,許多 Package 也都陸續支援 Go Module 取代舊有的套件管理系統,像是 govendor 或 dep 等,而再過不久之後,保留 vendor 的方式也會被移除,畢竟現在開發已經不需要在 GOPATH
目錄底下了。對於 Go Module 不熟的話,建議先看官方今年寫的一篇教學部落格,底下是教學會涵蓋的範圍
- Creating a new module.
- Adding a dependency.
- Upgrading dependencies.
- Adding a dependency on a new major version.
- Upgrading a dependency to a new major version.
- Removing unused dependencies.
而本篇最主要會跟大家探討如何發佈 v2 以上的套件版本。
[Read More]GitHub 推出 CI/CD 服務 Actions 之踩雷經驗
今年很高興又去 Cloud Summit 研討會給一場議程『初探 GitHub 自動化流程工具 Actions』,這場議程沒有講很多如何使用 GitHub Actions,反倒是講了很多設計上的缺陷,以及為什麼我現在不推薦使用。GitHub Actions 在去年推出來,在這麼多 CI/CD 的免費服務,GitHub 自家出來做很正常,我還在想到底什麼時候才會推出,beta 版出來馬上就申請來試用,但是使用下來體驗非常的不好,有蠻多不方便的地方,底下我們就來聊聊 GitHub Acitons 有哪些缺陷以及該改進的地方。
[Read More]