最佳实践-使用Github Actions来构建跨平台容器镜像

这篇具有很好参考价值的文章主要介绍了最佳实践-使用Github Actions来构建跨平台容器镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

前言

最近在写K8s的相关系列文章,因为有涉及到镜像构建,发现在Mac m1的Arm架构下构建的部分镜像,没法在X86架构下使用,不兼容。

尝试网上介绍的各种方式,都已失败告终,效果如下:

最终还是GithubActions拯救了我,下面介绍一下Actions用法,希望对你有帮助。

概述

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

GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。

以上是GitHub的官方介绍,其实就是有一个类似于Jenkinspipeline,支持手动或者代码等方式触发,支持pipeline运行在 Linux、Windows 和 macOS等虚拟机中,下面是一个示意图

GitHub的pipeline使用yaml进行维护,同时内置了很多现成的组件,拿来即用,下面就以具体的一个实例进行介绍,如何使用

我们将做什么?

我们会构建一个前端工程的docker镜像,并推送此镜像至DockerHub仓库,同时在k8s中拉取并运行验证

1. 创建一个前端项目

工程已经创建好,地址:https://github.com/dongweizhao/frontend

其中为了方便部署,前端资源都存放在工程的dist目录

2. 编写Dockerfile

引用nginx镜像,同时拷贝dist目录下资源值容器的/frontend,同时拷贝nginx.conf覆盖nginx镜像默认的配置文件,以下文件工程中都已经涵盖
nginx.conf

server{
    listen 80;
    server_name localhost;
     root  /frontend;
     index index.html index.htm;

     location /login {
             try_files $uri $uri/ /login.html;
     }
}

Dockerfile

from nginx
copy ./dist /frontend
run chown nginx.nginx /frontend -R
copy nginx.conf /etc/nginx/conf.d/default.conf

3. Actions配置

配置DockerHub账号密码


点击New repository secret按钮,创建对应的变量。

例如,我要创建DOCKER_HUB_USERNAME变量,值为root,配置如下:


创建worfkflow文件
点击Actions

Actions内置了很多模版,拿过来配置下即可,这里我们用Publish Docker Container,选择其他也行,最终改成以下下文件

#workflow名称
name: ci
# 触发条件
on:
#github页面手动触发
  workflow_dispatch: 
#打tag触发,必须是v开头的
  push:
    tags:
      - "v*.*"
#变量配置      
env:
  #镜像名称
  IMAGE_NAME: frontend
  #dockerHub仓库名称
  DOCKER_REGISTRY: dweizhao
