؟ بنيات قابلة للتكرار - تكتب بنيات مرة واحدة ، وقم بتشغيلها في أي مكان - على جهاز الكمبيوتر المحمول الخاص بك ، عن بُعد ، وفي أي CI.
❤ Super Simple - بناء جملة يمكن التعرف عليه على الفور - مثل Dockerfile و Makefile كان لديه طفل.
؟ متوافق مع كل لغة ، وإطار عمل ، وأداة البناء - إذا كانت تعمل على Linux ، فإنها تعمل على الأرض.
؟ رائع بالنسبة لـ Monorepos و Polyrepos - تنظيم منطق البناء الخاص بك ، ولكن من المنطقي لمشروعك.
؟ Builds Fast - بناء التخزين المؤقت والتنفيذ المتوازي يجعل البناء بسرعة تلقائيًا.
♻ إعادة الاستخدام ، لا تكرر - لا تكتب نفس الرمز في عمليات بناء متعددة مرة أخرى.
؟ Earthly هو إطار CI/CD متعدد الاستخدامات ودود يدير كل خط أنابيب داخل الحاويات ، مما يتيح لك تصميمات قابلة للتكرار تكتبها مرة واحدة وتشغيلها في أي مكان. إنه يحتوي على بناء جملة بسيط للغاية يمكن التعرف عليه على الفور يسهل الكتابة والفهم - مثل Dockerfile و Makefile كان لديه طفل. ويعزز ويزيد من أدوات البناء الشائعة بدلاً من استبدالها ، لذلك لا يتعين عليك إعادة كتابة جميع بنياتك بغض النظر عن اللغات التي تستخدمها.

يدير الأرض كل البناء في الحاويات ، مما يجعلها قائمة بذاتها ، معزولة ، قابلة للتكرار ، ومحمولة. هذا يسمح بالتكرار بشكل أسرع على البرامج النصية للبناء وأسهل تصحيح الأخطاء عندما يحدث خطأ ما -لا مزيد من git commit -m "try again" . عندما تكتب بناءًا ، فأنت تعلم أنه سيتم تنفيذها بشكل صحيح بغض النظر عن مكان تشغيله - الكمبيوتر المحمول أو الكمبيوتر المحمول الخاص بالزميل أو أي CI. ليس عليك تكوين الأدوات الخاصة باللغة ، أو تثبيت تبعيات إضافية ، أو تعقيد البرامج النصية للبناء للتأكد من أنها متوافقة مع OSS مختلفة. يمنحك الأرض بنيات متسقة وقابلة للتكرار بغض النظر عن المكان الذي يركضون فيه.
بناء جملة Earthly سهل الكتابة وفهم. يمكن لمعظم المهندسين قراءة Earthfile على الفور ، دون معرفة مسبقة بالأرض. لقد جمعنا بعضًا من أفضل الأفكار من Dockerfiles و Makefiles في مواصفات واحدة - مثل Dockerfile و Makefile كان لها طفل.
الأعمال الأرضية مع المجمعين وأدوات البناء التي تستخدمها. إذا كان يعمل على Linux ، فإنه يعمل على الأرض. وليس عليك إعادة كتابة بنياتك الحالية أو استبدال ملفات package.json أو go.mod أو build.gradle أو Cargo.toml . يمكنك استخدام الأرض كركب حول أدواتك الحالية وما زلت تحصل على بنيات الأرض القابلة للتكرار ، والتنفيذ الموازي ، وبناء التخزين المؤقت.
الأرض رائعة لكل من monorepos و polyrepos. يمكنك تقسيم منطق البناء الخاص بك عبر عدة أطراف الأرض ، أو وضع بعض أعمق داخل بنية الدليل أو حتى في مستودعات أخرى. من السهل الإشارة إلى الأهداف من أطراف الأرض الأخرى بغض النظر عن المكان الذي يتم تخزينه. حتى تتمكن من تنظيم منطق البناء الخاص بك ، ومع ذلك يكون من المنطقي لمشروعك.
ينفذ الأرض التلقائي تلقائيًا أهدافًا بالتوازي ويستفيد من ذاكرة التخزين المؤقت. هذا يجعل البناء بسرعة. يحتوي Earthly أيضًا على قدرات تخزين مؤقت مشتركة قوية تعمل بشكل متكرر عبر فريق أو في بيئات رمل ، مثل الأقمار الصناعية الأرضية أو إجراءات GitHub أو CI.
إذا كان للبناء خطوات متعددة ، فإن الإرادة الأرضية:
لا تضطر أبدًا إلى كتابة نفس الرمز في عمليات بناء متعددة مرة أخرى. مع الأرض ، يمكنك إعادة استخدام الأهداف والتحف والصور عبر عدة أطراف الأرض ، حتى تلك الموجودة في مستودعات أخرى ، في خط واحد. الأرضية الأرضية على دراية ذاكرة التخزين المؤقت ، بناءً على تجزئة فردية لكل ملف ، ولديها قدرات التخزين المؤقت. حتى تتمكن من إنشاء تسلسل هرمي واسع وفعال لا ينفذ سوى الحد الأدنى الخطوات المطلوبة.

