Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【后端】使用 GitHub Action 自动推送 Docker 镜像

【后端】使用 GitHub Action 自动推送 Docker 镜像

作者头像
框架师
发布于 2024-11-14 02:06:10
发布于 2024-11-14 02:06:10
52400
代码可运行
举报
文章被收录于专栏:墨白的Java基地墨白的Java基地
运行总次数:0
代码可运行

前言

在本地推送 Docker 镜像至 Docker Hub 时,经常遇到超时问题。为了避免手动操作带来的不便,决定通过 GitHub Actions 实现自动化工作流,轻松将 Docker 镜像推送至 Docker Hub。接下来,我将详细介绍如何配置并使用 GitHub 工作流实现这一过程。

workflows 流程

先来说说 Spring Boot项目打包 成 Docker 镜像,并上传到仓库的流程

  1. 使用 Spring Boot 项目: 传送门
  2. 运行 maven命令 mvn -B clean package --file pom.xml 打包 jar 文件
  3. 运行 docker build 构建 docker 镜像
  4. 使用 docker push 推送 docker 镜像

配置 Docker Hub 认证

为了将镜像推送到 Docker Hub,我们需要进行 Docker Hub 的认证。以下是配置步骤:

  1. 登录 Docker Hub 获取用户名和密码。
  2. 将这些认证信息存储在 GitHub Secrets 中,确保安全性。

创建 GitHub Actions 工作流

  1. 创建工作流目录

在项目根目录下创建 .github/workflows 文件夹。

  1. 配置工作流文件 docker-image.yml

创建一个名为 docker-image.yml 的 GitHub Actions 配置文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: docker-build-push

on:
  push:
    branches:
      # 监听推送到 master 分支
      - "master"
    # 监听以 v 开头的标签
    tags:
      - 'v*'
  pull_request:
    # 监听针对 master 分支的拉取请求
    branches:
      - "master"

jobs:
  build:
    # 使用最新的 Ubuntu 环境
    runs-on: ubuntu-latest

    env:
      # 默认为 Docker Hub,如果使用其他 Docker 注册表,可以修改
      REGISTRY: 'docker.io'
      # 使用 GitHub 仓库名作为镜像名称,格式为 < 账户>/< 仓库>
      # IMAGE_NAME: ${{ github.generator }}
      IMAGE_NAME: mobaijun/generator

    steps:
      # 检出代码
      - name: Checkout code
        # 检出代码,默认会检出整个仓库
        uses: actions/checkout@v3

      # 设置 JDK 11
      - name: Set up JDK 11
        # 设置 Java 版本为 11
        uses: actions/setup-java@v3
        with:
          # Java 版本设置为 11
          java-version: '11'
          # 使用 Temurin 的 JDK 发行版
          distribution: 'temurin'
          # 启用 Maven 缓存,提升构建速度
          cache: maven

      # 使用 Maven 构建项目
      - name: Build with Maven
        # 使用 Maven 清理并构建项目
        run: mvn -B clean package --file pom.xml

      # 构建 Docker 镜像
      - name: Build Docker image
        # 根据 Dockerfile 构建镜像,并标记为 latest
        run: docker build -f ./ballcat-codegen-backend/src/main/resources/docker/Dockerfile . --tag ${{ env.IMAGE_NAME }}:latest

      # 登录到 Docker Hub(或其他 Docker 注册表)
      - name: Log in to Docker Hub
        # 仅在非 PR 事件中执行登录
        if: github.event_name != 'pull_request'
        # 使用 Docker 登录动作
        uses: docker/login-action@v2
        with:
          # 使用自定义的注册表(默认为 Docker Hub)
          registry: ${{ env.REGISTRY }}
          # 从 GitHub Secrets 获取 Docker 用户名
          username: ${{ secrets.DOCKER_USERNAME }}
          # 从 GitHub Secrets 获取 Docker 密码
          password: ${{ secrets.DOCKER_PASSWORD }}

      # 提取 Docker 元数据(标签和标签)
      - name: Extract Docker metadata
        id: meta
        # 使用 Docker metadata-action 提取元数据
        uses: docker/metadata-action@v4
        with:
          # 使用定义的镜像名称
          images: ${{ env.IMAGE_NAME }}
          tags: |
            # 设置最新标签
            type=raw,value=latest,enable={{is_default_branch}}
            # 设置基于标签的标签
            type=ref,enable=true,priority=600,prefix=,suffix=,event=tag

      # 构建并推送 Docker 镜像
      - name: Build and push Docker image
        # 使用 Docker build-push-action 来构建和推送镜像
        uses: docker/build-push-action@v3
        with:
          # Docker 构建上下文为当前目录
          context: .
          # Dockerfile 路径
          file: ./ballcat-codegen-backend/src/main/resources/docker/Dockerfile
          # 如果不是 PR,推送镜像
          push: ${{ github.event_name != 'pull_request' }}
          # 使用提取的标签推送镜像
          tags: ${{ steps.meta.outputs.tags }}
          # 使用提取的标签作为镜像元数据
          labels: ${{ steps.meta.outputs.labels }}
  1. 工作流触发时机
  • Push 到 master 分支 时自动触发工作流。
  • Push 以 v 开头的标签 时触发版本发布。
  • Pull request 针对 master 分支 时,自动触发构建和测试过程。
  1. 登录 Docker Hub

