云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
5442 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

17|自动构建:如何使用 GitLab CI 构建镜像?

你好,我是王炜。
在上一节课,我们学习了如何使用 GitHub Action 自动构建镜像,我们通过为示例应用配置 GitHub Action 工作流,实现了自动构建,并将镜像推送到了 Docker Hub 镜像仓库。
但是,要使用 GitHub Action 构建镜像,前提条件是你需要使用 GitHub 作为代码仓库,那么,如果我所在的团队使用的是 GitLab 要怎么做呢?
这节课,我会带你学习如何使用 GitLab CI 来自动构建镜像。我还是以示例应用为例,使用 SaaS 版的 GitLab 从零配置 CI 流水线。
需要注意的是,有些团队是以自托管的方式来使用 GitLab 的,也就是我们常说的私有部署的方式,它和 SaaS 版本的差异不大。如果你用的是私有化部署版本,同样可以按照这节课的流程来实践。

GitLab CI 简介

在正式使用 GitLab CI 之前,你需要先了解一些基本概念,你可以结合下面这张图来理解。
这张图中出现了 Pipeline、Stage 和 Job 这几个概念,接下来我们分别了解一下。

Pipeline

Pipeline 指的是流水线,在 GitLab 中,当有新提交推送到仓库中时,会自动触发流水线。流水线包含一组 Stage 和 Job 的定义,它们负责执行具体的逻辑。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云原生架构与 GitOps 实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Waylon
    stages: - build image: docker:20.10.16 variables: DOCKER_TLS_CERTDIR: "/certs" DOCKERHUB_USERNAME: "lyzhang1999" PLATFORM: "linux/amd64,linux/arm64" services: - docker:20.10.16-dind before_script: - docker buildx create --name builder - docker buildx use builder - docker buildx inspect --bootstrap - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN build_and_push: stage: build script: - - docker buildx build --platform $PLATFORM -t $DOCKERHUB_USERNAME/frontend:$CI_COMMIT_SHORT_SHA ./frontend - docker push $DOCKERHUB_USERNAME/frontend:$CI_COMMIT_SHORT_SHA - docker buildx build --platform $PLATFORM -t $DOCKERHUB_USERNAME/backend:$CI_COMMIT_SHORT_SHA ./backend - docker push $DOCKERHUB_USERNAME/backend:$CI_COMMIT_SHORT_SHA

    作者回复: 正确👍🏻,使用了变量和 before_script,非常棒的例子!

    归属地:上海
    2
    6
  • ghostwritten
    遇到两个问题不过解决了: $ docker buildx create --name builder error: could not create a builder instance with TLS data loaded from environment. Please use `docker context create <context-name>` to create a context for current environment and then create a builder instance with `docker buildx create <context-name>` Cleaning up project directory and file based variables 00:01 ERROR: Job failed: exit code 1 $ docker push $DOCKERHUB_USERNAME/frontend:$CI_COMMIT_SHORT_SHA The push refers to repository [docker.io/ghostwritten/frontend] An image does not exist locally with the tag: ghostwritten/frontend Cleaning up project directory and file based variables 00:01 ERROR: Job failed: exit code 1 这是我的.gitlab-ci.yaml: stages: - build image: docker:20.10.16 variables: DOCKER_TLS_CERTDIR: "/certs" DOCKERHUB_USERNAME: "ghostwritten" PLATFORM: "linux/amd64,linux/arm64" services: - docker:20.10.16-dind before_script: - docker context create builder - docker buildx create --name builder --use builder - docker buildx use builder - docker buildx inspect --bootstrap - docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN build_and_push: stage: build script: - docker buildx build --platform $PLATFORM -t $DOCKERHUB_USERNAME/frontend:$CI_COMMIT_SHORT_SHA ./frontend --push - docker buildx build --platform $PLATFORM -t $DOCKERHUB_USERNAME/backend:$CI_COMMIT_SHORT_SHA ./backend --push

    作者回复: 👍🏻

    归属地:美国
    2
  • Jich
    私有化部署的gitlab执行CI需要先安装个runner的吧

    作者回复: 是的,私有化部署的 GitLab 需要先配置好 runner。

    归属地:上海
    2
  • Promise
    老师怎么使用DinD的方式来进行CI呀。能不能有一篇文章或者教程专门讲一下使用DinD来构建镜像

    作者回复: 下一节课马上会讲到如何用 Tekton 构建镜像,也就是直接在 K8s 集群中通过 DinD 的方式来构建镜像。

    归属地:浙江
    2
  • 那风在极客
    DIND 不是被弃用了吗?

    作者回复: 安全扫描弃用了 DinD 的方式,CI/CD 使用 DinD 的方式运行仍然是官方推荐的方式之一。

    归属地:广东
    1
  • Geek_64f925
    私有化部署中,如果gitlab-runner 是跑在k8s 上的,那么1.24以及以上版本应该不能使用DinD了,有什么好的解决方案吗?

    作者回复: 可以考虑在容器通过 buildkit 命令行工具来构建。

    归属地:广东
  • 无名无姓
    .gitlab-ci.yml :这个文件是自动生成的么

    作者回复: 需要自己创建,为了方便大家参考,示例应用里已经包含这个文件了,你可以先删除掉,然后再进行实践。

    归属地:北京
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部