من المفترض أن يتم استخدام الأرض الأرضية على آلة التطوير الخاصة بك وفي CI. يتم تشغيله فوق منصة CI/CD (مثل Jenkins و Circle CI و Github Actions و Gitlab CI/CD). يوفر Earthly فوائد نظام أتمتة البناء الحديث أينما يعمل - مثل التخزين المؤقت والتوازي. إنها طبقة غراء بين أدوات البناء الخاصة باللغة (مثل Maven و Gradle و NPM و PIP و GO Build) و CI ، تعمل مثل غلاف حول أدوات البناء الخاصة بك وبناء منطق يعزل تنفيذ البناء من البيئات التي يعملون فيها.
باختصار: الحاويات ، التخزين المؤقت للطبقة ، والرسوم البيانية للبناء المعقدة !
ينفذ الأرض في الحاويات ، حيث يتم عزل التنفيذ. يتم تحديد تبعيات البناء بشكل صريح في تعريف البناء ، مما يجعل البناء مكتفية ذاتيا.
نستخدم نظامًا مستكشفًا مستهدفًا لمساعدة المستخدمين على تقسيم الإنشاءات المعقدة إلى أجزاء قابلة لإعادة الاستخدام. لا يتم مشاركة أي شيء بين الأهداف بخلاف التبعيات التي تم الإعلان عنها بوضوح. لا شيء مشترك يعني عدم وجود ظروف سباق غير متوقعة. في الواقع ، يتم تنفيذ الإنشاء بالتوازي كلما كان ذلك ممكنًا ، دون أي حاجة للمستخدم لرعاية أي تفاعلات بيئة غير متوقعة أو غير متوقعة.
ملاحظة قد تبدو Earthfiles مشابهة جدًا لبنيات Dockerfile متعددة المراحل. في الواقع ، يتم استخدام نفس التكنولوجيا تحتها. ومع ذلك ، فإن الاختلاف الرئيسي هو أن الأرضية مصممة لتكون نظام بناء للأغراض العامة ، وليس مجرد مواصفات صورة 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انظر رمز المثال الكامل.
يمكن استخدام الأرضية للرجوع وبناء أهداف من أدلة أخرى أو حتى مستودعات أخرى. على سبيل المثال ، إذا أردنا بناء هدف مثال من مستودع 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 استخدم + للإشارة إلى أهداف أخرى وإنشاء بناء بين الاعتمادات المعقدة.

أمثلة
نفس الدليل (نفس الأرض)
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.binتم تصميم Dockerfiles لتحديد مكياج صور Docker وهذا هو المكان الذي تتوقف فيه Dockerfiles. يأخذ الأرض بعض المبادئ الرئيسية لـ Dockerfiles (مثل التخزين المؤقت للطبقة) ولكنها تتوسع في حالات الاستخدام. على سبيل المثال ، يمكن لـ Earthly إخراج القطع الأثرية العادية واختبارات الوحدة والتكامل وإنشاء العديد من صور Docker في وقت واحد - كل ذلك خارج نطاق Dockerfiles.
من الممكن استخدام Dockerfiles بالاشتراك مع التقنيات الأخرى (على سبيل المثال ، ملفات Makefiles أو Bash) لحل حالات الاستخدام هذه. ومع ذلك ، يصعب موازاة هذه المجموعات ، وتحديًا للتوسيع عبر المستودعات لأنها تفتقر إلى نظام استيراد قوي ، وغالبًا ما تختلف في الأسلوب من فريق إلى آخر. لا تحتوي Earthly على هذه القيود حيث تم تصميمها كنظام بناء للأغراض العامة.
على سبيل المثال ، يقدم Earthly نظامًا أكثر ثراءً ، والتحف ، ونظام الرجوع إلى الصور ، مما يتيح إعادة استخدام أفضل في عمليات بناء معقدة تمتد مستودعًا كبيرًا أو مستودعات متعددة. نظرًا لأن Dockerfiles تهدف فقط إلى وصف صورة واحدة في وقت واحد ، فإن هذه الميزات موجودة خارج نطاق قابلية تطبيق Dockerfiles.
تحقق من صفحة DOC المرجعية Earthfile. إنه يحتوي على جميع الأوامر هناك ويحدد الأوامر هي نفس أوامر Dockerfile وأي جديد.
نعم! يمكنك استخدام الأمر FROM DOCKERFILE لروث الأوامر في dockerfile موجودة.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestيمكنك أيضًا تنفيذ Dockerfiles بشكل اختياري إلى الأرض بالكامل. عادةً ما تكون ترجمة Dockerfiles إلى Earthfiles مسألة تهدئة النسخ وإجراء تعديلات طفيفة. شاهد صفحة البدء لبعض أمثلة Earthfile.
Bazel هي أداة بناء تم تطويرها بواسطة Google لتحسين السرعة والصحة والاستنساخ لقاعدة كود Monorepo الداخلية الخاصة بها. الفرق الرئيسي بين Bazel و Earthly هو أن Bazel هو نظام بناء ، في حين أن الأرضية هي إطار CI/CD للأغراض العامة . للحصول على تفسير أكثر تعمقا ، انظر الأسئلة الشائعة لدينا.
الأرض مرخصة بموجب الإصدار 2.0 ترخيص Mozilla. انظر الترخيص.