构建神器之Earthly

前言

  • 平时有些小项目单独部署的没有加到CI/CD中,之前都是docker+.bat进行构建推送,后来偶然间看到了EARTHLY,一个号称超级简单的CI/CD工具,他是makefile+docker的结合,但是功能是超越二者之和的,我尝试了一下,确实要方便、快速不少,后期我准备接入到drone中试试
  • 我们一起来了解一下

EARTHLY

简介

-官方文档,目前最新的版本是0.8 -超强的功能: 一个ERATHLY可以代替 Dockerfile、Makefile、Bash等工具

  • 语法简单:earthly只有一个配置文件就是Earthfile这个文件,它语法和Dockerfile很像,熟悉dockerfile的朋友上手没什么难度
  • 多向兼容:除了本地构建外也兼容各种CI/CD工具,如Jenkins、Github Actions等
  • 快速构建:earthly构建的时候会最大限度使用缓存使构建速度更快,还支持共享缓存可以加快在团队中频繁构建的速度
  • Cloud云:允许在云中运行earthly构建,使构建速度更快
  • 丰富的插件:在主流的vscode、sublime、ide等中都有插件

实践

安装

  • 注意:安装earthly是需要预先安装Docker和Git
  • 官方安装教程
  • 官方安装分登录和不登录安装指引,等于的账号每月免费6000分钟的云端构建,更快速度的构建
  • Github上也有编译好的程序下载github下载地址
  • 下图是注册账号的安装步骤
  • 安装完会生成一个容器
  • 跟随一步步还有测试教程

构建

  • Github上有官方的demodemo地址
  • 运行指令
bash 复制代码
earthly +docker  #会执行docker阶段,然后docker阶段又引用了build,build又引用了deps所以就会从deps一步步执行,最终打包推送
  • 特别注意的是demo docker构建阶段有--push,这个默认不会推送要加上--push也就是
bash 复制代码
    earthly --push +docker
  • 下面是我结合自己的微服务写的打包脚本,打包完推送到自己的仓库
yaml 复制代码
VERSION 0.8
FROM xxxxx:9043/public/golang:1.20-alpine
WORKDIR /go-build

deps:
    COPY go.mod go.sum ./
    RUN go mod download
    SAVE ARTIFACT go.mod AS LOCAL go.mod
    SAVE ARTIFACT go.sum AS LOCAL go.sum

build:
    FROM +deps
    COPY . .
    RUN export GO111MODULE=on
    RUN export GOPROXY=https://goproxy.cn,direct
    RUN go build -ldflags "-s -w" -o build/digital-copyright ./cmd
    SAVE ARTIFACT build/digital-copyright /digital-copyright AS LOCAL build/digital-copyright

docker:
    FROM xxxx:9043/public/self-alpine
    COPY +build/digital-copyright .
    COPY conf ./conf
    ENV MODE_ENV=dev
    ENTRYPOINT ["/digital-copyright"]
    SAVE IMAGE --push xxxxxx:9043/test/digital-copyright:2

常见命令

  • earthly +xxx xxx 就是Earthfile中定义的阶段
bash 复制代码
earthly +docker

变量

  • 定义参数,参数可以是常量或者动态的
yaml 复制代码
VERSION 0.8
FROM alpine
WORKDIR /go-build
hello:
   ARG time=$(date +%H:%M)
   ARG name=壹砂木木
   RUN echo "hello $name, it is $time"
  • 动态参数,参数可以是执行指令的时候传入的自定义,也可以是系统环境变量
yaml 复制代码
VERSION 0.8
FROM alpine
WORKDIR /go-build
hello:
   ARG name
   RUN echo "hello $name"
  • 命令行方式传入定义
  • 环境变量传入

使用docker命令

  • earthly 可以使用docker的命令
  • 为了使用 Docker 命令(例如 docker run ),Earthly 提供了可按需启动和停止的隔离 Docker 守护进程。
yaml 复制代码
VERSION 0.8
FROM xxxxx/public/golang:1.20-alpine
WORKDIR /go-build
hello:
    FROM xxxxx/test/main-server
    WITH DOCKER --pull xxxxx/test/main-server
        RUN docker run -d xxxxx/test/main-server
    END

缓存

  • earthly 构建的时候默认是有缓存的,如果不想使用缓存或者有时候改了配置文件还是走的缓存最新的没生效可以在指令加上--no-cahce
yaml 复制代码
earthly --no-cache +build
  • Earthly 允许您在某些情况下通过earthly --auto-skip 跳过构建的大部分内容,如下入我什么都没有改动再次构建,直接success
  • 重置本地缓存
yaml 复制代码
earthly prune

保存神器 SAVE ARTIFACT

  • 功能:将文件、目录或由通配符表示的一系列文件和目录从构建环境复制到目标的工件环境中
  • 将项目目录下的go.mod go.sun 复制到工作目录
bash 复制代码
SAVE ARTIFACT go.mod AS LOCAL go.mod
  • 如果还指定了 AS LOCAL,一旦构建被视为成功,它还会标记要复制到 <local-path> 指定位置
  • 我是在build中使用的,意思是build完成之后将编译好的程序保存到工作区根目录并且同时保存到本地项目/build下
yaml 复制代码
SAVE ARTIFACT build/digital-copyright /digital-copyright AS LOCAL build/digital-copyright

保存镜像

  • 这个是写在docker阶段的,将打包的镜像取名为my-image:latest、my-image:1.0.0等多个镜像
yaml 复制代码
SAVE IMAGE my-image:latest my-image:1.0.0 my-example-registry.com/another-image:latest
  • 保存的同时推送到仓库,这个要结合指令--push 如:earthly --push +docker才能生效,不然是不会推送的
yaml 复制代码
SAVE IMAGE --push xxxx:9043/test/digital-copyright:2
相关推荐
好奇的菜鸟6 分钟前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.015 分钟前
Go语言进阶&依赖管理
开发语言·后端·golang
许苑向上20 分钟前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo
郑祎亦1 小时前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
本当迷ya1 小时前
💖2025年不会Stream流被同事排挤了┭┮﹏┭┮(强烈建议实操)
后端·程序员
计算机毕设指导62 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
paopaokaka_luck3 小时前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
捂月4 小时前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
瓜牛_gn4 小时前
依赖注入注解
java·后端·spring
Estar.Lee4 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip