Skip to content

20190907_upload docker image to github registry using drone

Shawn Wang edited this page Dec 3, 2019 · 1 revision

title: "用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry" date: 2019-09-07 type: blog author: AppleBoy link: https://blog.wu-boy.com/2019/09/upload-docker-image-to-github-registry-using-drone/ layout: post comments: true

github

很高興收到 GitHub 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvnnuget,這篇主要跟大家介紹如何用 Drone 快速串接 CI/CD 流程的『自動上傳 Docker Image 到 GitHub Registry』,底下來看看如何使用 GitHub 提供的 Docker Registry。

教學影片

<iframe width="560" height="315" src="https://www.youtube.com/embed/2MgV6NKeeJU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

更多實戰影片可以參考我的 Udemy 教學系列

GitHub 認證

$ docker login docker.pkg.github.com \
  -u USERNAME \
  -p PASSWORD/TOKEN

要登入 GitHub 的 Docker Registry,最快的方式就是用個人的帳號及密碼就可以直接登入,而 Registry 設定則是 docker.pkg.github.com,這邊請注意,雖然官方有寫可以用個人的 Password 登入,如果你有使用 OTP 方式登入,這個方式就不適用,也不安全,我個人強烈建議去後台建立一把專屬的 Token。

Personal 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 <[email protected]>"
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 設定完成,就可以正確部署了。

Clone this wiki locally