前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【后端】使用 GitHub Action 自动推送 Docker 镜像

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

作者头像
框架师
发布2024-11-14 10:06:10
发布2024-11-14 10:06:10
39300
代码可运行
举报
文章被收录于专栏:墨白的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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • workflows 流程
  • 配置 Docker Hub 认证
  • 创建 GitHub Actions 工作流
  • 效果展示
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档