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

这篇具有很好参考价值的文章主要介绍了使用 GitHub Action 自动更新 Sealos 集群的应用镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 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 来更新镜像。文章来源地址https://www.toymoban.com/news/detail-711543.html

到了这里,关于使用 GitHub Action 自动更新 Sealos 集群的应用镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • github action初体验实现maven项目自动ci test

    这里是 weihubeats ,觉得文章不错可以关注公众号 小奏技术 ,文章首发。拒绝营销号,拒绝标题党 GitHub Actions是GitHub提供的一种持续集成/持续交付(CI/CD)工具,它可以帮助开发者自动化软件开发流程中的各种任务,如构建、测试、部署等。通过在代码仓库中配置和定义工作流

    2024年01月23日
    浏览(39)
  • github-action+docker实现项目可持续自动化部署

    这篇文章以部署vue3项目和nuxt2项目为例结合 github-action , docker , nginx 等介绍不同的项目自动部署流程 部署vue3项目 步骤: 1、腾讯云开启镜像仓库 2、github配置secrets 3、项目根目录创建dockerfile文件(在action工作流中创建镜像) 4、github配置action工作流(yml文件) 上面步骤执行结

    2024年04月26日
    浏览(42)
  • GitHub Action 通过SSH 自动部署到云服务器上

    准备 正式开始之前,你需要掌握 GitHub Action 的基础语法: workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。 name: 工作流的名称。 on: 指定次工作流的触发器。push 表示只要有人将更改推送到仓库就会触发工作流运行。(点击这里了解如何指定特定分支,路径

    2024年01月19日
    浏览(46)
  • 超简单:github-action自动化发布npm包小记

    打开npm官网,并注册自己的npm账号 1.登录npm官网,登录成功后,点开右上角头像,并点击Access Tokens选项 2.点开Generate New Token下拉框,点击Classic Token(和Granular Access Token有什么区别,请自行查验?) 3.填写token信息,选择token类型为Automation(可以避免2FA校验),保存申请的token信息

    2024年02月05日
    浏览(38)
  • 【Github-Action】自动为PR添加修改文件类型的label

    如果你对github-action感兴趣,还可以看这篇文章, 这篇文章教会你如何开发Github Action,并且让你明白它是什么,怎么用,如何做到的。如何开发一个action pr-label自动添加工具,为您添加核心团队提交的标志和修改的文件类型… 可以从的pr列表中一眼辨别哪些是核心团队开发的

    2024年01月25日
    浏览(56)
  • 尝鲜!最新 VitePress 1 版本 + Github action,自动部署个人静态站点 SSG

    今天查看 vue 文档时,刚好看到 vue 官网宣布 VitePress 1 更新了: 然后在路上走着走着,突然想着,也许我可以把我的笔记仓库转换成在线文档(毕竟纯粹的 md 笔记,喜欢的人不多)。 同时,由于我很久之前有过这 vuepress 的使用经验,而且前段时间又复习了一下 github action,

    2024年04月08日
    浏览(55)
  • 浅谈sealos及使用sealos4.0部署Kubernetes(K8s)高可用集群

    sealos 是以kubernetes为内核的云操作系统发行版 早期单机操作系统也是分层架构,后来才演变成 linux windows这种内核架构,云操作系统从容器诞生之日起分层架构被击穿,未来也会朝着高内聚的\\\"云内核\\\"架构迁移 从现在开始,把你数据中心所有机器想象成一台\\\"抽象\\\"的超级计算机

    2024年02月07日
    浏览(48)
  • Django实现接口自动化平台(十)自定义action names【持续更新中】

    相关文章: Django实现接口自动化平台(九)环境envs序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 深入理解DRF中的Mixin类_做测试的喵酱的博客-CSDN博客  python中Mixin类的使用_做测试的喵酱的博客-CSDN博客  本章是项目的一个分解,查看本章内容时,要结合整体项

    2024年02月16日
    浏览(59)
  • GitHub Action 使用

    GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中

    2024年02月07日
    浏览(72)
  • 【版本控制】GitHub图床服务Action---自动监视图床仓库的目录下的文件数

    最近突然想起年前图床仓库发生的一个遗留问题:由于我的网络图床服务是 Github + Typora 的形式,本地的图片会自动转义成网络图片并存储在图床仓库下,一般我们会指定一个目录进行图片存储,但是由于GitHub设定的单个目录最大存储文件数不能超过1000. 所以在注意到这件事

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包