- Builds ที่ทำซ้ำ - เขียนสร้างหนึ่งครั้งและเรียกใช้ทุกที่ - บนแล็ปท็อปของคุณรีโมทและใน CI ใด ๆ
❤ง่ายมาก - ไวยากรณ์ที่จดจำได้ทันที - เช่น Dockerfile และ MakeFile มีลูก
- เข้ากันได้กับทุกภาษาเฟรมเวิร์กและเครื่องมือสร้าง - ถ้ามันทำงานบน Linux มันจะทำงานบนโลก
- เหมาะสำหรับ monorepos และ polyrepos - จัดระเบียบตรรกะการสร้างของคุณ แต่เหมาะสมที่สุดสำหรับโครงการของคุณ
- Fast Builds - สร้างแคชและการดำเนินการแบบขนานทำให้สร้างอย่างรวดเร็วโดยอัตโนมัติ
♻นำกลับมาใช้ซ้ำอย่าทำซ้ำ - อย่าเขียนรหัสเดียวกันในหลายสร้างอีกครั้ง
- Earthly เป็นเฟรมเวิร์ก CI/CD ที่ใช้งานได้หลากหลายและเข้าถึงได้ซึ่งใช้งานได้ทุกท่อภายในคอนเทนเนอร์ทำให้คุณสร้างซ้ำได้ที่คุณเขียนเพียงครั้งเดียวและทำงานได้ทุกที่ มันมีไวยากรณ์ที่เรียบง่ายและจดจำได้ทันทีซึ่งง่ายต่อการเขียนและเข้าใจ - เช่น Dockerfile และ MakeFile มีลูก และมันใช้ประโยชน์และเพิ่มเครื่องมือสร้างยอดนิยมแทนที่จะแทนที่พวกเขาดังนั้นคุณไม่จำเป็นต้องเขียนใหม่ทั้งหมดของคุณไม่ว่าคุณจะใช้ภาษาใด

การดำเนินการทั้งหมดในโลกสร้างในภาชนะบรรจุทำให้พวกเขาอยู่ในตัวเองแยกได้ทำซ้ำและพกพาได้ สิ่งนี้จะช่วยให้การทำซ้ำเร็วขึ้นในการสร้างสคริปต์และการดีบักง่ายขึ้นเมื่อมีบางอย่างผิดปกติ -ไม่มี git commit -m "try again" เมื่อคุณเขียนบิลด์คุณจะรู้ว่ามันจะดำเนินการอย่างถูกต้องไม่ว่าจะทำงานที่ไหน - แล็ปท็อปของคุณแล็ปท็อปของเพื่อนร่วมงานหรือ CI ใด ๆ คุณไม่จำเป็นต้องกำหนดค่าเครื่องมือเฉพาะภาษาติดตั้งการพึ่งพาเพิ่มเติมหรือทำให้สคริปต์บิลด์ของคุณซับซ้อนขึ้นเพื่อให้แน่ใจว่าเข้ากันได้กับ OSS ที่แตกต่างกัน โลกให้สิ่งสร้างที่สอดคล้องกันและทำซ้ำได้โดยไม่คำนึงถึงตำแหน่งที่พวกเขาวิ่ง
ไวยากรณ์ของโลกนั้นง่ายต่อการเขียนและเข้าใจ วิศวกรส่วนใหญ่สามารถอ่าน EarthFile ได้ทันทีโดยไม่ต้องมีความรู้เกี่ยวกับโลก เรารวมความคิดที่ดีที่สุดบางอย่างจาก Dockerfiles และ MakeFiles เป็นข้อมูลจำเพาะเดียวเช่น Dockerfile และ MakeFile มีลูก
โลกทำงานกับคอมไพเลอร์และสร้างเครื่องมือที่คุณใช้ ถ้ามันทำงานบน Linux มันจะทำงานบนโลก และคุณไม่จำเป็นต้องเขียนบิลด์ที่มีอยู่ของคุณใหม่หรือแทนที่ package.json , go.mod , build.gradle หรือ Cargo.toml คุณสามารถใช้โลกเป็นเสื้อคลุมรอบเครื่องมือที่มีอยู่ของคุณและยังคงได้รับการสร้างที่ทำซ้ำได้ของโลกการดำเนินการแบบขนานและสร้างแคช
โลกนี้ยอดเยี่ยมสำหรับทั้ง monorepos และ polyrepos คุณสามารถแยกตรรกะการสร้างของคุณในหลาย ๆ EarthFiles วางลึกลงไปในโครงสร้างไดเรกทอรีหรือแม้แต่ในที่เก็บอื่น ๆ การอ้างอิงเป้าหมายจาก EarthFiles อื่น ๆ นั้นง่ายโดยไม่คำนึงถึงตำแหน่งที่เก็บไว้ ดังนั้นคุณสามารถจัดระเบียบตรรกะการสร้างของคุณได้ แต่เหมาะสมที่สุดสำหรับโครงการของคุณ
โลกจะดำเนินการสร้างเป้าหมายแบบขนานโดยอัตโนมัติและใช้การใช้แคชสูงสุด สิ่งนี้ทำให้สร้างได้อย่างรวดเร็ว โลกนี้ยังมีความสามารถในการแคชที่ใช้ร่วมกันอย่างมีประสิทธิภาพซึ่งเร่งความเร็วในการสร้างบ่อยครั้งในทีมหรือในสภาพแวดล้อมแบบทรายเช่นดาวเทียมทางโลกการกระทำของ GitHub หรือ CI ของคุณ
หากงานสร้างของคุณมีหลายขั้นตอนโลกจะ:
ไม่ต้องเขียนรหัสเดียวกันในหลาย ๆ บิลด์อีกครั้ง ด้วยโลกคุณสามารถนำเป้าหมายสิ่งประดิษฐ์และรูปภาพกลับมาใช้ใหม่ได้ในหลาย ๆ โลกแม้กระทั่งในที่เก็บอื่น ๆ ในบรรทัดเดียว Earthly เป็นแคชที่ตระหนักถึงการแฮชแต่ละไฟล์ของแต่ละไฟล์และมีความสามารถในการแคชร่วมกัน ดังนั้นคุณสามารถสร้างลำดับชั้นการสร้างที่กว้างใหญ่และมีประสิทธิภาพซึ่งดำเนินการขั้นตอนขั้นต่ำที่ต้องการเท่านั้น

