去年 GitHub 推出 Actions,就有不少開發者相繼把 CI/CD 流程內會使用到的 Plugin 都丟到 Marktetplace,而在這 Docker 容器時代,肯定是需要用自動化上傳容器到 Docker Registry,而官方也在上週正式釋出第一版 GitHub Actions,雖然在 Marktet 尚有不少開發者已經有實現了此功能,但是官方既然推出了,就採用官方的套件會比較適合。底下我們來看看如何使用 Docker 推出的 GitHub Aciton 來自動化上傳 Docker Image。除了介紹如何使用 GitHub Action 上傳 Image 外,我也會拿 Drone 的 Docker Plugin 來進行比較。
教學影片
如果對於課程內容有興趣,可以參考底下課程。
- Go 語言基礎實戰 (開發, 測試及部署)
- 一天學會 DevOps 自動化測試及部署
- DOCKER 容器開發部署實戰 (課程剛啟動,限時特價 $900 TWD)
如果需要搭配購買請直接透過 FB 聯絡我,直接匯款(價格再減 100)
使用 GitHub Action 上傳 Image
首先準備用 Go 語言服務來當作範例,底下是 Dockerfile 設定,本篇的程式碼的都可以在這邊找到。
|
|
Docker 詳細的設定方式可以參考此文件
由於我們是拿 docker hub 當作範例,故不需要指定 registry,假設您只要有下 git tag 才做上傳的話,可以使用
其實設定不難,整個過程的 Log 可以看這邊。底下來介紹 Drone 的使用方式
用 Drone 上傳 Docker Image
GitHub Actions 的版本跟 Drone 的 Plugin 共通點都是用 CLI 完成全部指令,也全都用 Go 語言打造,所以設定方式其實蠻雷同的。
|
|
兩邊設定完成後,可以透過兩邊的 Log 方式,為什麼 Drone 只需要不到半分鐘的時間就可以執行完畢,而在 GitHub Actions 則是需要一分鐘以上,原因在於 Drone 支援了 --cache-from
,不了解的可以直接參考『在 docker-in-docker 環境中使用 cache-from 提升編譯速度』,大概的意思就是在 docker build 之前,先把最新版本的 Image 下載下來,這時候在編譯的時候就會找到相同的 docker layer 而進行 Cache 動作。不過別擔心,為了能讓 GitHub Action 享有這個機制,我也發了 PR 來支援此參數,等到官方審核通過就可以使用了。
See also
- 開源專案 Drone CI/CD 平台真的免費嗎?
- Go 1.16 推出 Embedding Files
- 用 Docker 每天自動化備份 MySQL, Postgres 或 MongoDB 並上傳到 AWS S3
- 用 GitHub Actions, Drone CI 或 GitLab CI 部署 AWS Lambda
- 如何將前端網站打包成 Docker Image
- Go 1.15 新增 Module cache 環境變數
- 使用 Docker BuildKit 加速編譯 Image
- 用 GitHub Actions 上傳 Docker Image 到 AWS ECR
- Go Modules 處理 Private GIT Repository 流程
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境