使用 GitHub Action 自动更新 Sealos 集群的应用镜像

使用,github,action,自动更新,sealos,集群,应用,镜像 · 浏览次数 : 7

小编点评

**GitHub Actions 工作流构建和更新 Sealos 应用镜像** **1. 设置 kubeconfig** ```yaml KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} ``` **2. 创建工作流** ```yaml name: Build and Push Docker Image on: workflow_dispatch: ``` **3. 定义工作流任务** ```yaml build-image: runs: ubuntu-latest if: github.repository == '<your_repository>' steps: - name: Checkout code uses: actions/checkout@v3 with: args: roll steps: - name: Checkout code uses: actions/checkout@v3 with: args: my-repo ``` **4. 创建 Deployment** ```yaml deploy: needs: build-image runs-on: ubuntu-latest if: github.repository == '<your_repository>' steps: - name: Build image uses: actions/checkout@v3 with: args: roll - name: Deploy Deployment steps: - name: Create Deployment uses: actions/deployment@v3 with: name: my-deployment image: my-repo/my-image:<tag> ``` **5. 使用 kubectl 更新镜像** ```yaml with: args: set image deployment/my-deployment my-container=my-repo/my-image:<tag> ``` **6. 定时触发工作流** ```yaml schedule: on: workflow_dispatch: ``` **7. 监控镜像更新** ```yaml if: github.repository == '<your_repository>' steps: - name: Check for image update uses: actions/checkout@v3 with: args: my-deployment steps: - name: Update image if updated uses: actions/checkout@v3 with: args: my-deployment ```

正文

在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点,本文将介绍如何利用 GitHub Action 来进一步丰富 Sealos 在应用更新方面的自动化体验

原文链接:https://forum.laf.run/d/1059

GitHub Action 介绍

在现代软件开发中,持续集成 (CI) 和持续部署/交付 (CD) 是至关重要的环节。它们可以帮助开发团队高效地验证代码的质量并确保其准确无误地交付到生产环境中。GitHub Action 正是在这个背景下诞生的 CI/CD 工具,致力于为开发者提供一种简洁且高效的自动化工具。

简单来说,GitHub Action 是一个 CI/CD 工具,它允许开发者在 GitHub 仓库中自动执行多种任务,从而极大地提高了工作效率。它可以自动进行代码的构建、测试和部署等关键步骤,确保在每次代码更新或合并请求中都能够进行快速而准确的验证和交付。

但 GitHub Action 不仅仅是一个传统的 CI/CD 工具。其独特之处在于,它与 GitHub 仓库实现了无缝集成。这意味着开发者无需离开 GitHub 环境,就能够配置和管理整个自动化流程,极大地简化了操作过程。此外,由于 GitHub 是目前世界上最大的代码托管平台,这种深度整合使得大量开发者能够轻松上手并利用 GitHub Action 进行自动化操作。

Sealos:同时面向初学者与专家

Sealos 的可视化桌面环境极大简化了用户对分布式应用的管理和维护,用户不再需要进行复杂的操作或拥有深厚的技术背景就能轻松管理分布式应用。通过减少复杂性和提供直观的界面,Sealos 显著地降低了用户的心智负担,使其可以更加集中地完成工作。

Sealos 海外集群:https://cloud.sealos.io

Sealos 国内集群:https://cloud.sealos.top

但 Sealos 不仅仅适用于普通用户,对于云原生领域的专业人员,提供了终端,您可以在终端中执行各种命令行操作。

同时还提供了 kubeconfig 文件的下载功能。拥有这个文件,专业人员可以将其下载到本地电脑,并使用 kubectl 命令行工具来直接管理和操作 Sealos 中的应用资源。这为那些希望深入管理和配置的云原生专家们提供了极大的灵活性。

有了 kubeconfig 之后,我们可以用来实现各种神奇的功能,比如本文将要介绍的自动更新应用镜像

GitHub Action 自动构建镜像

对于自己开发的应用,要想自动更新应用的镜像,前提是得先自动构建镜像。

GitHub Action 完美集成在 GitHub 平台上,无需额外配置或切换到其他平台即可基于源码来构建镜像。对于公开的仓库,GitHub 提供了一定的免费计算额度,适合小型项目或个人开发者。