โลกนี้มีความหมายที่จะใช้ทั้งในเครื่องพัฒนาของคุณและใน CI มันทำงานบนแพลตฟอร์ม CI/CD ของคุณ (เช่น Jenkins, Circle CI, การกระทำ GitHub และ Gitlab CI/CD) โลกให้ประโยชน์ของระบบการสร้างระบบอัตโนมัติที่ทันสมัยไม่ว่าจะทำงานที่ไหนเช่นการแคชและการขนานกัน มันเป็นเลเยอร์กาวระหว่างเครื่องมือสร้างเฉพาะภาษา (เช่น Maven, Gradle, NPM, Pip, Go Build) และ CI ทำงานเหมือนเสื้อคลุมรอบเครื่องมือสร้างและสร้างตรรกะที่แยกการดำเนินการสร้างจากสภาพแวดล้อมที่พวกเขาทำงาน
ในระยะสั้น: คอนเทนเนอร์ การแคชเลเยอร์ และ กราฟการสร้างที่ซับซ้อน !
การดำเนินการสร้างทางโลกในคอนเทนเนอร์ที่แยกการดำเนินการ การพึ่งพาของบิลด์มีการระบุไว้อย่างชัดเจนในคำจำกัดความการสร้างจึงทำให้การสร้างพึ่งพาตนเองได้
เราใช้ระบบที่ใช้เป้าหมายเพื่อช่วยให้ผู้ใช้แบ่งการสร้างที่ซับซ้อนเป็นชิ้นส่วนที่นำกลับมาใช้ใหม่ได้ ไม่มีการแบ่งปันระหว่างเป้าหมายอื่นนอกเหนือจากการพึ่งพาที่ประกาศไว้อย่างชัดเจน ไม่มีอะไรร่วมกันหมายความว่าไม่มีเงื่อนไขการแข่งขันที่ไม่คาดคิด ในความเป็นจริงการสร้างจะดำเนินการแบบขนานเมื่อใดก็ตามที่เป็นไปได้โดยไม่จำเป็นต้องให้ผู้ใช้ดูแลการล็อคหรือการโต้ตอบกับสภาพแวดล้อมที่ไม่คาดคิด
หมายเหตุ EarthFiles อาจดูคล้ายกับ DockerFile Multi-Stage Builds ในความเป็นจริงมีการใช้เทคโนโลยีเดียวกันภายใต้ อย่างไรก็ตามความแตกต่างที่สำคัญคือโลกได้รับการออกแบบให้เป็นระบบบิลด์อเนกประสงค์ทั่วไปไม่ใช่แค่ข้อกำหนดของภาพนักเทียบท่า อ่านเพิ่มเติมเกี่ยวกับวิธีที่โลกแตกต่างจาก 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

