Stencil — это фреймворк для создания веб-компонентов, который оптимизирован для сборки быстрых, независимых и переиспользуемых UI-модулей. Интеграция с GitLab CI позволяет автоматизировать процессы сборки, тестирования и деплоя компонентов, обеспечивая стабильность и воспроизводимость результата.
Проект Stencil обычно имеет следующую структуру:
my-stencil-app/
├── src/
│ ├── components/
│ └── index.ts
├── www/
├── stencil.config.ts
├── package.json
└── tsconfig.json
Для GitLab CI важны директории src и www, а
также конфигурационные файлы package.json и
stencil.config.ts, которые определяют скрипты сборки,
тестирования и генерации компонентов.
.gitlab-ci.ymlФайл .gitlab-ci.yml содержит описание пайплайнов для
GitLab CI. Пример базовой конфигурации для проекта Stencil:
stages:
- install
- build
- test
- deploy
cache:
paths:
- node_modules/
install_dependencies:
stage: install
image: node:20
script:
- npm ci
build_stencil:
stage: build
image: node:20
script:
- npm run build
artifacts:
paths:
- www/
expire_in: 1 week
test_stencil:
stage: test
image: node:20
script:
- npm run test
allow_failure: false
deploy_stencil:
stage: deploy
image: node:20
script:
- npm run build
- echo "Деплой на сервер или в облако"
only:
- main
Ключевые моменты конфигурации:
node_modules для
ускорения сборки.needs:test_stencil:
stage: test
needs: ["build_stencil"]
script:
- npm run test
node_modules, можно кэшировать директорию сборки
.stencil и другие временные файлы, используемые в процессе
компиляции:cache:
paths:
- node_modules/
- .stencil/
Stencil использует TypeScript и имеет собственные механизмы сборки компонентов:
npm run build — собирает
веб-компоненты в директорию www с минификацией,
CSS-шейдингом и оптимизацией зависимостей.npm run test — запускает unit-тесты
для компонентов с помощью Jest и Puppeteer, включая проверку рендеринга
в виртуальном DOM.npm run lint — проверка кода на
соответствие стандартам качества и стилю.В пайплайне GitLab CI эти команды следует запускать на отдельных стадиях, чтобы при ошибке тестов или линтинга сборка не деплоилась.
Деплой Stencil-компонентов в GitLab CI может выполняться различными способами:
www/
можно копировать на сервер или в облачные хранилища (например, GitLab
Pages, AWS S3, Netlify).npm publish, с учетом секретов GitLab CI
(NPM_TOKEN).Пример деплоя на GitLab Pages:
pages:
stage: deploy
script:
- npm run build
- mv www public
artifacts:
paths:
- public
only:
- main
Для крупных проектов с множеством пакетов рекомендуется:
rules и changes для экономии ресурсов.semantic-release или аналогичные инструменты.Stencil-компоненты хорошо подходят для визуального тестирования:
visual_tests:
stage: test
script:
- npm run test:visual
Такой подход обеспечивает контроль качества интерфейсов и предотвращает случайные изменения внешнего вида компонентов.
GitLab CI в связке с Stencil позволяет построить надежный процесс непрерывной интеграции и доставки, автоматизируя сборку, тестирование, деплой и проверку компонентов. Правильная конфигурация пайплайна снижает вероятность ошибок и ускоряет выпуск новых версий компонентов, обеспечивая предсказуемое поведение проекта на всех этапах разработки.