? 반복 가능한 빌드 - 쓰기 빌드는 한 번 빌드를하고 랩톱, 원격 및 CI에서 어디서나 실행합니다.
dockerfile 및 makefile과 같은 즉시 인식 가능한 구문 - awer simple - 즉시 인식 가능한 구문.
? 모든 언어, 프레임 워크 및 빌드 도구와 호환 - Linux에서 실행되면 지상에서 실행됩니다.
? Monorepos 및 Polyrepos에 적합합니다 - 빌드 논리를 구성하는 것이 프로젝트에 가장 적합합니다.
? 빠른 빌드 - 빌드 캐싱 및 병렬 실행으로 인해 건물이 자동으로 빠르게 빌드됩니다.
♻️ 바일 재사용, 반복하지 마십시오 - 여러 빌드에서 동일한 코드를 다시 작성하지 마십시오.
? Earthly는 컨테이너 내부의 모든 파이프 라인을 실행하는 다재다능하고 접근 가능한 CI/CD 프레임 워크로 한 번 작성하고 어디서나 실행할 수있는 반복 가능한 빌드를 제공합니다. Dockerfile과 Makefile과 같이 글을 쓰고 이해하기 쉬운 매우 간단하고 즉시 인식 가능한 구문이 있습니다. 또한 대중 빌드 도구를 대체하는 대신 인기있는 빌드 도구를 활용하고 보강하므로 사용하는 언어에 관계없이 모든 빌드를 다시 작성할 필요가 없습니다.

지구적으로 모든 빌드를 컨테이너로 실행하여 자체 포함하고 고립되고 반복 가능하며 휴대용이 가능합니다. 이를 통해 빌드 스크립트에 대한 더 빠른 반복과 무언가 잘못 될 때 더 쉽게 디버깅 할 수 있습니다. 더 이상 git commit -m "try again" 하지 않습니다. 빌드를 작성하면 랩탑, 동료의 노트북 또는 CI 등 어디에서 실행 되든 올바르게 실행됩니다. 언어 별 툴링을 구성하거나 추가 종속성을 설치하거나 빌드 스크립트를 복잡하게하여 다른 OSS와 호환되도록 할 필요가 없습니다. Earthly는 어디에서 달리는 지에 관계없이 일관되고 반복 가능한 빌드를 제공합니다.
Earthly의 구문은 쓰고 이해하기 쉽습니다. 대부분의 엔지니어는 지구에 대한 사전 지식없이 Earthfile을 즉시 읽을 수 있습니다. 우리는 dockerfiles와 makefiles의 최고의 아이디어를 Dockerfile 및 Makefile과 같은 하나의 사양으로 결합했습니다.
Earthly는 컴파일러와 함께 작동하고 사용하는 도구를 빌드합니다. Linux에서 실행되면 지상에서 실행됩니다. 또한 기존 빌드를 다시 작성하거나 package.json , go.mod , build.gradle 또는 Cargo.toml 파일을 교체 할 필요가 없습니다. 기존 툴링 주변의 래퍼로 지구적으로 사용할 수 있으며 여전히 Earthly의 반복 가능한 빌드, 병렬 실행 및 캐싱 빌드를 얻을 수 있습니다.
지구는 모노 포도와 폴리 레포지스 모두에 적합합니다. 빌드 로직을 여러 개의 Earthfiles에서 분리하여 디렉토리 구조 또는 다른 저장소에 더 깊이 배치 할 수 있습니다. 다른 Earthfiles의 대상을 참조하는 것은 저장 위치에 관계없이 쉽습니다. 따라서 빌드 로직을 구성 할 수는 있지만 프로젝트에 가장 적합합니다.
Earthly는 자동으로 빌드 대상을 병렬로 실행하고 캐시를 최대한 활용합니다. 이것은 건물을 빠르게 만듭니다. Earthly는 또한 강력한 공유 캐싱 기능을 가지고 있으며, 속도를 높이기 속도는 팀 전체에서 또는 지구 위성, Github 액션 또는 CI와 같은 샌드 박스 환경에서 자주 실행됩니다.
빌드에 여러 단계가 있으면 지상의 말은 다음과 같습니다.
여러 빌드에서 동일한 코드를 다시 작성할 필요가 없습니다. 지구적으로, 여러 개의 Earthfiles, 심지어 다른 리포지토리의 한 줄에 대한 대상, 아티팩트 및 이미지를 단 한 줄로 재사용 할 수 있습니다. Earthly는 각 파일의 개별 해시를 기반으로 한 캐시 인식이며 캐싱 기능을 공유했습니다. 따라서 최소 필수 단계 만 실행하는 광대하고 효율적인 빌드 계층 구조를 만들 수 있습니다.

