Gitlab CI/CD 实践五:基础镜像 Dcokerfile 仓库 CI 流水线配置

基础镜像Dcokerfile集中管理

优点

  • 结合Gitlab CI,可以快速便捷地新建和更新镜像。
  • 可以快速找到镜像对应的 Dockerfile,明确镜像的具体组成,避免重复造轮子。
  • 基于Dockerfile,方便对镜像进行扩展。

如何使用

  1. 创建、修改Dockerfile文件,提交到仓库,就会触发 Gitlab 流水线,自动构建镜像并上传到Harbor。
  2. 此仓库单分支管理,可直接在main分支上提交。
  3. 项目结构,拿golang基础镜像举例:common/golang/1.17.9/Dockerfile
    1. 第一级目录对应harbor的项目。
    2. 第二级目录为镜像名称。
    3. 第三级目录为镜像版本。
    4. 在第三级目录下存放镜像的DockerfileREADME.md(非必要)以及打镜像所需的文件。
  4. 请严格按照上诉项目结构存放Dockerfile,否则流水线无法正常工作。

如何实现

仓库结构

.
├── build-image.sh
├── cloud
│   └── xx-service-base
│       └── v1.3
│           ├── Dockerfile
│           └── xx-service-base-requirements.txt
├── common
│   ├── alpine-timezone-shanghai
│   │   └── 3.11.3
│   │       └── Dockerfile
│   ├── docker-alpine
│   │   └── 3.16.0
│   │       ├── Dockerfile
│   │       └── README.md
│   ├── golang
│   │   └── 1.17.9
│   │       ├── Dockerfile
│   │       └── README.md
│   ├── kubectl
│   │   └── 1.19.10
│   │       └── Dockerfile
│   ├── node-nginx
│   │   └── 10.9.0-alpine
│   │       └── Dockerfile
│   └── openjdk
│       └── 8-alpine
│           └── Dockerfile
├── devops
│   └── startup-script
│       └── v1
│           ├── Dockerfile
│           ├── manage-startup-script.sh
│           └── startup-script.yml
└── README.md

.gitlab-ci.yml

stages:
  - build

build_image:
  stage: build
  tags:
    - 172.x.x.x-runner
  image: 172.x.x.x/common/docker-alpine:latest
  script:
    - chmod +x ./build-image.sh && ./build-image.sh
  • 每次commit都会触发流水线

build-image.sh

#!/bin/bash

docker login "${DOCKER_REGISTRY_SERVER}" --username "${DOCKER_REGISTRY_USER}" --password "${DOCKER_REGISTRY_PASSWORD}"
FILES=$(git diff --name-only --diff-filter=d HEAD^ HEAD | grep Dockerfile | sort)
if [ ${#FILES[*]} -eq 0 ]; then
  echo "No Dockerfile changed, skip build image"
  exit 0
fi
for FILE in $FILES; do
  DIR=$(dirname "$FILE")
  echo "DIR: $DIR"
  cd $DIR
  VERSION=${DIR##*/}
  echo "VERSION: $VERSION"
  IMAGE_NAME=${DIR%/*}
  echo "IMAGE_NAME: $IMAGE_NAME"
  docker build -t $IMAGE_NAME:$VERSION .
  docker tag "$IMAGE_NAME:$VERSION" "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:$VERSION"
  docker tag "$IMAGE_NAME:$VERSION" "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:latest"
  docker push "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:$VERSION"
  docker push "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:latest"
  docker rmi -f "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:$VERSION"
  docker rmi -f "${DOCKER_REGISTRY_ADDR}/$IMAGE_NAME:latest"
  docker rmi -f "$IMAGE_NAME:$VERSION"
  cd -
done

评论

  1. rantrism
    Windows Chrome 102.0.0.0
    1周前
    2022-6-22 10:04:45

    您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
    作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。

  2. Yuyy
    博主
    Linux Chrome 101.0.0.0
    6天前
    2022-6-24 11:43:10

    我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=ds11aka0db0v

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