ตัวอย่างสำหรับภาษาอื่น ๆ มีอยู่ในตัวอย่าง DIR
เมื่อใดก็ตามที่เป็นไปได้โลกจะดำเนินการเป้าหมายแบบขนานโดยอัตโนมัติ

ลดเวลาสร้างใน 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 หรือระบบนิเวศ Core .NET ติดตั้งหนึ่งครั้งใน EarthFile ของคุณและใช้ได้กับทุกคน หรือดียิ่งกว่านั้นคุณสามารถใช้ประโยชน์จากระบบนิเวศของ 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ดูรหัสตัวอย่างเต็ม
โลกสามารถใช้เพื่ออ้างอิงและสร้างเป้าหมายจากไดเรกทอรีอื่น ๆ หรือแม้แต่ที่เก็บอื่น ๆ ตัวอย่างเช่นหากเราต้องการสร้างตัวอย่างเป้าหมายจากที่เก็บของ 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 Images และนั่นคือจุดที่ Dockerfiles หยุด โลกใช้หลักการสำคัญบางประการของ Dockerfiles (เช่นการแคชเลเยอร์) แต่ขยายกรณีการใช้งาน ตัวอย่างเช่นโลกสามารถส่งออกสิ่งประดิษฐ์ปกติเรียกใช้หน่วยและการทดสอบการรวมและสร้างภาพนักเทียบท่าหลายภาพในแต่ละครั้ง - ทั้งหมดนอกขอบเขตของ Dockerfiles
เป็นไปได้ที่จะใช้ Dockerfiles ร่วมกับเทคโนโลยีอื่น ๆ (เช่นไฟล์ makefiles หรือ bash) เพื่อแก้ปัญหาการใช้งานดังกล่าว อย่างไรก็ตามชุดค่าผสมเหล่านี้เป็นเรื่องยากที่จะขนานกันท้าทายในการขยายขนาดที่เก็บเนื่องจากพวกเขาขาดระบบนำเข้าที่แข็งแกร่งและมักจะแตกต่างกันไปตามสไตล์จากทีมหนึ่งไปอีกทีมหนึ่ง โลกไม่มีข้อ จำกัด เหล่านี้เนื่องจากได้รับการออกแบบให้เป็นระบบสร้างวัตถุประสงค์ทั่วไป
ตัวอย่างเช่นโลกแนะนำเป้าหมายที่ดียิ่งขึ้นสิ่งประดิษฐ์และระบบอ้างอิงภาพช่วยให้นำมาใช้ซ้ำได้ดีขึ้นในการสร้างที่ซับซ้อนซึ่งประกอบไปด้วยพื้นที่เก็บข้อมูลขนาดใหญ่หรือที่เก็บหลายแห่ง เนื่องจาก Dockerfiles มีไว้เพื่ออธิบายภาพทีละภาพเท่านั้นคุณสมบัติดังกล่าวอยู่นอกขอบเขตของการบังคับใช้ของ Dockerfiles
ตรวจสอบหน้าเอกสารอ้างอิง EarthFile มันมีคำสั่งทั้งหมดที่นั่นและระบุคำสั่งใดที่เหมือนกับคำสั่ง DockerFile และใหม่
ใช่! คุณสามารถใช้คำสั่ง FROM DOCKERFILE เพื่อสืบทอดคำสั่งใน DockerFile ที่มีอยู่
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestคุณอาจเลือกพอร์ต Dockerfiles ของคุณไปยังโลกทั้งหมด การแปล Dockerfiles เป็น EarthFiles มักเป็นเรื่องของการคัดลอกและทำการปรับเปลี่ยนเล็กน้อย ดูหน้าการเริ่มต้นสำหรับตัวอย่าง EarthFile
Bazel เป็นเครื่องมือสร้างที่พัฒนาโดย Google เพื่อเพิ่มประสิทธิภาพความเร็วความถูกต้องและความสามารถในการทำซ้ำของรหัสฐานโมโนเรปภายในของพวกเขา ความแตกต่างที่สำคัญระหว่าง Bazel และ Earthly คือ Bazel เป็น ระบบสร้าง ในขณะที่โลกเป็น กรอบ CI/CD ที่มีวัตถุประสงค์ทั่วไป สำหรับคำอธิบายเชิงลึกเพิ่มเติมโปรดดูคำถามที่พบบ่อยของเรา
Earthly ได้รับใบอนุญาตภายใต้ Mozilla Public License Version 2.0 ดูใบอนุญาต