Skip to content

[Gitlab] CI Runner - 將 Docker Image Push 到 Remote Private Docker Repo #39

@jimliu7434

Description

@jimliu7434

進階案例
build docker images & push them to remote repo


#38 的案例
image build 完直接在本機上進行部署
此情況適用於 runner 本身就在 production server machine 上的情況

如果 build image 後,想要先將 image 存在某個站點
等待某一台主機執行 deploy
請參考以下範例


首先需自行建置一套 Private Docker Repo
參考 https://philipzheng.gitbook.io/docker_practice/repository/local_repo

Pipeline 這一端
執行 docker build 完成後
執行 docker push 推送到指定的 remote repo

docker push 會將讀取 image 的三段式 tag name 的第一段
ex: remote_repo:5000/project_name/image_name:ver.123 將會把指定的 image 推送到 https://remote_repo:5000/
所以首先需要將 image 命名為三段式命名方式

此處我們可以搭配 Gitlab Variable 設定部分參數,方便隨時調整
(可以至 Settings > CI/CD > Variables 進行設定)

$DOCKERREPO_HOST=10.1.1.1:5000
$IMAGE_NAME=tgbot/bot
$CI_COMMIT_TAG=1.0.1

.gitlab-ci.yml example

publish:
  stage: build
  cache: {}
  tags:
    - deploy
  image: docker
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    IMAGE_FULLNAME: "$DOCKERREPO_HOST/$IMAGE_NAME:$CI_COMMIT_TAG"
  services:
    - docker:dind
  script:
    - echo "building image - $IMAGE_FULLNAME"
    - docker build -t $IMAGE_FULLNAME .
    - echo "pushing image - $IMAGE_FULLNAME"
    - docker push $IMAGE_FULLNAME
  after_script:
    - docker rmi $IMAGE_FULLNAME
    - docker images | grep "$IMAGE_NAME"
  only:
    - tags

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions