前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gitlab CI/CD 实践五:基础镜像 Dcokerfile 仓库 CI 流水线配置

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

作者头像
Yuyy
发布2022-09-21 10:27:40
1K0
发布2022-09-21 10:27:40
举报
文章被收录于专栏:yuyy.info技术专栏

基础镜像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,否则流水线无法正常工作。

如何实现

仓库结构

代码语言:javascript
复制
.
├── 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

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-6-10 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础镜像Dcokerfile集中管理
    • 优点
    • 如何使用
    • 如何实现
      • 仓库结构
        • .gitlab-ci.yml
          • build-image.sh
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档