Build
Build і deployment — різні етапи.; істотно: build configuration має бути явною.; - uses: actions/checkout@v4
* debugging;
* error tracking;
* production stack traces;
* frontend monitoring;
* QA.; Build performance важливий для developer experience.; '''Build once, deploy many''' — практика, де artifact збирають один раз, а потім просувають через environments.;</div>
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
== Джерела ==
</div>
'''Build logs''' — записи про те, що відбувалося під час build.; Сотні warnings роблять справжню проблему невидимою.; * зрозуміти, що deployed;
* debug-ити bugs;
* робити rollback;
* зв’язати artifact із commit;
* вести release notes;
* підтримувати users;
* audit-ити production.; Run tests
Добре, якщо є собою:
* security;
* audit;
* trust;
* open source;
* supply chain verification;
* debugging;
* release confidence.; Захист:
COPY .; ↓
'''Небезпека:''' нестабільний build підриває довіру до CI.;== Приклад Docker build ==
OS: linux, windows, macos
завдяки наявності '''Практична роль:''' build matrix користувачі можуть перевірити, що проєкт функціонує не тільки в одному ідеальному середовищі.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Build у DevOps ==
Deploy same artifact to staging
'''Практична роль:''' minification робить frontend artifact компактнішим для користувача.; Linking має змогу бути:
'''Практична роль:''' pipeline робить build не ручним ритуалом, а повторюваним процесом.; * до build;
* під час build;
* після build;
* на artifact;
* у окремому pipeline stage.; "test": "vitest run",
docker build -t my-app:1.0.0 .; - main
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
"builtAt": "2026-05-09T12:00:00Z"
* package manifests;
* lock files;
* version constraints;
* dependency resolution;
* private registries;
* vulnerability scanning;
* license scanning;
* dependency caching;
* transitive dependencies.; Він тісно пов’язаний із reproducible build.; '''Build configuration''' визначає, як саме виконувати build.; Приклад
* це маленький script;
* немає compilation;
* немає dependencies;
* це навчальний проєкт;
* немає production;
* немає release artifact;
* достатньо запуску interpreter.; FROM node:22-alpine AS runtime
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
переважні аспекти:
* flaky builds;
* повільний build;
* неповні dependencies;
* різні результати локально й у CI;
* secrets у artifact;
* вразливі dependencies;
* погані cache keys;
* non-reproducible output;
* failed release через build config;
* build функціонує тільки на одному machine;
* artifact не збережено;
* відсутній version metadata;
* відсутні tests;
* broken lock file.; * C → machine code;
* C++ → machine code;
* Rust → machine code;
* Go → binary;
* Java → bytecode;
* C# → intermediate language;
* Swift → native code.; Production build зазвичай:
== Тематичні мітки ==
Типи перевірок:
'''істотно:''' dev build зручний, але він має змогу бути повільним, небезпечним або занадто відкритим для production-середовища.; FROM nginx:alpine
* IPA;
* archive;
* signed build.;</div>
tree shaking tries to include only needed parts
* є собою дивна помилка;
* cache має змогу бути пошкоджений;
* потрібно перевірити reproducibility;
* CI має збирати з нуля;
* release має бути максимально чистим;
* залежності змінилися.; Етап
Build у monorepo має змогу потребувати:
!; * environment;
* target platform;
* compiler flags;
* optimization level;
* feature flags;
* dependency versions;
* output path;
* debug symbols;
* signing keys;
* architecture;
* runtime;
* secrets references;
* build arguments.; Приклади:
{
↓
</div>
dist/
фабрики: що з чого робити забезпечується через '''Проста аналогія:''' build system — це інструкція; додатково реалізовано у якому порядку й якими інструментами.; '''Production build''' — build, оптимізований для реального використання користувачами.; Build часто пов’язаний із tests.;
Build у Release Management
</div>
|- | Java | Maven, Gradle |- | JavaScript/TypeScript | npm, pnpm, Yarn, Vite, Webpack, Rollup |- | C/C++ | Make, CMake, Ninja, Bazel |- | Rust | Cargo |- | Go | go build |- | .NET | MSBuild, dotnet CLI |- | Python | setuptools, Poetry, Hatch, build |- | Android | Gradle |- | iOS | Xcode build system, xcodebuild |}
main bundle
Build Pipeline
Способи покращення:
Ризики: {{SEO
- автоматизація процесів;
- повторюваність;
- створення artifacts;
- перевірка коду;
- зменшення ручних помилок;
- швидший release;
- CI/CD integration;
- security scanning;
- versioning;
- traceability;
- rollback support;
- контроль dependencies;
- кращий developer workflow;
- однаковий output для команди.;
<syntaxhighlight lang="bash"> * README build instructions; * lock files; * supported platforms; * CI status; * clear dependencies; * reproducible commands; * tests; * release process; * troubleshooting section.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;"> !; Build є собою центральною частиною software delivery, CI/CD і release management.; * syntax issues; * unused variables; * suspicious code; * formatting problems; * unsafe patterns; * accessibility issues у frontend; * dependency issues у частині інструментів.; Build on Linux x64 → output for ARM device <syntaxhighlight lang="bash"> Release management використовує build для створення офіційної версії продукту.; production RUN npm ci '''Code splitting''' розбиває application bundle на частини.; Інакше можна прискорити не те, що реально гальмує.; '''істотно:''' cache має прискорювати build, але не має змінювати його правильність.; Приклад: Frontend build має змогу включати: '''Практична роль:''' incremental build економить час розробника, бо не змушує щоразу збирати весь світ заново.;<syntaxhighlight lang="text"> <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;"> } Приклади lock files: '''Підказка:''' якщо результат build не можна знайти, перевірити й повторити, build process варто покращити.; Dependencies <div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;"> == Environment Variables у Build == Deploy same artifact to production Команда запускає `npm run build`, отримує optimized files у `dist/`, завантажує їх на CDN або static hosting.; * різні versions Node.js; * різні compilers; * різні OS packages; * різні environment variables; * різні dependency registries; * різні local config files; * різні Docker base images.;== Build і Secrets == '''Проста думка:''' build artifact — це те, що залишилося після build і що можна реально використати далі.; '''Development build''' — збірка для локальної роботи.; Deploy або release === Frontend application === '''Проста різниця:''' compiler часто веде до lower-level output, а transpiler зазвичай переводить код у схожу або суміжну мову.; Pipeline запускає `mvn package`, створює `.jar`, запускає tests і публікує artifact у repository.; '''істотно:''' помилки linking часто з’являються не через синтаксис коду, а через неправильні libraries, symbols або build configuration.; Це сигнал, що pipeline зупинив потенційно погану зміну до release.;</div> </div> <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> Build запускається однією командою gcc main.c -o app == Build Configuration == === Java backend === CI build має змогу стартувати при: '''Головна думка:''' не треба збирати production artifact окремо після testing.; '''Головна думка:''' build — це міст між кодом і реальним продуктом.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> Docker build має змогу включати: ↓ * TypeScript → JavaScript; * modern JavaScript → older JavaScript; * JSX → JavaScript; * Sass → CSS; * Less → CSS.; застосовується для: '''Практична роль:''' CI build перевіряє, що проєкт збирається не тільки на комп’ютері автора змін, а й у чистому контрольованому середовищі.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;"> <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> <div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;"> </div> rm -rf dist node_modules/.cache jobs: * довгого feedback loop; * менш частих tests; * більших pull requests; * роздратування команди; * обходу CI; * нижчої продуктивності.; * Build logs можуть бути цінними для debugging, але небезпечними, якщо в них потрапили secrets.;== Development Build == Scan image </div> == Build і Type Checking == переважні аспекти: ↓ Build особливо важливий, якщо: out/ ↓ <syntaxhighlight lang="text"> застосовується в: main.o + utils.o + library.a → app executable '''Практична роль:''' frontend build перетворює код розробника на файли, які браузер має змогу оперативно завантажити.; * checkout code; * install dependencies; * lint; * test; * build; * scan; * upload artifacts; * deploy preview; * publish image.;<syntaxhighlight lang="bash"> '''Практична роль:''' checklist сприяє перетворити build із випадкового набору команд на надійний бізнес-процес.; Приклад: "ci": "npm run lint && npm run test && npm run build" * source repository; * commit; * branch або tag; * build system; * builder identity; * dependencies; * build time; * build command; * test results; * artifact hash; * signature.; Build metadata має змогу містити: Приклади build-time дій: <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> runs-on: ubuntu-latest Це надає можливість: '''Практична роль:''' bundler перетворює багато frontend-файлів у формат, який браузер має змогу оперативно завантажити й виконати.; Не варто збирати release “на чиємусь ноутбуці”.; Приклади: Android artifacts: dotnet publish "version": "1.4.2", '''істотно:''' deterministic build не виникає випадково.; Tests запускаються Build artifact once Compile / Transpile / Bundle <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;"> '''істотно:''' не плутайте build-time configuration і runtime configuration.;</div> Deploy staging Build функціонує в CI == Приклад CI build pipeline == '''Практична роль:''' static build створює сайт, який можна розмістити на CDN або static hosting без постійного backend rendering.; Приклад: CI створює Android AAB або iOS archive, підписує build і відправляє в testing channel або app store process.; '''істотно:''' monorepo без розумного build system має змогу стати дуже повільним.;<syntaxhighlight lang="bash"> Приклад: name: Build Type checking перевіряє відповідність типів.; Store artifact == переважні аспекти Build Process == Підписування сприяє перевірити: </div> Приклад frontend: має змогу містити: Build matrix корисна для: * визначати targets; * запускати compiler; * керувати dependencies; * запускати tests; * кешувати результати; * будувати artifacts; * виконувати scripts; * працювати з multi-module projects; * підтримувати incremental builds.;</div> </div> build: '''SBOM''' або '''Software Bill of Materials''' має змогу створюватися під час build.;== Static Site Build == == Build і Supply Chain Security == * TypeScript compilation; * JSX transformation; * bundling; * minification; * tree shaking; * CSS processing; * image optimization; * font handling; * code splitting; * source maps; * static asset hashing.; Build optimization має змогу стосуватися: == Cross-Compilation == <syntaxhighlight lang="bash"> </div> '''Практична роль:''' backend build створює artifact, який можна запустити на сервері або в container.;</div> </div> * `.env` у Docker image; * private key у mobile package; * API token у frontend bundle; * password у build log; * cloud credentials у artifact; * secret у source map.; dashboard chunk має змогу включати: Secrets не повинні потрапляти в build artifact або build logs.; Не кожному pet project потрібен Bazel, але кожному production-проєкту потрібна повторюваність.; '''Практична роль:''' простий build process знижує бар’єр входу для нових contributors.; програмний пакет ↓ '''Головне правило:''' хороший build має бути автоматичним, повторюваним, перевіреним, зрозумілим і не залежати від магії конкретного комп’ютера.; Приклади за екосистемами: <div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;"> Run integration tests Release build має змогу включати: </div> * hot reload; * source maps; * fast rebuild; * dev server; * mock data; * verbose warnings; * local API endpoints; * relaxed optimization.;</div> Bundler має змогу робити: Build system має змогу: Приклад: <div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;"> ↓ '''Практична роль:''' linting ловить частину проблем до того, як вони потраплять у artifact.;
- вважати його скомпрометованим;
- rotate secret;
- перевірити logs;
- перевірити artifacts;
- видалити небезпечні copies;
- оновити pipeline.; ↓
Build можна повторити на clean environment Reproducible build — build, який із однакового input створює однаковий output.; У software development build має змогу створювати executable file, library, mobile app package, Docker image, frontend bundle, backend artifact, static site, firmware image або release package.; "commit": "a1b2c3d",
Release Build
Build warning не завжди зупиняє build, але має змогу вказувати на проблему.; Користувачі майже ніколи не бачать source code.; істотно: release build має бути traceable: команда повинна знати, з якого commit, коли й ким він був створений.; Artifact зберігається в repository або registry </syntaxhighlight>
істотно: без lock file build має змогу сьогодні зібратися з одними dependencies, а завтра — з іншими.;
</syntaxhighlight>
Практична роль: build tool автоматизує повторювані кроки, які вручну були б повільними й помилковими.;
- binaries;
- packages;
- mobile apps;
- container images;
- firmware;
- installers.; Хороший build process має бути автоматизованим, повторюваним, контрольованим, безпечним і зрозумілим.;
- packages;
- versions;
- dependencies;
- licenses;
- hashes;
- supplier info;
- relationships.; Проста аналогія: tree shaking — це струсити з дерева сухі гілки, які застосунок не використовує.; Причини:
SBOM описує:
Основна ідея: build перетворює код і ресурси проєкту на конкретний artifact, який можна перевірити, передати, встановити або запустити.; Приклад:
- documentation sites;
- blogs;
- marketing websites;
- Jamstack;
- frontend apps;
- static exports;
- landing pages.;
Pipeline створює Docker image, сканує його, підписує й пушить у container registry.; Практична порада: build failure — це не без ускладнень перешкода.; * dependency graph;
- affected builds;
- remote caching;
- task orchestration;
- parallel execution;
- package boundaries;
- incremental checks;
- selective testing.; * Матеріали щодо reproducible builds, deterministic builds, build cache, dependency locking і software supply chain security.;== Ризики Build Process ==
Приклад checklist для Build
↓
Deterministic Build
істотно: якщо clean build функціонує, а incremental build ні, проблема має змогу бути в cache або dependency tracking.; є собою зрозумілий README для build process Приклад: Debug build — збірка для розробки й налагодження.; Вони отримують результат build: застосунок у телефоні, `.exe` файл, сайт у браузері, Docker image на сервері або package у package registry.; * не мати build script;
- збирати production вручну;
- не використовувати lock file;
- commit-ити `dist/` без потреби;
- не знати, який artifact deployed;
- не запускати tests у build;
- вшивати secrets у artifact;
- плутати dev build і production build;
- ігнорувати build warnings;
- не зберігати artifacts;
- не мати version metadata;
- не перевіряти Docker image size;
- використовувати `latest` без контролю;
- не чистити cache при дивних помилках;
- не документувати build process.; Artifact має version metadata
Build artifact — результат build process.; Minification зменшує розмір JavaScript, CSS або HTML.; .; FROM node:22 AS build
Static site build створює готові HTML, CSS і JavaScript файли.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
"без ускладнень запусти якось, у мене функціонує."
"buildNumber": 3481,
{| class="wikitable"
<syntaxhighlight lang="bash">
</div>
'''Проста різниця:''' build створює “що запускати”, deployment визначає “де й як запускати”.; Приклади:
'''істотно:''' build logs потрібні для debugging, але їх не можна перетворювати на місце витоку tokens, passwords або private keys.; WORKDIR /app
* менший bundle;
* швидше завантаження;
* менше JavaScript для виконання;
* кращий frontend performance.;== Висновок ==
== Build Once, Deploy Many ==
* compile TypeScript;
* bundle assets;
* generate static pages;
* install dependencies;
* create image.;</div>
↓
- name: Run tests
Minification має змогу:
</div>
== Bundler ==
* швидше локально;
* менше CPU;
* менше очікування;
* комфортно для великих проєктів;
* краще developer experience.; Недоліки:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Приклад:
== Build Provenance ==
Debug build часто має:
- менший final image;
- немає build tools у production image;
- краща безпека;
- чистіший runtime;
- швидший deployment.; ↓
Incremental Build
Build Logs
Build pipeline — послідовність автоматизованих кроків для створення й перевірки artifact.; * Reproducible builds важливі для довіри до open source і security-sensitive software.; !; * APK;
- AAB.; Development build не повинен випадково потрапляти в production.; переважні аспекти:
Transpiler
go build -o server ./cmd/server
Практична роль: Docker build пакує application і його runtime-залежності в image, який можна запускати однаково в різних середовищах.; Якщо команда звикає ігнорувати червоний pipeline, pipeline втрачає сенс.;== Коли Build має змогу бути простим == Основні переважні аспекти:
Cross-compilation — збірка програми для платформи, відмінної від платформи, на якій виконується build.;
public/
Build і Minification
Практична роль: швидкий build сприяє команді частіше перевіряти зміни й менше боятися запускати pipeline.; Він має змогу включати compilation, transpilation, bundling, linking, testing, scanning, packaging, signing і публікацію artifact.; * caching;
- incremental builds;
- parallelization;
- remote cache;
- dependency pruning;
- test splitting;
- faster tools;
- smaller modules;
- build profiling.; * process HTTP request;
- connect to database;
- read environment variable;
- handle user action;
- write logs.;
- security response;
- compliance;
- vulnerability tracking;
- supply chain security;
- enterprise audits.;
- compilation;
- packaging;
- dependency resolution;
- static analysis;
- tests;
- migrations packaging;
- Docker image build;
- configuration validation;
- artifact creation;
- binary generation.; Погано:
'''Практична роль:''' compiler перетворює людський код на форму, яку має змогу виконати комп’ютер або runtime.; '''Головна перевага:''' build process перетворює “у мене функціонує” на “ми можемо це стабільно зібрати й перевірити”.; У Build pipeline часто передбачено security scanning.; Build має змогу бути простим, якщо:
* stale cache;
* cache poisoning;
* неправильні cache keys;
* різні результати локально й у CI;
* security risks у shared cache.;</div>
'''Критично:''' firmware build має бути дуже обережним, бо помилка має змогу зробити device непрацездатним або складним для відновлення.; DevOps звертає увагу на:
admin chunk
</div>
Linting під час build сприяє знайти:
</div>
</div>
<syntaxhighlight lang="bash">
Приклад:
'''Build system''' — платформа, яка описує, як саме збирати проєкт.; Create artifact
Ризики:
== Reproducible Build ==
<syntaxhighlight lang="text">
== Debug Build ==
'''Clean build''' — збірка з очищеного стану, без використання старих intermediate files або cache.; Це важливий етап між написанням коду й реальним використанням програми.;<syntaxhighlight lang="yaml">
'''Критично:''' build artifact має змогу містити вразливі dependencies або secrets.; '''Docker build''' створює Docker image з Dockerfile і build context.;
- commit SHA;
- branch;
- build time;
- build number;
- CI job ID;
- compiler version;
- dependency versions;
- target platform;
- artifact checksum;
- builder identity;
- test status.;
Приклади:
Поширені помилки:
Architecture: x64, arm64
- `NODE_ENV`;
- `BUILD_ENV`;
- `API_BASE_URL`;
- `VERSION`;
- `COMMIT_SHA`;
- `FEATURE_FLAG`;
- `PUBLIC_ANALYTICS_ID`.;
Firmware build створює software image для embedded devices.; У monorepo багато проєктів або packages живуть в одному repository.;
Build Docker image
push:
Приклад простого build script
Build і Configuration Drift
Tests можуть запускатися: |- | Build | Створити artifact | Зібрати Docker image |- | Deployment | Запустити artifact у середовищі | Розгорнути image у Kubernetes |}
Build і Deployment
</syntaxhighlight> Build tool — конкретний інструмент, який запускає або керує build process.; * швидші builds;
- менше навантаження;
- ефективніші CI pipelines;
- зручніше для monorepos.; run: npm ci
- `package-lock.json`;
- `pnpm-lock.yaml`;
- `yarn.lock`;
- `poetry.lock`;
- `Cargo.lock`;
- `go.sum`;
- `Gemfile.lock`.;== Multi-Stage Build ==
Install dependencies
source code ≠ release artifact має змогу включати: Build — це не без ускладнень “натиснути кнопку”.; Build має змогу включати багато кроків:
Build artifact має змогу бути підписаний.; { </syntaxhighlight> </syntaxhighlight>
SBOM у Build
</syntaxhighlight>
Або:
- version bump;
- changelog;
- tests;
- security scan;
- signing;
- package upload;
- release notes;
- artifact storage;
- deployment approval;
- tag creation;
- rollback artifact.; Практична порада: що важливіший програмний продукт, то менше build має залежати від ручних кроків і локальних машин.;== Firmware Build ==
tsc --noEmit Приклад: Build logs доступні для debugging
Incremental build збирає тільки те, що змінилося.; RUN npm run build Output часто зберігається в:
істотно: optimization має спиратися на вимірювання.; істотно: build process має відповідати масштабу проєкту.;CI build зазвичай виконує:
Build Warning
application uses 3 functions
"lint": "eslint .",
Frontend Build
COPY .;</syntaxhighlight> переважні аспекти: Приклади:
pull_request:
Build і Security Scanning
Type checking корисний для:
- завантажувати тільки потрібний код;
- прискорити initial load;
- lazy-load routes;
- оптимізувати large apps;
- покращити user experience.; settings chunk
- C/C++ потрібно компілювати;
- TypeScript потрібно transpile-ити в JavaScript;
- React app потрібно bundle-ити;
- Java потрібно компілювати у bytecode;
- Android app потрібно зібрати в APK або AAB;
- Docker app потрібно зібрати в image;
- static site generator створює HTML/CSS/JS output.;
переважні аспекти:
</div>
== Хороші практики Build ==
== Production Build ==
== Загальний характеристика ==
"build": "vite build",
release
- `linux-amd64`;
- `linux-arm64`;
- `windows-x64`;
- `macos-arm64`;
- `android-release`;
- `ios-debug`;
- `web-production`;
- `server`;
- `docs`;
- `test`.; * dependency graph analysis;
- tree shaking;
- code splitting;
- minification;
- asset processing;
- CSS extraction;
- source maps;
- chunk generation;
- module resolution.; on:
}
↓
має змогу включати:
Приклади: Приклади:
Див.; додатково
- build speed;
- artifact size;
- runtime performance;
- memory usage;
- dependency size;
- Docker image size;
- cache efficiency;
- parallel execution;
- test selection;
- bundle splitting.; Build майже завжди залежить від dependencies.;== Build Performance ==
Приклад спрощено:
Практична роль: цей приклад відокремлює build stage від runtime stage, щоб production image був чистішим.; Приклади:
Code Splitting
Якщо secret потрапив у build:
COPY --from=build /app/dist ./dist
Build Cache
- name: Install dependencies
Run lint
!; * Практики testing, linting, type checking, SBOM, artifact signing, provenance і secure build pipelines.; Frontend artifact не є собою приватним.; Перевірки можуть включати:
Tree shaking видаляє невикористаний code з bundle.;== Build і Linting ==
- local;
- remote;
- CI cache;
- compiler cache;
- dependency cache;
- Docker layer cache;
- artifact cache.; Для цього потрібні tests.; переважні аспекти:
↓
У CI/CD build запускається автономно.;== Clean Build ==
Практична роль: version — це паспорт build artifact.; Ризики:
- завантаження dependencies;
- перевірку версій;
- компіляцію;
- transpilation;
- bundling;
- linking;
- minification;
- tree shaking;
- generation файлів;
- копіювання assets;
- запуск tests;
- static analysis;
- security scanning;
- створення package;
- створення Docker image;
- підписування artifact;
- створення checksum;
- публікацію artifact у registry.; Якщо secret уже був у artifact, його потрібно замінити.;
- Astro;
- Next.js static export;
- Gatsby;
- Hugo;
- Eleventy;
- Docusaurus;
- VitePress;
- MkDocs.; Практична роль: SBOM відповідає на питання: “З чого саме складається цей build?”
- cross-compilation;
- hardware-specific flags;
- linker scripts;
- memory layout;
- bootloader integration;
- binary image generation;
- checksums;
- signing;
- flashing package.;</syntaxhighlight>
Mobile build враховує:
Build Optimization
tsc Build target — конкретний результат або платформа, для якої виконується build.;== Build Number і Version ==
Build і Source Maps
COPY package*.json ./
'''Release build''' — збірка для production або офіційного релізу.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Build Failure ==
RUN npm ci
* debug symbols;
* менш агресивну оптимізацію;
* verbose logs;
* assertions;
* source maps;
* developer-friendly errors;
* hot reload;
* dev server;
* diagnostic tools.; Dependency management охоплює:
Build є собою важливою частиною software supply chain.; !; '''Build time''' — час створення artifact.; * Docker image — це теж build artifact.;== Build Tool ==
'''істотно:''' cross-compilation потребує правильного toolchain, libraries і target configuration.; Приклади:
'''Найлюдяніший факт:''' source code — це рецепт, build process — це кухня, а build artifact — готова страва, яку реально отримує користувач системи.;</div>
== Linker ==
має змогу включати:
- deprecated API;
- unused variable;
- large bundle size;
- vulnerable dependency;
- missing source map;
- type mismatch;
- unstable feature;
- peer dependency warning;
- configuration fallback.; ↓
</syntaxhighlight> Практична роль: debug build створений для розробника, а не для кінцевого користувача.; Linker поєднує compiled object files і libraries у фінальний executable або library.; npm run lint
- Bazel;
- Nx;
- Turborepo;
- Pants;
- Buck;
- Gradle multi-project;
- pnpm workspaces.; Саме з цієї причини в професійній розробці істотно не лише “код функціонує в мене локально”, а й “чи можна стабільно зібрати той самий результат у CI, протестувати його й доставити в production”.;== Source Code і Build ==
- `.exe`;
- `.dll`;
- `.jar`;
- `.war`;
- `.apk`;
- `.aab`;
- `.ipa`;
- `.whl`;
- `.tar.gz`;
- Docker image;
- frontend `dist/`;
- static site output;
- compiled CSS;
- JavaScript bundle;
- firmware image;
- release archive;
- source maps;
- checksums.;
- timestamps;
- random values;
- different dependency versions;
- different OS packages;
- non-pinned images;
- network downloads;
- local machine differences;
- environment variables;
- generated files.; * syntax error;
- failing tests;
- missing dependency;
- incompatible version;
- network error;
- wrong environment variable;
- insufficient memory;
- disk full;
- permission issue;
- broken lock file;
- compiler error;
- lint error;
- security scan failure;
- flaky test;
- invalid configuration.; .; істотно: warnings не варто ігнорувати місяцями.; Повільний build призводить до:
- unit tests;
- integration tests;
- end-to-end tests;
- smoke tests;
- type checks;
- linting;
- static analysis;
- security scans;
- performance tests.; Краще тестувати той самий artifact, який піде в production.;
↓
arm64
</syntaxhighlight>
- мінімізує assets;
- вимикає dev warnings;
- використовує production environment;
- має optimized output;
- проходить tests;
- проходить security scans;
- має version info;
- створює deployment artifact;
- не містить test-only code;
- не містить secrets.; build/
make
істотно: build, який успішно створив artifact, не гарантує, що програма функціонує правильно.; Критично: якщо build pipeline скомпрометований, attacker має змогу створити “офіційно затверджений” artifact зі шкідливим кодом.;== Build у CI/CD ==
Підписують:
Backend Build
Критично: якщо secret потрапив у frontend build, він стає доступним користувачам.; Практична роль: type checking надає можливість зупинити build ще до runtime-помилки.; * Поганий build process часто стає “усною традицією” команди.; SBOM корисний для:
}
"scripts": {
Корисні для:
Docker Build
- хто створив artifact;
- чи artifact не змінювався;
- чи можна довіряти release;
- чи artifact походить із правильного pipeline.; * можуть розкривати source code;
- можуть містити шляхи файлів;
- можуть допомогти attackers зрозуміти структуру app;
- потребують контрольованого доступу в production.; Приклад:
Приклади bundlers:
Але logs можуть випадково містити sensitive data.; '''Небезпека:''' якщо тільки одна людина знає, як зібрати проєкт, build process уже є собою ризиком для команди.; Build tools
'''істотно:''' реальний production pipeline часто додатково додає caching, security scanning, artifact upload і deployment stages.; '''Build failure''' — ситуація, коли build не завершився успішно.; * Документація Docker build, frontend build systems, backend build tools, mobile build pipelines і cloud CI platforms.; Source code
* Webpack;
* Vite;
* Rollup;
* esbuild;
* Parcel;
* Turbopack у частині сучасних frontend-сценаріїв.; Захист:
Небезпечні приклади:
Це істотно для:
Цікаві факти про Build
- dependency versions;
- compiler version;
- locale;
- timezone;
- timestamps;
- file ordering;
- random seeds;
- build paths;
- environment variables.;=== Mobile app ===
mvn package
Можливі проблеми:
Практична роль: build target надає можливість одному проєкту створювати різні artifacts для різних середовищ і платформ.;- optimization;
- minification;
- stripped debug symbols у частині сценаріїв;
- production configuration;
- security checks;
- signing;
- checksums;
- version metadata;
- final artifacts;
- reproducible або traceable output;
- no development-only flags.; * швидше завантаження;
- менше traffic;
- кращий frontend performance.;== Приклади сценаріїв використання ==
</syntaxhighlight> npm run build Release build часто має:
</syntaxhighlight>
Build cache зберігає результати попередніх build-кроків, щоб не виконувати їх повторно.; Frontend build готує web application для браузера.;</div>
</div>
== Build Metadata ==
</div>
</div>
У DevOps build є собою частиною delivery lifecycle.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
steps:
'''Практична роль:''' metadata сприяє відповісти на питання: “Що саме зараз запущено?”
'''Практична роль:''' code splitting не змушує користувача завантажувати весь застосунок одразу.; Суть
* знайти помилку;
* зрозуміти failed step;
* побачити versions;
* перевірити warnings;
* audit-ити release;
* debug-ити CI;
* аналізувати performance build-у.; Типовий build-процес:
* README з командою запуску;
* lock file;
* basic tests;
* simple CI;
* versioning;
* clear output.; Приклад:
* embedded systems;
* mobile development;
* IoT;
* server binaries;
* multi-platform CLI tools;
* Docker multi-arch images.; * static linking;
* dynamic linking;
* link-time optimization;
* symbol resolution.;<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Deploy to test
Configuration drift виникає, коли environments або build machines відрізняються.; * Build once, deploy many зменшує різницю між staging і production.; Це часта причина production-багів.;run: npm run build
Build Artifact
Практична роль: script `ci` дає одну команду для перевірки, яку можна запускати і локально, і в CI.; Його потрібно проектувати.;== Dependency Management ==
Критично: unsigned artifact легше непомітно підмінити в software supply chain.;=== Go CLI tool ===
Build у Open Source
як ілюстрація:
Build і Runtime
Compiler або компілятор перетворює код однією мовою в іншу форму, часто ближчу до виконання машиною або runtime.; Приклади: Приклад:
переважні аспекти: Build logs допомагають: iOS artifacts:
Monorepo Build
Lint або static analysis запускається .next/
make clean Практична роль: multi-stage build надає можливість будувати в одному середовищі, а запускати в легшому й безпечнішому.;</syntaxhighlight>
- Make;
- CMake;
- Gradle;
- Maven;
- Bazel;
- Ninja;
- MSBuild;
- Cargo;
- npm scripts;
- pnpm scripts;
- Yarn scripts;
- Poetry у Python-сценаріях;
- setuptools;
- Hatch;
- Pants;
- Buck.;
Приклад:
FROM node:22-alpine AS build
- є собою production deployment;
- є собою mobile app release;
- є собою compiled language;
- є собою frontend bundle;
- є собою Docker images;
- є собою CI/CD;
- є собою package distribution;
- є собою security requirements;
- є собою compliance;
- є собою open source users;
- є собою multi-platform support;
- є собою release artifacts;
- є собою rollback process.;
</div>
COPY package*.json ./
branches:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
cargo build --release
=== Dockerized service ===
</div>
Build Target
Build matrix — набір варіантів build для різних платформ, версій або конфігурацій.; WORKDIR /app Runtime — час виконання програми.; npm run dev Mobile build створює package для мобільної платформи.; vendor chunk
CI збирає binaries для Linux, macOS і Windows, додає checksums і публікує release.; Dependencies зафіксовані lock file
Але навіть простий проєкт має змогу виграти від:
- libraries;
- CLI tools;
- cross-platform apps;
- open source projects;
- compatibility testing;
- multi-runtime support.; npm run build
<syntaxhighlight lang="text"> staging
істотно: production має запускати перевірений artifact, а не випадковий стан файлів із ноутбука розробника.; * Найкращий build process зазвичай нудний: запускається одна команда, усе проходить, artifact збережено.; це бізнес-процес перетворення source code, assets, dependencies і configuration у готовий результат, який можна запускати, тестувати, розгортати або публікувати виступає ключовою рисою Build або збірка.; Приклади інструментів: RUN npm run build
COPY package*.json ./
- Build Artifact
- Compiler
- Transpiler
- Bundler
- Linker
- Build System
- CI/CD
- DevOps
- Artifact
- Release
- Deployment
- Docker Build
- Docker Image
- Package Manager
- Dependency Management
- Reproducible Build
- Build Cache
- Clean Build
- Incremental Build
- Frontend
- Backend
- Testing
- SBOM
- Software Supply Chain
- Документація
development