-
Notifications
You must be signed in to change notification settings - Fork 8
20190907_upload docker image to github registry using drone
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 的 Beta 邀請函來開始試用 GitHub Package Registry 相關功能,從說明文件可以知道目前 Registry 支援了好幾種 Package 像是 npm, gem, docker, mvn 及 nuget,這篇主要跟大家介紹如何用 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 教學系列
- Go 語言實戰課程: http://bit.ly/golang-2019
- Drone CI/CD 自動化課程: http://bit.ly/drone-2019
$ 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
來登入試試看
從 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
設定完成,就可以正確部署了。
-
Ansible 設定 Google Container Registry 搭配 Drone 自動上傳 (0)
-
在 docker-in-docker 環境中使用 cache-from 提升編譯速度 (5)
-
10 分鐘內用 Traefik 架設 Drone 搭配 GitHub 服務 (0)
-
Drone 支援單機版安裝 (內附影片) (0)
-
Drone CI/CD 系統簡介 (0)
-
用 Traefik 搭配 Docker 快速架設服務 (1)
-
Cronjob 搭配 Drone 服務 (1)
-
有效率的用 jsonnet 撰寫 Drone CI/CD 設定檔 (12)
-
Drone 搭配 Kubernetes 部署 Go 語言項目 (0)
-
用 10 分鐘安裝好 Drone 搭配 GitLab (0)