Earthly는 개발 기계와 CI 모두에서 사용됩니다. CI/CD 플랫폼 (예 : Jenkins, Circle CI, Github Actions 및 Gitlab CI/CD) 위에 실행됩니다. Earthly는 캐싱 및 병렬 처리와 같은 현대적인 빌드 자동화 시스템의 이점을 제공합니다. 언어 별 빌드 툴링 (Maven, Gradle, NPM, Pip, Go Build)과 CI 사이의 접착제 레이어와 빌드 툴링 주변의 래퍼처럼 작동하고 건물을 실행하는 환경에서 빌드 실행을 분리하는 논리를 빌드합니다.
요컨대 : 컨테이너 , 레이어 캐싱 및 복잡한 빌드 그래프 !
지구적으로 실행되는 컨테이너에서 빌드를 실행합니다. 빌드의 종속성은 빌드 정의에 명시 적으로 지정되므로 빌드가 자급 자족합니다.
우리는 대상 기반 시스템을 사용하여 사용자가 복잡한 빌드를 재사용 가능한 부품으로 분류 할 수 있도록 도와줍니다. 명확하게 선언 된 종속성 이외의 목표간에 공유되는 것은 없습니다. 공유 된 것은 없다는 것은 예상치 못한 인종 조건이 없다는 것을 의미합니다. 실제로, 빌드는 가능할 때마다 사용자가 잠금 또는 예상치 못한 환경 상호 작용을 처리 할 필요없이 병렬로 실행됩니다.
참고 Earthfiles는 Dockerfile Multi-Stage 빌드와 매우 유사 해 보일 수 있습니다. 실제로, 동일한 기술이 아래에 사용됩니다. 그러나 주요 차이점은 Earthly가 Docker 이미지 사양뿐만 아니라 일반 목적 구축 시스템으로 설계되었다는 것입니다. Dockerfiles와 지상이 얼마나 다른지 자세히 알아보십시오.
설치 지침을 참조하십시오.
소스에서 빌드하려면 기여 페이지를 확인하십시오.
다음은 지상으로 시작할 수있는 몇 가지 리소스입니다.
전체 문서를 참조하십시오.
참조 페이지
# Earthfile
VERSION 0.8
FROM golang:1.15-alpine3.13
RUN apk --update --no-cache add git
WORKDIR /go-example
all :
BUILD +lint
BUILD +docker
build :
COPY main.go .
RUN go build -o build/go-example main.go
SAVE ARTIFACT build/go-example AS LOCAL build/go-example
lint :
RUN go get golang.org/x/lint/golint
COPY main.go .
RUN golint -set_exit_status ./...
docker :
COPY +build/go-example .
ENTRYPOINT [ "/go-example/go-example" ]
SAVE IMAGE go-example:latest // main.go
package main
import "fmt"
func main () {
fmt . Println ( "hello world" )
} earthly +all 사용하여 빌드를 호출하십시오.

다른 언어에 대한 예는 예제에서 제공됩니다.
가능할 때마다 지구적으로 대상을 동시에 자동으로 실행합니다.

공유 원격 캐싱을 통해 CI의 빌드 시간을 줄입니다.

