Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
- Обновлена основная справка make help с примерами использования - Добавлена подробная справка по линтингу в make role - Создана документация docs/linting-guide.md с полным руководством - Обновлен README.md с примерами команд линтинга - Добавлена ссылка на новую документацию в секции разработки Новая документация включает: - Команды линтинга (все роли и конкретные) - Профили линтинга (production, basic, min) - Типы ошибок и способы исправления - Интеграция с CI/CD - Лучшие практики и устранение неполадок
227 lines
6.4 KiB
Markdown
227 lines
6.4 KiB
Markdown
# 🔍 Руководство по линтингу ролей
|
||
|
||
## Автор
|
||
Сергей Антропов
|
||
Сайт: https://devops.org.ru
|
||
|
||
## Обзор
|
||
|
||
Линтинг ролей - это автоматическая проверка синтаксиса, стиля и соответствия лучшим практикам Ansible. В AnsibleTemplate используется `ansible-lint` для обеспечения качества кода.
|
||
|
||
## Команды линтинга
|
||
|
||
### Проверка всех ролей
|
||
```bash
|
||
make role lint
|
||
```
|
||
- Проверяет все роли в директории `roles/`
|
||
- Использует конфигурацию из `.ansible-lint`
|
||
- Показывает все найденные ошибки и предупреждения
|
||
|
||
### Проверка конкретной роли
|
||
```bash
|
||
make role lint devops
|
||
make role lint ping
|
||
```
|
||
- Проверяет только указанную роль
|
||
- Автоматически валидирует существование роли
|
||
- Показывает доступные роли при ошибке
|
||
|
||
## Профили линтинга
|
||
|
||
Ansible-lint использует несколько профилей для разных уровней строгости:
|
||
|
||
### Production (по умолчанию)
|
||
- Самый строгий профиль
|
||
- Проверяет все правила
|
||
- Рекомендуется для продакшн кода
|
||
|
||
### Basic
|
||
- Базовые правила
|
||
- Подходит для разработки
|
||
- Менее строгий чем production
|
||
|
||
### Min
|
||
- Минимальные правила
|
||
- Только критичные ошибки
|
||
- Для быстрой проверки
|
||
|
||
## Конфигурация
|
||
|
||
Линтинг настраивается через файл `.ansible-lint`:
|
||
|
||
```yaml
|
||
---
|
||
# Профиль по умолчанию
|
||
profile: production
|
||
|
||
# Исключения
|
||
skip_list:
|
||
- yaml[line-length] # Исключить проверку длины строк
|
||
|
||
# Дополнительные правила
|
||
enable_list:
|
||
- name[casing] # Включить проверку именования
|
||
|
||
# Игнорирование файлов
|
||
exclude_paths:
|
||
- .cache/
|
||
- .github/
|
||
- tests/
|
||
```
|
||
|
||
## Типы ошибок
|
||
|
||
### Синтаксические ошибки
|
||
- Неправильный YAML синтаксис
|
||
- Ошибки в Jinja2 шаблонах
|
||
- Неправильная структура playbook
|
||
|
||
### Стилистические ошибки
|
||
- Trailing spaces (лишние пробелы)
|
||
- Неправильные комментарии
|
||
- Неправильное форматирование
|
||
|
||
### Лучшие практики
|
||
- Использование устаревших модулей
|
||
- Неправильное использование become
|
||
- Отсутствие changed_when для command
|
||
|
||
## Примеры исправлений
|
||
|
||
### Trailing spaces
|
||
```yaml
|
||
# ❌ Неправильно
|
||
groups: ["sudo", "docker"]
|
||
# Лишние пробелы в конце строки
|
||
|
||
# ✅ Правильно
|
||
groups: ["sudo", "docker"]
|
||
```
|
||
|
||
### Комментарии
|
||
```yaml
|
||
# ❌ Неправильно
|
||
#Комментарий без пробела
|
||
|
||
# ✅ Правильно
|
||
# Комментарий с пробелом
|
||
```
|
||
|
||
### Changed when
|
||
```yaml
|
||
# ❌ Неправильно
|
||
- name: "Проверка статуса"
|
||
command: "systemctl status nginx"
|
||
|
||
# ✅ Правильно
|
||
- name: "Проверка статуса"
|
||
command: "systemctl status nginx"
|
||
changed_when: false
|
||
```
|
||
|
||
## Автоматическое исправление
|
||
|
||
Некоторые ошибки можно исправить автоматически:
|
||
|
||
```bash
|
||
# Исправить trailing spaces
|
||
sed -i 's/[[:space:]]*$//' roles/*/tasks/*.yml
|
||
|
||
# Исправить комментарии
|
||
sed -i 's/^#\([^ ]\)/# \1/' roles/*/tasks/*.yml
|
||
```
|
||
|
||
## Интеграция с CI/CD
|
||
|
||
Линтинг автоматически запускается в CI/CD пайплайне:
|
||
|
||
```yaml
|
||
# .github/workflows/lint.yml
|
||
name: Lint
|
||
on: [push, pull_request]
|
||
jobs:
|
||
lint:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
- name: Run lint
|
||
run: make role lint
|
||
```
|
||
|
||
## Лучшие практики
|
||
|
||
### 1. Регулярная проверка
|
||
```bash
|
||
# Проверяйте код перед коммитом
|
||
make role lint
|
||
|
||
# Проверяйте конкретную роль при разработке
|
||
make role lint devops
|
||
```
|
||
|
||
### 2. Исправляйте ошибки сразу
|
||
- Не накапливайте ошибки
|
||
- Исправляйте по мере обнаружения
|
||
- Используйте автоматические исправления
|
||
|
||
### 3. Настройте IDE
|
||
- Включите поддержку YAML
|
||
- Настройте автоформатирование
|
||
- Используйте расширения для Ansible
|
||
|
||
### 4. Используйте pre-commit hooks
|
||
```yaml
|
||
# .pre-commit-config.yaml
|
||
repos:
|
||
- repo: https://github.com/ansible/ansible-lint
|
||
rev: v6.0.0
|
||
hooks:
|
||
- id: ansible-lint
|
||
```
|
||
|
||
## Устранение неполадок
|
||
|
||
### Ошибка "Role not found"
|
||
```bash
|
||
❌ Роль 'nonexistent' не найдена в roles/
|
||
📋 Доступные роли:
|
||
- devops
|
||
- ping
|
||
```
|
||
**Решение**: Проверьте правильность имени роли
|
||
|
||
### Ошибка "Docker image not found"
|
||
```bash
|
||
Unable to find image 'ansible-controller:latest' locally
|
||
```
|
||
**Решение**: Соберите Docker образы:
|
||
```bash
|
||
make docker build
|
||
```
|
||
|
||
### Ошибка "Permission denied"
|
||
```bash
|
||
Permission denied: /workspace/roles/
|
||
```
|
||
**Решение**: Проверьте права доступа к файлам
|
||
|
||
## Дополнительные ресурсы
|
||
|
||
- [Ansible Lint Documentation](https://ansible.readthedocs.io/projects/lint/)
|
||
- [Ansible Best Practices](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html)
|
||
- [YAML Style Guide](https://yaml.org/spec/1.2/spec.html)
|
||
|
||
## Поддержка
|
||
|
||
Если у вас возникли вопросы или проблемы с линтингом:
|
||
|
||
1. Проверьте документацию выше
|
||
2. Запустите `make role lint` для диагностики
|
||
3. Обратитесь к команде разработки
|
||
|
||
---
|
||
|
||
**Последнее обновление**: $(date)
|
||
**Версия**: 1.0.0
|