Для автоматизации анализа производительности, доступности и SEO веб-приложений в процессе непрерывной интеграции удобно использовать Lighthouse через командную строку или Node.js API. В CI/CD-пайплайнах это позволяет получать отчёты при каждом коммите или деплое, выявлять регрессии и автоматически блокировать некачественные изменения.
Lighthouse устанавливается глобально через npm:
npm install -g lighthouse
Для интеграции в Node.js-проекты предпочтительнее локальная установка:
npm install --save-dev lighthouse
Локальная установка обеспечивает стабильные версии для всех участников команды и позволяет вызывать Lighthouse из скриптов npm.
Основные команды для запуска:
lighthouse https://example.com --output json --output-path ./reports/report.json
--output json — вывод отчёта в формате JSON, удобном
для обработки скриптами CI.--output-path — путь, куда сохраняется отчёт.Для HTML-отчёта можно использовать:
lighthouse https://example.com --output html --output-path ./reports/report.html
В CI/CD предпочтительно формировать JSON-отчёты, чтобы можно было парсить метрики и проверять пороговые значения.
Node.js API обеспечивает гибкость для сложных сценариев:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {logLevel: 'info', output: 'json', port: chrome.port};
const runnerResult = await lighthouse('https://example.com', options);
const reportJson = runnerResult.report;
const fs = require('fs');
fs.writeFileSync('lighthouse-report.json', reportJson);
await chrome.kill();
})();
Ключевые моменты:
Для Jenkins можно добавить этап в Jenkinsfile:
pipeline {
agent any
stages {
stage('Lighthouse Audit') {
steps {
sh 'npx lighthouse https://example.com --output json --output-path reports/lighthouse.json'
}
post {
always {
archiveArtifacts artifacts: 'reports/lighthouse.json', allowEmptyArchive: true
}
}
}
}
}
Особенности:
archiveArtifacts сохраняет отчёты как артефакты
сборки.npx позволяет запускать локально
установленную версию Lighthouse без глобальной установки.Пример workflow:
name: Lighthouse Audit
on:
push:
branches: [ main ]
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm install
- run: npx lighthouse https://example.com --output json --output-path ./reports/lighthouse.json
- name: Upload Report
uses: actions/upload-artifact@v3
with:
name: lighthouse-report
path: ./reports/lighthouse.json
Пояснения:
Для контроля качества полезно использовать performance budgets:
{
"performanceBudget": {
"metrics": {
"first-contentful-paint": 2000,
"interactive": 3000
},
"resourceCounts": {
"script": 20,
"image": 50
}
}
}
В CI/CD можно добавить скрипт на Node.js, который парсит
report.json и прерывает сборку при превышении лимитов.
const report = require('./reports/lighthouse.json');
if (report.categories.performance.score * 100 < 90) {
console.error('Performance budget exceeded');
process.exit(1);
}
Для контейнеризированного CI можно использовать официальный Docker-образ Lighthouse:
docker run --rm -v $(pwd)/reports:/home/chrome/reports lighthouse/lighthouse https://example.com --output json --output-path /home/chrome/reports/report.json