여러 플랫폼에 대해 병렬로 빌드하십시오.
VERSION 0.8
all :
BUILD
--platform = linux/amd64
--platform = linux/arm64
--platform = linux/arm/v7
--platform = linux/arm/v6
+build
build :
FROM alpine:3.18
CMD [ "uname" , "-m" ]
SAVE IMAGE multiplatform-image 팀에 protoc , 특정 버전의 Python, Java 1.6 또는 .NET Core Ecosystem을 설치하도록 요청할 필요가 없습니다. Earthfile에 한 번 설치하면 모든 사람에게 효과적입니다. 또는 더 나은 것은 Rich Docker Hub 생태계를 사용할 수 있습니다.
VERSION 0.8
FROM golang:1.15-alpine3.13
WORKDIR /proto-example
proto :
FROM namely/protoc-all:1.29_4
COPY api.proto /defs
RUN --entrypoint -- -f api.proto -l go
SAVE ARTIFACT ./gen/pb-go /pb AS LOCAL pb
build :
COPY go.mod go.sum .
RUN go mod download
COPY +proto/pb pb
COPY main.go ./
RUN go build -o build/proto-example main.go
SAVE ARTIFACT build/proto-example전체 예제 코드를 참조하십시오.
Earthly는 다른 디렉토리 나 다른 저장소에서 대상을 참조하고 구축하는 데 사용될 수 있습니다. 예를 들어, github.com/earthly/earthly 리포지토리에서 예제 대상을 작성하려면 발행 할 수 있습니다.
# Try it yourself! No need to clone.
earthly github.com/earthly/earthly/examples/go:main+docker
# Run the resulting image.
docker run --rm earthly/examples:go + 사용하여 다른 대상을 참조하고 복잡한 빌드 상호 의존성을 만듭니다.

예
동일한 디렉토리 (동일한 earthfile)
BUILD +some-target
FROM +some-target
COPY +some-target/my-artifact ./다른 디렉토리
BUILD ./some/local/path+some-target
FROM ./some/local/path+some-target
COPY ./some/local/path+some-target/my-artifact ./다른 저장소
BUILD github.com/someone/someproject:v1.2.3+some-target
FROM github.com/someone/someproject:v1.2.3+some-target
COPY github.com/someone/someproject:v1.2.3+some-target/my-artifact ./비밀은 이미지의 레이어 내에 저장되지 않으며 필요한 명령에만 사용할 수 있습니다.
earthly set /user/github/token ' shhh... ' release :
RUN --push --secret GITHUB_TOKEN = user/github/token github-release upload file.binDockerfiles는 Docker 이미지의 메이크업을 지정하도록 설계되었으며 Dockerfiles가 멈추는 곳입니다. Earthly는 Dockerfiles (레이어 캐싱과 같은)의 주요 원칙을 취하지 만 사용 사례를 확장합니다. 예를 들어, Earthly는 정기적 인 아티팩트를 출력하고, 실행 장치 및 통합 테스트를하고, 한 번에 여러 docker 이미지를 Dockerfiles의 범위를 벗어나게 할 수 있습니다.
이러한 사용 사례를 해결하기 위해 다른 기술 (예 : Makefiles 또는 Bash 파일)과 함께 Dockerfiles를 사용하는 것이 가능합니다. 그러나 이러한 조합은 병렬화하기가 어렵고 강력한 수입 시스템이 없기 때문에 저장소 전체에서 확장하기가 어렵고 종종 팀에서 다른 팀마다 스타일이 다릅니다. Earthly는 일반 목적 빌드 시스템으로 설계되었으므로 이러한 제한 사항이 없습니다.
예를 들어, Earthly는 더 풍부한 대상, 아티팩트 및 이미지 참조 시스템을 소개하여 단일 대형 저장소 또는 여러 저장소에 걸친 복잡한 빌드에서 더 나은 재사용을 제공합니다. Dockerfiles는 한 번에 하나의 이미지를 설명하기위한 것이기 때문에 이러한 기능은 Dockerfiles의 적용 범위를 벗어납니다.
EarthFile Reference Doc 페이지를 확인하십시오. 여기에는 모든 명령이 있으며 어떤 명령이 dockerfile 명령과 동일하고 새로운 명령이 새로운 지 지정합니다.
예! FROM DOCKERFILE 명령을 사용하여 기존 DockerFile의 명령을 상속받을 수 있습니다.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latest또한 선택적으로 Dockerfiles를 전적으로 지상으로 포팅 할 수도 있습니다. Dockerfiles를 Earthfiles로 변환하는 것은 일반적으로 복사 및 사소한 조정의 문제입니다. Earthfile 예제는 시작 페이지를 참조하십시오.
Bazel은 Google이 내부 Monorepo 코드베이스의 속도, 정확성 및 재현성을 최적화하기 위해 Google이 개발 한 빌드 도구입니다. Bazel과 Earthly의 주요 차이점은 Bazel이 빌드 시스템 이지만 지상은 일반적인 목적 CI/CD 프레임 워크 라는 것입니다. 보다 심층적 인 설명은 FAQ를 참조하십시오.
Earthly는 Mozilla Public License 버전 2.0에 따라 라이센스가 부여됩니다. 라이센스를 참조하십시오.