Earthly项目入门教程:构建你的第一个Earthfile

Earthly项目入门教程:构建你的第一个Earthfile

earthly Super simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby. earthly 项目地址: https://gitcode.com/gh_mirrors/ea/earthly

前言

Earthly是一个现代化的构建工具,它结合了Docker容器化的优势与Makefile的灵活性,为开发者提供了一种全新的构建体验。本文将带你从零开始创建一个简单的Earthfile,通过Go语言项目示例,帮助你理解Earthly的核心概念和工作原理。

Earthfile基础结构

Earthfile是Earthly的核心配置文件,其语法与Dockerfile相似但功能更加强大。一个典型的Earthfile包含以下几个关键部分:

  1. 版本声明:指定Earthly的版本,确保构建行为的稳定性
  2. 基础镜像:定义构建环境的基础容器镜像
  3. 工作目录:设置容器内的工作路径
  4. 构建目标(Targets):定义具体的构建步骤和任务

创建基础Earthfile

让我们从一个最简单的Earthfile开始:

VERSION 0.8
FROM golang:1.15-alpine3.13
WORKDIR /go-workdir

这个基础配置做了三件事:

  1. 声明使用Earthly 0.8版本
  2. 基于golang:1.15-alpine3.13镜像创建构建环境
  3. 设置容器内工作目录为/go-workdir

添加构建目标

Earthly的强大之处在于它的目标(Target)系统。目标类似于Makefile中的规则,但功能更加强大。

构建目标示例

build:
    COPY main.go .
    RUN go build -o output/example main.go
    SAVE ARTIFACT output/example AS LOCAL local-output/go-example

这个构建目标执行了三个操作:

  1. 将本地main.go文件复制到容器中
  2. 在容器内编译Go程序
  3. 将编译结果保存为可复用的构建产物(Artifact)

Docker镜像目标

docker:
    COPY +build/example .
    ENTRYPOINT ["/go-workdir/example"]
    SAVE IMAGE go-example:latest

这个目标展示了Earthly的一个重要特性:跨目标依赖。它:

  1. 引用了build目标的产物
  2. 配置了容器入口点
  3. 最终生成一个Docker镜像

目标环境隔离

Earthly允许每个目标指定自己的构建环境:

npm:
    FROM node:12-alpine3.12
    WORKDIR /src
    RUN npm install
    COPY assets/ .
    RUN npm test

这种设计使得在一个Earthfile中可以混合使用多种技术栈,每个目标都能获得最适合的构建环境。

执行构建

构建过程非常简单:

earthly +docker

Earthly会自动解析依赖关系,并行执行独立的构建步骤,并确保构建过程的原子性——要么全部成功,要么完全失败。

多语言支持示例

Earthly不仅支持Go语言,还可以用于其他技术栈:

JavaScript示例

VERSION 0.8
FROM node:13.10.1-alpine3.11
WORKDIR /js-example

build:
    COPY src/index.js .
    SAVE ARTIFACT index.js /dist/index.js

docker:
    COPY +build/dist dist
    ENTRYPOINT ["node", "./dist/index.js"]
    SAVE IMAGE js-example:latest

Java示例

VERSION 0.8
FROM openjdk:8-jdk-alpine
RUN apk add --update --no-cache gradle
WORKDIR /java-example

build:
    COPY build.gradle ./
    COPY src src
    RUN gradle build
    RUN gradle install
    SAVE ARTIFACT build/install/java-example/bin /bin
    SAVE ARTIFACT build/install/java-example/lib /lib

docker:
    COPY +build/bin bin
    COPY +build/lib lib
    ENTRYPOINT ["/java-example/bin/java-example"]
    SAVE IMAGE java-example:latest

Python示例

VERSION 0.8
FROM python:3
WORKDIR /code

build:
    COPY src src
    SAVE ARTIFACT src /src

docker:
    COPY +build/src src
    ENTRYPOINT ["python3", "./src/hello.py"]
    SAVE IMAGE python-example:latest

结语

通过本文,你已经学会了如何创建一个基本的Earthfile,定义构建目标,并理解Earthly的核心概念。Earthly通过容器化技术提供了可重复、隔离的构建环境,同时保持了与现有工具(Dockerfile等)的良好兼容性。在后续教程中,我们将探讨更高级的功能,如跨项目依赖管理和复杂构建流程的实现。

earthly Super simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby. earthly 项目地址: https://gitcode.com/gh_mirrors/ea/earthly

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何灿前Tristan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值