在推送镜像之前,我们需要先登录到 Docker Hub。通过 GitHub Secrets 保护 Docker Hub 的认证信息,确保账号密码安全。

效果展示

当你成功配置并推送到 GitHub 后,每次提交或标签推送都会自动触发工作流,并将构建好的 Docker 镜像上传至 Docker Hub。你可以通过以下图片看到最终的工作流执行结果:

通过这种自动化方式,你可以节省大量的时间和精力,同时确保 Docker 镜像的构建和推送过程完全可重复。快来体验 GitHub Actions 的强大功能吧!

参考文章

利用 GitHub Actions 自动构建项目的 docker 镜像并发布到 DockerHub | 二丫讲梵

巧用 Github Action 自动推送 docker 镜像,白 piao github 服务器资源,还省时又省力_github 系统上传 hub.docker-CSDN 博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Github Action 自动构建并推送 DockerHub
Github Action 这个东西,是小成本和自动化持续集成的福音,如果想要小成本的使用持续集成,省去自己搭建服务器做自动构建,Git Action 就是个好东西。 没有这个的时候,你可以自己加 hook 触发,服务可以自己搭,也可以用第三方的。 Github Action 最好的优执我个人觉得是在白嫖,什么东西不要钱的都是最好的,除了玩游戏。
潇洒
2023/10/20
6010
Github Action 自动构建并推送 DockerHub
通过Github Actions自动化Docker镜像打包和上传
可以了解到docker构建多架构镜像相关的信息和Github Actions的使用
用户6404053
2023/05/17
3.4K0
基于GitHubActions同步Docker镜像实践
GitHub Actions 是 GitHub 推出的一款强大的持续集成和持续部署(CI/CD)工具。它可以帮助开发者在 GitHub 上自动化软件开发生命周期中的各种任务,从而提高开发效率和交付质量。
DevOps云学堂
2024/06/19
2270
基于GitHubActions同步Docker镜像实践
GitHub Actions 自动构建镜像 并发布到 Docker Hub
当 docker-push-release.yml 触发运行时, docker-push-beta 并不会触发运行,(因此不用担心发布release时, 错误push两次)
yiyun
2022/04/01
2.4K0
GitHub Actions 自动构建镜像 并发布到 Docker Hub
完整解析使用 Github Action 构建和发布 Flutter 应用
Github Actions 是 Github 提供的免费自动化构建实现,特别适用于持续集成和持续交付的场景,它具备自动化完成许多不同任务的能力,例如构建、测试和部署等等。
GSYTech
2022/04/02
1.4K0
完整解析使用 Github Action 构建和发布 Flutter 应用
如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
描述: GitHub 操作是一个持续集成和持续交付(CI/CD)平台,可用于自动执行生成、测试和部署管道。Github 您可以创建工作流来构建和测试对存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
全栈工程师修炼指南
2023/10/31
1.7K0
如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库
🐳 从 Flask 项目打包为多平台 Docker 镜像并上传 Docker Hub(含 GitHub Actions)
用户3347017
2025/03/27
1450
使用GitHub Actions编译项目并将Jar发布到Maven Central仓库
在上一篇 GitHub Actions使用入门 文章中,我们了解到了该怎么去启用GitHub Actions功能,本篇文章来介绍下使用GitHub Actions怎么将我们的开源项目自动化构建后发布到Maven Central仓库中。
恒宇少年
2020/08/11
1K0
使用GitHub Actions编译项目并将Jar发布到Maven Central仓库
Argo CD系列视频图文版之Github 实现全自动化 CICD
配套视频 http://mpvideo.qpic.cn/0bc3oiaawaaa7mac2jveojqva4wdbnzaacya.f10002.mp4?dis_k=0377bc3b10a320fa1c
LinuxSuRen
2022/03/31
7950
Argo CD系列视频图文版之Github 实现全自动化 CICD
用GitHub Actions制作Docker镜像
为了确保GitHub上的项目可以顺利制作成镜像并推送到hub.docker.com,您需要做好以下准备:
程序员欣宸
2021/12/07
1K0
用GitHub Actions制作Docker镜像
GitHub Actions,卧槽!牛批!
前段时间我更新了我的分布式爬虫管理框架—— Gerapy(话都说到这儿了打个广告,跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!,哇,哇,就是,哇!)
崔庆才
2019/12/11
1.5K0
如何利用github action实现自动构建、打包部署
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
鳄鱼儿
2024/05/22
1.5K0
如何将你的Python项目全面自动化?
每个项目——无论你是在从事 Web 应用程序、数据科学还是 AI 开发——都可以从配置良好的 CI/CD、Docker 镜像或一些额外的代码质量工具(如 CodeClimate 或 SonarCloud)中获益。所有这些都是本文要讨论的内容,我们将看看如何将它们添加到 Python 项目中!
代码医生工作室
2020/10/23
9780
如何将你的Python项目全面自动化?
GitHub Actions构建Docker镜像
本教程假定您知道docker的工作原理,并有一个使用它的项目。确保您Dockerfile 在项目的根文件夹中。这里使用的示例项目是一个非常基本的项目,只有一个Python文件。完整的代码可以从github仓库中下载。
DevOps云学堂
2020/05/22
2.5K0
GitHub Actions构建Docker镜像
Github Action 补充介绍
补充罗列下其他常用的地方,不得不说设计太精妙了。Github被微软收购后,竟然变更强了。Intel推出的12代酷睿,性能远超mac的m1了,这次没挤牙膏。Wintel的时代没有过去,老当益壮,还可再战。
后端云
2022/04/18
2.1K0
Github Action 补充介绍
Github Actions 还能做这些事
最近公司内部项目的发布流程接入了 GitHub Actions,整个体验过程还是比较美好的;本文主要目的是对于没有还接触过 GitHub Actions的新手,能够利用它快速构建自动测试及打包推送 Docker 镜像等自动化流程。
crossoverJie
2022/10/27
5470
Github Actions 还能做这些事
编写自己的 GitHub Action,体验自动化部署
本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action。
张凯强
2020/02/19
2.3K0
利用 Github Action 一键编译多平台 Docker 镜像
  在技术发展的早期,Java 语言以其“一次编译,随处运行”的特点在众多编程语言中独领风骚。而 Java 语言编译出的 jar 包始终是应用层面上的,如果我们想要运行一个 Web 应用的 jar 包,仍然需要搭建 Tomcat 服务器才能真正运行这个 Java 应用。于是当虚拟化技术出现之后,开始有了同时包含 Tomcat 服务器和 jar 包等其他必要的配置和环境的完整虚拟化镜像。只要在大家的电脑或者服务器上安装了对应的虚拟化软件,运行这个虚拟化镜像就可以看到最终的 Web 界面并正常使用。
zhonger
2022/10/28
2.2K0
利用 Github Action 一键编译多平台 Docker 镜像
GitHub Actions 指南
GitHub Actions 使你可以直接在你的 GitHub 库中创建自定义的工作流,工作流指的就是自动化的流程,比如构建、测试、打包、发布、部署等等,也就是说你可以直接进行 CI(持续集成)和 CD (持续部署)。
凌虚
2020/07/20
1.1K0
聊聊使用Docker自动化构建及部署测试环境
使用Docker实现自动化构建及部署,需要配置GitHub仓库,设置Secrets,编写CI/CD工作流文件,处理构建、测试、推送、部署的各个阶段,最后验证自动化流程是否生效。还有需要考虑到GitHub Actions的YAML文件格式是否正确,命令是否正确,比如在部署阶段使用ssh连接到服务器执行命令是否正确,是否需要安装特定插件或配置免密登录等。
漫谈测试
2025/03/27
1420
聊聊使用Docker自动化构建及部署测试环境
推荐阅读
相关推荐
Github Action 自动构建并推送 DockerHub
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验