很高興收到 GitHub 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvn 及 nuget,這篇主要跟大家介紹如何用 Drone 快速串接 CI/CD 流程的『自動上傳 Docker Image 到 GitHub Registry』,底下來看看如何使用 GitHub 提供的 Docker Registry。
教學影片
更多實戰影片可以參考我的 Udemy 教學系列
- Go 語言實戰課程: http://bit.ly/golang-2019
- Drone CI/CD 自動化課程: http://bit.ly/drone-2019
GitHub 認證
$ docker login docker.pkg.github.com -u USERNAME -p PASSWORD/TOKEN
要登入 GitHub 的 Docker Registry,最快的方式就是用個人的帳號及密碼就可以直接登入,而 Registry 設定則是 docker.pkg.github.com
,這邊請注意,雖然官方有寫可以用個人的 Password 登入,如果你有使用 OTP 方式登入,這個方式就不適用,也不安全,我個人強烈建議去後台建立一把專屬的 Token。
其中 read:packages
and write:packages
兩個 scope 請務必勾選,如果是 private 的 repo,再把 repo
選項打勾,這樣就可以拿到一把 token 當作是密碼,你可以透過 docker login
來登入試試看
串接 Drone CI/CD
從 commit 到自動化上傳 Docker Image 可以透過 Drone 快速完成,底下我們先建立 Dockerfile
FROM plugins/base:multiarch
LABEL maintainer="Bo-Yi Wu <appleboy.tw@gmail.com>" \
org.label-schema.name="Drone Workshop" \
org.label-schema.vendor="Bo-Yi Wu" \
org.label-schema.schema-version="1.0"
ADD release/linux/amd64/helloworld /bin/
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "/bin/helloworld", "-ping" ]
ENTRYPOINT ["/bin/helloworld"]
接著透過 Drone 官方 docker 套件來完成自動化上傳
kind: pipeline
name: default
steps:
- name: build
image: golang:1.13
commands:
- make build_linux_amd64
- name: docker
image: plugins/docker
settings:
registry: docker.pkg.github.com
repo: docker.pkg.github.com/appleboy/test/demo
auto_tag: true
auto_tag_suffix: linux-amd64
username: appleboy
password:
from_secret: docker_password
比較需要注意的是 GitHub 跟 DockerHub 不同的是,GitHub 格式是 OWNER/REPOSITORY/IMAGE_NAME
,注意中間有多一個 REPOSITORY
而 DockerHub 是 OWNER/IMAGE_NAME
。接著到後台將 docker_password
設定完成,就可以正確部署了。