在前一篇文章中,我們成功為 RSS 閱讀器 API 專案建立了一個 dockerfile。今天將會探討如何在 GitHub Actions 的工作流程中發布這個 Docker 映像檔到 GitHub Container Registry。
GitHub Container Registry 是一個或容器映像檔的託管服務,它和 GitHub 平台的其他功能緊密結合。你可以將其視為它就是在做 Docker Hub 想要做到的事。
來開始為我們的 GitHub Actions 配置加入一些內容。開啟專案的.github/workflows/main.yml
,在已有的jobs
下新增一個叫做publish
的job。可以注意到我們從現在開始都是使用 self-hosted
runner 了。
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
# 中略...
publish:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
# 參考 https://github.com/marketplace/actions/docker-login#github-container-registry
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# 參考 https://github.com/marketplace/actions/build-and-push-docker-images
- name: Build and Push
uses: docker/build-push-action@v4
with:
context: .
push: true
platforms: linux/arm64
tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
Check out code: 從 GitHub 中取得 source code。
Log in to GitHub Container Registry: 使用一次性 token 登入到 GitHub Container Registry。這個 token 是執行 workflow 時自動產生的。
Build and Push: 建立Docker image 並推送到GitHub Container Registry。注意,這裡用 ghcr.io/${{ github.repository }}/too-simple-rss-reader:SHA
作為映像檔的名稱和 tag。
push 到 GitHub 上,等不及要看到成功的勾勾了。
...嗯?Error: buildx failed with: ERROR: denied: installation not allowed to Create organization package
?
剛好有人在 GitHub 提到一樣的問題:denied: installation not allowed to Create organization package · Issue #606 · docker/build-push-action (github.com)。
是 GITHUB_TOKEN
權限的問題,要去 repository 的 Settings > Actions > General
調整 Workflow permissions 成 Read and write permissions,也可以在 yaml 檔案指定。
改好後重跑,成功!
今天我們在GitHub Actions中成功地新增了一個自動發布Docker映像檔到GitHub Container Registry。這將有助於我們在後續的工作中更加自動化和簡化部署過程。