最佳实践 - 使用 Github Actions 来构建跨平台容器镜像
概述
GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。
GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。
以上是 GitHub 的官方介绍,其实就是有一个类似于Jenkins
的pipeline
,支持手动或者代码等方式触发,支持 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
Dockerfile
3. Actions 配置
配置 DockerHub 账号密码
点击New repository secret
按钮,创建对应的变量。
例如,我要创建DOCKER_HUB_USERNAME
变量,值为root
,配置如下:
创建 worfkflow 文件点击Actions
Actions 内置了很多模版,拿过来配置下即可,这里我们用Publish Docker Container
,选择其他也行,最终改成以下下文件
以上文件创建完成,会在工程目录下创建一个.github 的目录,保存有我们配置的文件
同时再次点击Actions
按钮会出现,以下界面
这里的ci
就是配置的 workflow 的name
名称
4. 镜像构建并发布
我们测试两种方式,分别如下:
手动触发构建
根据箭头表示,点击run wofkflow
按钮,执行任务
点击 ci 可以查看任务执行详情,可以看到任务执行步骤以及对应状态以及相关日志
以上结果表明,执行成功,查看 dockerhub 镜像仓库,可以看到推送已经成功,由于是手动触发获取不到 tag,所以构建了edge
tag 的镜像
创建 tag 触发构建创建了一个v1.0.0
自动触发构建
可以镜像仓库在同一时间,构建了latest
和1.0.0
tag 镜像
5. 容器部署验证
下面我们在 k8s 环境中拉取frontent
前端镜像,验证是否部署成功。
我们创建了 frontenddeployment
,同时指定了镜像为dweizhao/frontend:latest
可以看到镜像启动成功
结论
如果你用的是 mac 的 m 系列芯片,可以尝试使用 Github Actions 来构建你的镜像,前提是你自己的个人项目,Github Actions 功能很强大,如果感兴趣可以继续去研究。
文章转载自:架构成长指南
评论