透過Gitlab CI將私有docker image後發布至Gitlab Registry
2022/04/26
建立deploy token
首先要建立一個deploy token
提供後續給gitlab-ci的job
在執行docker push的gitlab registry權限
前往group或專案設定的Settings > Repository Settings頁面
並使用Deploy Token區塊設定
這邊必須選取read_registry和write_registry權限
並且要設定username並做好保留
設定好建立後必須自行保留deploy token(之後無法再次取得)
透過CI/CD variables設定dpeloy token
由於deploy token算是敏感資料
不應該直接寫進.gitlab-ci.yml中
因此在執行打包之前
必須前往設定group或專案的Settings > CI/CD頁面(設定group的話每個底下的project就都可以使用,僅須設定一次)
設定Variables區塊
這邊定義一個GITLAB_REGISTRY_PASSWORD變數
Protect variable就依照實際需求看需不需要選取(在protected branch或tag才會生效)
設定gitlab-ci.yml
image: docker
services:
- docker:dind # docker in docker
variables:
CI_IMAGE: $CI_REGISTRY_IMAGE:latest # 設定docker image name
GITLAB_REGISTRY_USERNAME: ciao-docker-test # 前面設定deploy token的username
build:
stage: build
# 這邊設定僅在git commit message或git tag還有"build-image"字串的時候執行docker build的job
only:
variables:
- $CI_COMMIT_MESSAGE =~ /build-image/
- $CI_COMMIT_TAG =~ /build-image/
# 進行docker login取得授權($GITLAB_REGISTRY_PASSWORD來自外部專案設定)
before_script:
- docker login $CI_REGISTRY -u $GITLAB_REGISTRY_USERNAME -p $GITLAB_REGISTRY_PASSWORD
script:
- docker build -t $CI_IMAGE .
- docker push $CI_IMAGE
開始透過Gitlab CI執行docker build
建立一個含有build-image字串的tag並push到gitlab上
git tag build-image/2022/04/28/001
git push origin build-image/2022/04/28/001
接著進入CI/CD的Jobs頁面查看執行的job
就會看到依照gitlab-ci.yml依序執行docker login、docker build、docker push等動作
前往Gitlab Registry確認image
前往gitlab的Container Registry
看到剛才建立的image
即代表成功!
其他補充
一個專案內的Container Registry儲存多個image
以上面實做為例
可將$CI_REGISTRY_IMAGE:latest
改為$CI_REGISTRY_IMAGE/image1:latest及$CI_REGISTRY_IMAGE/image2:latest
將一次儲存多個image