Facebook компаниясы Buck2 құрастыру жүйесін жариялады

Facebook әртүрлі бағдарламалау тілдеріндегі кодты қамтитын өте үлкен репозиторийлерден жобаларды құруға бағытталған Buck2 жаңа құрастыру жүйесін енгізді. Жаңа енгізу мен Facebook бұрын қолданған Buck жүйесі арасындағы негізгі айырмашылықтар Java орнына Rust тілін қолдану және құрастыру процесінің тиімділігі мен өнімділігін айтарлықтай арттыру болып табылады (бірдей инфрақұрылымдағы ішкі сынақтарда Buck2 құрастыруды орындайды. тапсырмалар Бакке қарағанда екі есе жылдам). Код Apache 2.0 лицензиясы бойынша таратылады.

Жүйе белгілі бір тілдердегі құрылыс кодымен байланысты емес және қораптан тыс Facebook пайдаланатын C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell және OCaml тілдерінде жазылған құрылыс жобаларын қолдайды. Python негізіндегі Starlark тілі (Bazel сияқты) қондырмаларды жобалау, сценарийлер мен ережелерді құру үшін қолданылады. Starlark құрастыру жүйесінің мүмкіндіктерін кеңейтуге және салынып жатқан жобаларда қолданылатын белгілі бір тілдерден деректеме алуға мүмкіндік береді.

Жоғары өнімділікке нәтижелерді кэштеу, жұмысты параллельдеу және тапсырмаларды қашықтан орындауды қолдау (Remote Build Execution) арқылы қол жеткізіледі. Құрастыру ортасында «тығыздық» ұғымы қолданылады – құрастырылған код сыртқы әлемнен ажыратылады, құрастыру процесінде сырттан ештеңе жүктелмейді және әртүрлі жүйелерде жұмысты қайталап орындау бірдей нәтижеге әкеледі ( қайталанатын құрастырулар, мысалы, әзірлеушінің машинасында жобаны құру нәтижесі үздіксіз интеграция серверіндегі құрастырумен бірдей болады). Тәуелділіктің жоқтығы жағдайы Buck2-де қателік ретінде қабылданады.

Buck2 негізгі мүмкіндіктері:

  • Бағдарламалау тілдерін қолдау ережелері мен құрастыру жүйесінің өзегі толығымен бөлінген. Ережелер Starlark тілінде, ал Starlark құралдар жинағы мен іске асыру Rust тілінде жазылған.
  • Құрастыру жүйесінде Бак пен Базелмен салыстырғанда жұмысты параллельдеу тереңдігін арттыруға және қателердің көптеген түрлерін болдырмауға мүмкіндік беретін бір инкрементті тәуелділік графигі (кезеңдерге бөлінбестен) қолданылады.
  • GitHub сайтында жарияланған Buck2 коды және бағдарламалау тілін қолдау ережелері Facebook инфрақұрылымында пайдаланылатын ішкі нұсқамен дерлік бірдей (айырмашылық тек компилятор басылымдарымен байланыстыруда және Facebook пайдаланатын серверлерді құруда).
  • Құрастыру жүйесі қашықтағы серверлерде тапсырмаларды орындауға мүмкіндік беретін қашықтағы тапсырмаларды орындау жүйелерімен интеграцияны ескере отырып жасалған. Қашықтан орындау API интерфейсі Bazel бағдарламасымен үйлесімді және Buildbarn және EngFlow бағдарламаларымен үйлесімділік үшін сыналған.
  • Виртуалды файлдық жүйелермен интеграция қамтамасыз етілген, онда бүкіл репозиторийдің мазмұны ұсынылған, бірақ іс жүзінде жұмыс репозиторийдің бір бөлігінің нақты жергілікті кесіндісімен жүзеге асырылады (әзірлеуші ​​​​барлық репозиторийді көреді, бірақ тек қажеттіні ғана көреді). рұқсат етілген файлдар репозиторийден алынады). Sapling пайдаланатын EdenFS және Git LFS негізіндегі VFS қолдау көрсетеді.

Ақпарат көзі: opennet.ru

пікір қалдыру