使用 GitHub Action 自动构建并推送镜像的流程如下:

  1. 创建工作流文件:在你的 GitHub 仓库中创建一个 .github/workflows 目录,并在该目录下创建一个工作流配置文件,例如 docker_build.yml

  2. 配置 Secret:为了安全地推送镜像到 Docker Hub 和 ghcr.io,你需要在 GitHub 仓库的 "Secrets" 部分配置相应的认证信息。通常,这包括你的 Docker Hub 用户名、密码,以及 ghcr.io 的 token。例如:

  3. 编写工作流脚本:在配置文件中,定义所需的触发条件(如 pushmaster 分支)、运行环境以及执行的命令。

    示例:

    # 定义工作流的名称
    name: Build and Push Docker Image
    
    # 定义触发工作流的条件
    on:
      workflow_dispatch: # 允许手动触发工作流
      push: # 当有代码推送事件发生时
        branches:
          - master # 只有推送到 master 分支时才触发
    
    # 定义工作流的任务
    jobs:
      build-image:
        # 定义运行此任务的环境:最新版本的 ubuntu
        runs-on: ubuntu-latest
    
        # 定义任务中的步骤
        steps:
          # 检出代码。只检出最新的1次提交
          - uses: actions/checkout@v3
            with:
              fetch-depth: 1
    
          # 设置 QEMU 模拟器,这通常用于多平台的 Docker 构建
          - name: Set up QEMU
            uses: docker/setup-qemu-action@v2
    
          # 设置 Docker Buildx,用于构建多平台的 Docker 镜像
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v2
    
          # 登录到 Docker Hub
          - name: Login to DockerHub
            uses: docker/login-action@v2
            with:
              username: ${{ secrets.DOCKER_USERNAME }} # 使用存储在 GitHub Secrets 中的 DockerHub 用户名
              password: ${{ secrets.DOCKER_PASSWORD }} # 使用存储在 GitHub Secrets 中的 DockerHub 密码
    
          # 登录到 ghcr.io (GitHub Container Registry)
          - name: Login to ghcr.io
            uses: docker/login-action@v2
            with:
              registry: ghcr.io
              username: ${{ github.repository_owner }} # 使用仓库的拥有者名作为用户名
              password: ${{ secrets.GHCR_TOKEN }} # 使用存储在 GitHub Secrets 中的 ghcr.io 的访问令牌
    
          # 构建并推送 Docker 镜像到 docker.io 和 ghcr.io
          - name: Build and push Docker images to docker.io and ghcr.io
            uses: docker/build-push-action@v2
            with:
              platforms: linux/amd64 # 设置构建平台为 linux/amd64
              context: . # Docker 构建上下文设置为当前目录
              push: true # 设置为真以确保构建后的镜像被推送
              tags: | # 定义推送的标签
                ${{ secrets.DOCKER_USERNAME }}/xxxx:latest
                ghcr.io/${{ github.repository_owner }}/xxxx:latest
    
  4. 触发工作流:每当符合触发条件的事件发生时,GitHub Action 就会自动执行定义的工作流,从而构建和推送 Docker 镜像。

  5. 监控与调试:你可以在 GitHub 仓库的 "Actions" 标签页中,查看工作流的执行情况,包括日志、状态和结果。

使用 GitHub Action 自动构建镜像不仅可以简化开发流程,还可以确保每次代码的更改都得到了有效且一致的处理,大大提高了开发效率和代码质量。同时通过使用 GitHub 的 secrets 功能,还确保了认证信息的安全。

自动更新 Sealos 应用镜像

现在我们来到了最后一步。要想自动更新镜像,首先我们来回顾一下整个流程:

首先,当你的应用代码更新并合并到主分支时,GitHub Action 会自动触发构建镜像的任务。构建完成后,新的应用镜像会被推送到镜像仓库。

接下来,你需要在 GitHub Action 中调用 kubectl,更新 Sealos 集群中对应的 Deployment 或 StatefulSet。这样,Sealos 集群的应用就会使用新的镜像版本进行滚动更新。

我们可以利用一个特定的 GitHub Action:actions-hub/kubectl。这个 Action 提供了在 GitHub Actions 工作流中执行 kubectl 命令的能力。

以下是如何在你的 GitHub Actions 工作流中使用 actions-hub/kubectl 来更新 Sealos 应用镜像:

设置 kubeconfig

为了让 kubectl 能够与你的 Sealos 或其他 Kubernetes 集群进行通信,你需要提供一个有效的 Kubeconfig,Sealos 的 kubeconfig 可以在桌面中下载。

下载完成后,你需要将其中的内容转换为 base64 格式:

$ cat kubeconfig.yaml | base64

然后将转换后的内容存储到 GitHub 仓库的 Secret 中,假设 Secret 名为 KUBE_CONFIG 。Secret 配置方式参考上文。