jobs:
  build-image:
    #运行的环境  
    runs-on: ubuntu-latest
    env:
      TZ: Asia/Shanghai
    outputs:
      tags: ${{ steps.output-id.outputs.v }}
    steps:
      # 拉取代码,同时获取tag,如果获取不到则默认值为edge,并赋值给v变量
      - uses: actions/checkout@v3
      - id: output-id
        run: |
          VERSION=edge
          if [[ $GITHUB_REF == refs/tags/* ]]; then
            VERSION=${GITHUB_REF#refs/tags/v}
          fi
          echo "v=${VERSION}" >> $GITHUB_OUTPUT
     # Docker配置多平台环境
      - name: Set up Docker BuildX
        uses: docker/setup-buildx-action@v2          
      # 登录镜像仓库
      - name: Login Docker Hub
        uses: docker/login-action@v1
        with:
        #这里引用的变量为上一步配置的变量
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PWD }}     
      # 打包构建并推送
      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          file: ./Dockerfile
          platforms: |
            linux/amd64
            linux/arm64
          #推送到镜像仓库  
          push: true
          # 这里会构建两个版本镜像,
          # 1.dweizhao/backend:latest
          # 2.  output-id步骤中获取的v,构建dweizhao/backend:edge或者dweizhao/backend:对应tag值
          tags: |
            ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.output-id.outputs.v }}
            ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest

以上文件创建完成,会在工程目录下创建一个.github的目录,保存有我们配置的文件

同时再次点击Actions按钮会出现,以下界面

这里的ci就是配置的workflow的name名称

4. 镜像构建并发布

我们测试两种方式,分别如下:

手动触发构建

根据箭头表示,点击run wofkflow按钮,执行任务

点击ci可以查看任务执行详情,可以看到任务执行步骤以及对应状态以及相关日志

以上结果表明,执行成功,查看dockerhub镜像仓库,可以看到推送已经成功,由于是手动触发获取不到tag,所以构建了edgetag的镜像

创建tag触发构建
创建了一个v1.0.0

自动触发构建

可以镜像仓库在同一时间,构建了latest1.0.0tag镜像

5. 容器部署验证

下面我们在k8s环境中拉取frontent前端镜像,验证是否部署成功。

我们创建了frontenddeployment,同时指定了镜像为dweizhao/frontend:latest

可以看到镜像启动成功

结论

如果你用的是mac的m系列芯片,可以尝试使用Github Actions来构建你的镜像,前提是你自己的个人项目,Github Actions功能很强大,如果感兴趣可以继续去研究。文章来源地址https://www.toymoban.com/news/detail-747123.html

到了这里,关于最佳实践-使用Github Actions来构建跨平台容器镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Flutter 实战:构建跨平台应用

    Flutter是由Google开发的一款开源移动应用开发框架,它可以帮助开发者在iOS和Android平台上快速、高效地开发应用。Flutter使用Dart语言作为开发语言,具有跨平台兼容性高、开发效率快、性能优异等特点。本文将通过实战案例,介绍如何使用Flutter构建跨平台应用。 在开始Flutte

    2024年02月05日
    浏览(224)
  • Tauri开发的程序,使用github action快速跨平台编译并发布流程,包括Windows、mac、m芯片、linux等,以及常见报错

    Tauri 严重依赖原生库和工具链,因此目前无法在某一平台实现交叉编译。最佳选择是使用托管在 GitHub Action、Azure Pipelines、GitLab 或其他选项上的 CI/CD 管道进行编译。管道可以同时为每个平台运行编译,使编译和发布过程更加容易。 为了便于设置,官方目前提供 Tauri Action。

    2024年02月10日
    浏览(70)
  • Flutter:构建跨平台应用的未来选择

    随着移动设备的普及和技术的不断发展,跨平台移动应用开发成为了一个热门的需求。Flutter作为一款由Google开发的开源移动应用开发框架,受到了越来越多的关注。本文将带你了解Flutter的优势、应用场景以及如何使用Flutter进行开发。 一、Flutter的优势 1.跨平台:Flutter使用

    2024年02月09日
    浏览(69)
  • 如何使用CodeceptJS、Playwright和GitHub Actions构建端到端测试流水线

    介绍 端到端测试是软件开发的一个重要方面,因为它确保系统的所有组件都能正确运行。CodeceptJS是一个高效且强大的端到端自动化框架,与Playwright 结合使用时,它成为自动化Web、移动甚至桌面 (Electron.js) 应用程序比较好用的工具。 在本文中,作者探讨如何使用 CodeceptJS、

    2024年02月05日
    浏览(75)
  • Kotlin MultiPlatform:构建跨平台应用的未来

    1.1 Kotlin MultiPlatform简介 Kotlin MultiPlatform(简称KMP)是一种由JetBrains开发的跨平台开发解决方案,它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建适用于多个平台的应用程序,包括移动应用、后端服务和嵌入式系统等。KMP提供了共享代码的功能,同时也允许开发

    2024年04月17日
    浏览(55)
  • 构建跨设备3D应用:HOOPS的跨平台开发能力

    在当今数字化和可视化需求不断提升的时代,三维技术的应用越来越广泛,尤其在制造、建筑、工程及媒体行业。HOOPS,由Tech Soft 3D开发,是一套全面的软件开发工具包,用于构建高性能的三维应用程序。该工具包涵盖了从三维渲染到复杂数据交换的多个方面,支持广泛的文

    2024年04月25日
    浏览(53)
  • Avalonia学习实践(二)--跨平台支持及发布

    Avalonia主打跨平台,号称一套代码支持Windows, macOS, Linux, iOS, Android操作系统,其基础是基于.NET Standard 2.0的一系列库,也就是只要平台能支持.NET Standard 2.0,就能运行Avalonia开发的应用。然而理想很丰满、现实很骨感,并不是说跨平台Avalonia没有做到,而是过程中免不了会有些小

    2024年02月07日
    浏览(59)
  • 探索 Electron Egg:构建跨平台桌面应用的理想选择

    随着Web技术的不断发展,构建跨平台桌面应用的需求也在逐渐增加。Electron Egg作为一个结合了Electron和Vue.js的框架,为开发者提供了一个简单而强大的工具,使他们能够快速构建出优秀的桌面应用。本文将介绍Electron Egg的核心特性、优势以及如何开始使用这个框架。 什么是

    2024年02月20日
    浏览(68)
  • WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)

    WEB 跨平台 桌面应用程序 顾名思义就是用 JavaScript、HTML、CSS 等前端技术构建跨平台的桌面应用,WEB 负责 GUI 渲染并与后端(如 Node.js、Python、Rust 等)交互,从而突破自身无法操作 OS 层级资源的限制。其实现在如火如荼的 小程序 原理也类似,只是把后端换成宿主 APP (如微信

    2024年02月05日
    浏览(52)
  • Flutter与Android开发:构建跨平台移动应用的新选择

    本文内容提纲如下: 介绍Flutter技术:Flutter是一种由Google推出的开源UI工具包,用于构建高性能、跨平台的移动应用。文章将介绍Flutter的基本概念、特点和优势,包括其快速的开发速度、一致的用户界面和丰富的UI组件库等。 Flutter与Android开发的对比:文章将对比Flutter与传统

    2023年04月21日
    浏览(186)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包