使用 actions-hub/kubectl

现在您只需要在前面自动构建镜像的工作流脚本中添加一个新的 job 来调用 kubectl 即可。例如:

# 定义工作流的名称
name: Build and Push Docker Image

# 定义触发工作流的条件
on:
  workflow_dispatch: # 允许手动触发工作流
  push: # 当有代码推送事件发生时
    branches:
      - master # 只有推送到 master 分支时才触发

# 定义工作流的任务
jobs:
  build-image:
  ...
  ...
  deploy:
    needs: build-image
    runs-on: ubuntu-latest
    if: github.repository == '<your_repository>'
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - uses: actions-hub/kubectl@master
        env:
          KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
        with:
          args: rollout restart deployment my-deployment

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,更新的方法非常简单:直接滚动重启。因为 Deployment 的 imagePullPolicy 默认都是 Always,且镜像 tag 保持 latest 不变,所以直接重启就会拉取最新的镜像。

如果您的镜像每次构建的 tag 都不同,那可以使用这个命令来更新镜像:

...
        with:
          args: set image deployment/my-deployment my-container=my-repo/my-image:<tag>

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,将 my-container 的镜像设置为 my-repo/my-image:<tag>。其中 tag 可以通过环境变量的形式从构建镜像的 job 中获取

如果您的应用不是自己开发的,且这个应用已提供了镜像,那么您可以设计一个定时触发的工作流,工作流的任务是检测镜像仓库(例如 Docker Hub)的镜像有没有更新,如果更新了,就调用 kubectl 来更新镜像。

与使用 GitHub Action 自动更新 Sealos 集群的应用镜像相似的内容:

使用 GitHub Action 自动更新 Sealos 集群的应用镜像

在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点,本文将介绍如何利用 GitHub Action 来进一步丰富 Sealos

使用Github Action来辅助项目管理

Github action 是一个Github官方提供的非常流行且速度集成 持续集成和持续交付(CI/CD)的工具。它允许你在GitHub仓库中自动化、定制和执行你的软件开发工作流。你可以发现、创建和分享用于执行任何你想要的工作的操作,包括CI/CD,并在完全定制的工作流中组合操作。 持续集成需要做

04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)

本文将分享使用 GitHub Actions 完成对一个.Net Core+Vue 的前后端分离项目 zhontai 的构建,并使用 docker 部署到云服务器(阿里云),及对docker部署.Net Core+Vue的一些经验分享。

【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案

问题描述 在使用 Github Action - Azure/login@v1 的插件时候,登录中国区Azure遇见了问题。 Login YAML 内容: - name: 'Login via Azure CLI' uses: Azure/login@v1.4.6 with: creds: ${{

【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image

问题描述 使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程记录。 操作步骤 第一步: 准备Function的镜像文件 如在VS Code中,通过Termina

【好玩】如何在github主页放一条贪吃蛇

本文通过github主页加入提交记录贪吃蛇为引,拓展分析了如何在github设置主页,并将提交记录生成贪吃蛇动画,以及github中action使用及如何运行workflow等。

使用rem、动态vh自适应移动端

前言 这是我的 模仿抖音 系列文章的第六篇 第一篇:200行代码实现类似Swiper.js的轮播组件 第二篇:实现抖音 “视频无限滑动“效果 第三篇:Vue 路由使用介绍以及添加转场动画 第四篇:Vue 有条件路由缓存,就像传统新闻网站一样 第五篇:Github Actions 部署 Pages、同

Github Fork仓库的冲突与同步管理

在使用Github进行协作开发时,fork一个仓库并在本地进行开发是常见的工作流程。然而,当源仓库(上游仓库)有了更新时,如何同步这些更新并解决可能的合并冲突是一个关键问题。本文将详细介绍如何管理这些操作。 步骤一:Fork并克隆仓库 首先,fork你感兴趣的源仓库,并将其克隆到本地: git cl

【译】使用 GitHub Copilot 作为你的编码 GPS

GitHub Copilot 是一个改变游戏规则的人工智能助手,可以彻底改变您在 Visual Studio 中的编码流程。在我们的视频系列中,Bruno Capuano 探讨了这个智能编码伙伴如何帮助您更有效地编写代码,同时保持质量和准确性。 Copilot:是助手,而不是替代品 Bruno 强调

五分钟教你使用GitHub寻找优质项目

前言 经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项目。GitHub作为世界上最大的项目开源平台之一,上面有着无数优质的开源项目。善于使用它能够让你获得很多意想不到的惊喜。 首先解决访问慢的问题 FastGithub是GitH