Интеграция CI/CD
Что вы сможете делать после изучения
- Понимать, почему в средах CI/CD необходим неинтерактивный режим
- Освоить использование флага
--yes/-yв командахinstallиsync - Научиться интегрировать OpenSkills в CI-платформы: GitHub Actions, GitLab CI
- Понять процесс автоматической установки навыков в Docker-контейнерах
- Освоить стратегии обновления и синхронизации навыков в среде CI/CD
- Избегать сбоев в CI/CD-конвейерах из-за интерактивных запросов
Предварительные знания
В этом уроке предполагается, что вы уже ознакомились с разделами Установка первого навыка, Синхронизация навыков с AGENTS.md и Подробное описание команд.
Ваша текущая проблема
Вы, возможно, уже уверенно используете OpenSkills в локальной среде, но столкнулись с проблемами в CI/CD:
- Интерактивные запросы приводят к сбоям: в CI-конвейере появляется окно выбора, и выполнение останавливается
- Необходимость установки навыков при автоматизированном деплое: при каждой сборке требуется переустановка навыков, но невозможно автоматически подтвердить операцию
- Рассинхронизация конфигураций между средами: конфигурации навыков в средах разработки, тестирования и продакшена не совпадают
- Отсутствие автоматизации генерации AGENTS.md: после каждого деплоя требуется ручной запуск команды sync
- Отсутствие навыков при сборке Docker-образа: после запуска контейнера требуется ручная установка навыков
На самом деле OpenSkills предоставляет флаг --yes/-y, специально предназначенный для неинтерактивных сред, позволяющий автоматизировать все операции в CI/CD-конвейере.
Когда применять этот подход
Сценарии применения интеграции CI/CD:
| Сценарий | Требуется ли неинтерактивный режим | Пример |
|---|---|---|
| GitHub Actions | ✅ Да | Автоматическая установка навыков при каждом PR или push |
| GitLab CI | ✅ Да | Автоматическая синхронизация AGENTS.md при merge request |
| Docker-сборка | ✅ Да | Автоматическая установка навыков в контейнер при сборке образа |
| Jenkins Pipeline | ✅ Да | Автоматическое обновление навыков при непрерывной интеграции |
| Скрипты инициализации среды разработки | ✅ Да | Однокомандая настройка окружения для новых разработчиков |
| Деплой в продакшен | ✅ Да | Автоматическая синхронизация последних версий навыков при деплое |
Рекомендуемые практики
- Локальная разработка — интерактивный режим: при ручной работе можно тщательно выбирать устанавливаемые навыки
- CI/CD — неинтерактивный режим: в автоматизированных процессах обязательно используйте флаг
-yдля пропуска всех запросов - Стратегия разделения сред: в разных средах используйте различные источники навыков (например, приватные репозитории)
Ключевая концепция: неинтерактивный режим
Команды install и sync в OpenSkills поддерживают флаг --yes/-y, предназначенный для пропуска всех интерактивных запросов:
Поведение команды install в неинтерактивном режиме (исходный код install.ts:424-427):
// Interactive selection (unless -y flag or single skill)
let skillsToInstall = skillInfos;
if (!options.yes && skillInfos.length > 1) {
// Вход в интерактивный процесс выбора
// ...
}Особенности неинтерактивного режима:
- Пропуск выбора навыков: устанавливаются все найденные навыки
- Автоматическое перезаписывание: при обнаружении существующих навыков выполняется прямая замена (отображается
Overwriting: <skill-name>) - Пропуск подтверждения конфликтов: без запроса на подтверждение выполняется немедленная замена
- Совместимость с headless-окружением: корректная работа в CI-окружениях без TTY
Поведение функции warnIfConflict (исходный код install.ts:524-527):
if (skipPrompt) {
// Автоматическое перезаписывание в неинтерактивном режиме
console.log(chalk.dim(`Overwriting: ${skillName}`));
return true;
}::: important Ключевая концепция
Неинтерактивный режим: использование флага --yes/-y для пропуска всех интерактивных запросов, позволяющее командам автоматически выполняться в CI/CD, скриптах и headless-окружениях без ожидания пользовательского ввода.
:::
Практическое руководство
Шаг 1: Опробуйте неинтерактивную установку
Зачем Сначала протестируйте поведение неинтерактивного режима в локальной среде, чтобы понять отличия от интерактивного режима.
Откройте терминал и выполните:
# Неинтерактивная установка (устанавливает все найденные навыки)
npx openskills install anthropics/skills --yes
# Или используйте сокращённую форму
npx openskills install anthropics/skills -yОжидаемый результат:
Cloning into '/tmp/openskills-temp-...'...
...
Found 3 skill(s)
Overwriting: codebase-reviewer
Overwriting: file-writer
Overwriting: git-helper
✅ Installed 3 skill(s)
Next: Run 'openskills sync' to generate AGENTS.mdПояснение:
- При использовании флага
-yпропускается интерфейс выбора навыков - Все найденные навыки устанавливаются автоматически
- Если навыки уже существуют, отображается
Overwriting: <skill-name>и выполняется перезапись - Никакие диалоги подтверждения не отображаются
Шаг 2: Сравните интерактивный и неинтерактивный режимы
Зачем Путём сравнения лучше понять различия между двумя режимами и сценарии их применения.
Выполните следующие команды для сравнения режимов:
# Очистка существующих навыков (для тестирования)
rm -rf .claude/skills
# Интерактивная установка (отображает интерфейс выбора)
echo "=== Интерактивная установка ==="
npx openskills install anthropics/skills
# Очистка существующих навыков
rm -rf .claude/skills
# Неинтерактивная установка (автоматически устанавливает все навыки)
echo "=== Неинтерактивная установка ==="
npx openskills install anthropics/skills -yОжидаемый результат:
Интерактивный режим:
- Отображается список навыков с возможностью выбора через пробел
- Требуется нажатие Enter для подтверждения
- Возможен выборочная установка части навыков
Неинтерактивный режим:
- Непосредственно отображается процесс установки
- Автоматически устанавливаются все навыки
- Не требуется никакого пользовательского ввода
Таблица сравнения:
| Характеристика | Интерактивный режим (по умолчанию) | Неинтерактивный режим (-y) |
|---|---|---|
| Выбор навыков | Отображает интерфейс выбора с ручным отбором | Автоматически устанавливает все найденные навыки |
| Подтверждение перезаписи | Запрашивает подтверждение перезаписи существующих навыков | Автоматически перезаписывает с выводом информационного сообщения |
| Требование TTY | Требует интерактивный терминал | Не требуется, может работать в CI-окружении |
| Сценарии применения | Локальная разработка, ручные операции | CI/CD, скрипты, автоматизированные процессы |
| Требование ввода | Требует пользовательский ввод | Нулевой ввод, автоматическое выполнение |
Шаг 3: Неинтерактивная синхронизация AGENTS.md
Зачем Научиться генерировать AGENTS.md в автоматизированных процессах, чтобы AI-агенты всегда использовали актуальный список навыков.
Выполните:
# Неинтерактивная синхронизация (синхронизирует все навыки в AGENTS.md)
npx openskills sync -y
# Просмотр сгенерированного AGENTS.md
cat AGENTS.md | head -20Ожидаемый результат:
✅ Synced 3 skill(s) to AGENTS.mdСодержимое AGENTS.md:
<skills_system>
This project uses the OpenSkills system for AI agent extensibility.
Usage:
- Ask the AI agent to load specific skills using: "Use the <skill-name> skill"
- The agent will read the skill definition from .claude/skills/<skill-name>/SKILL.md
- Skills provide specialized capabilities like code review, file writing, etc.
</skills_system>
<available_skills>
<skill name="codebase-reviewer">
<description>Review code changes for issues...</description>
</skill>
<skill name="file-writer">
<description>Write files with format...</description>
</skill>
<skill name="git-helper">
<description>Git operations and utilities...</description>
</skill>
</available_skills>Пояснение:
- Флаг
-yпропускает интерфейс выбора навыков - Все установленные навыки синхронизируются в AGENTS.md
- Никакие диалоги подтверждения не отображаются
Шаг 4: Интеграция с GitHub Actions
Зачем Интегрировать OpenSkills в реальный CI/CD-процесс, реализуя автоматизированное управление навыками.
Создайте в проекте файл .github/workflows/setup-skills.yml:
name: Setup Skills
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
setup-skills:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install OpenSkills
run: npm install -g openskills
- name: Install skills (non-interactive)
run: openskills install anthropics/skills -y
- name: Sync to AGENTS.md
run: openskills sync -y
- name: Verify AGENTS.md
run: |
echo "=== AGENTS.md generated ==="
cat AGENTS.md
- name: Upload AGENTS.md as artifact
uses: actions/upload-artifact@v4
with:
name: agents-md
path: AGENTS.mdЗафиксируйте изменения и отправьте в GitHub:
git add .github/workflows/setup-skills.yml
git commit -m "Add GitHub Actions workflow for OpenSkills"
git pushОжидаемый результат: GitHub Actions автоматически запустится, успешно установит навыки и сгенерирует AGENTS.md.
Пояснение:
- Автоматический запуск при каждом push или PR
- Использование
openskills install anthropics/skills -yдля неинтерактивной установки навыков - Использование
openskills sync -yдля неинтерактивной синхронизации AGENTS.md - Сохранение AGENTS.md в виде артефакта для удобства отладки
Шаг 5: Использование приватных репозиториев
Зачем В корпоративных средах навыки обычно размещаются в приватных репозиториях, требующих доступа по SSH в CI/CD.
Настройка SSH в GitHub Actions:
name: Setup Skills from Private Repo
on:
push:
branches: [main]
jobs:
setup-skills:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup SSH key
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
- name: Install OpenSkills
run: npm install -g openskills
- name: Install skills from private repo
run: openskills install [email protected]:your-org/private-skills.git -y
- name: Sync to AGENTS.md
run: openskills sync -yДобавьте SSH_PRIVATE_KEY в разделе Settings → Secrets and variables → Actions вашего репозитория GitHub.
Ожидаемый результат: GitHub Actions успешно установит навыки из приватного репозитория.
Пояснение:
- Хранение приватного ключа в Secrets для предотвращения утечки
- Настройка SSH-доступа к приватному репозиторию
openskills install [email protected]:your-org/private-skills.git -yподдерживает установку из приватных репозиториев
Шаг 6: Интеграция в сценариях Docker
Зачем Автоматическая установка навыков при сборке Docker-образа, обеспечивающая готовность к использованию сразу после запуска контейнера.
Создайте Dockerfile:
FROM node:20-alpine
WORKDIR /app
# Установка OpenSkills
RUN npm install -g openskills
# Установка навыков (неинтерактивная)
RUN openskills install anthropics/skills -y
# Синхронизация AGENTS.md
RUN openskills sync -y
# Копирование кода приложения
COPY . .
# Другие шаги сборки...
RUN npm install
RUN npm run build
# Команда запуска
CMD ["node", "dist/index.js"]Сборка и запуск:
# Сборка Docker-образа
docker build -t myapp:latest .
# Запуск контейнера
docker run -it --rm myapp:latest sh
# Проверка установленных навыков в контейнере
ls -la .claude/skills/
cat AGENTS.mdОжидаемый результат: в контейнере установлены навыки и сгенерирован AGENTS.md.
Пояснение:
- Установка навыков на этапе сборки Docker-образа
- Использование
RUN openskills install ... -yдля неинтерактивной установки - После запуска контейнера ручная установка навыков не требуется
- Подходит для сценариев микросервисов, Serverless и других
Шаг 7: Конфигурация через переменные окружения
Зачем Гибкая настройка источников навыков через переменные окружения, позволяющая использовать различные репозитории навыков в разных средах.
Создайте файл .env.ci:
# Конфигурация среды CI/CD
SKILLS_SOURCE=anthropics/skills
SKILLS_INSTALL_FLAGS=-y
SYNC_FLAGS=-yИспользование в CI/CD-скриптах:
#!/bin/bash
# .github/scripts/setup-skills.sh
set -e
# Загрузка переменных окружения
if [ -f .env.ci ]; then
export $(cat .env.ci | grep -v '^#' | xargs)
fi
echo "Installing skills from: $SKILLS_SOURCE"
npx openskills install $SKILLS_SOURCE $SKILLS_INSTALL_FLAGS
echo "Syncing to AGENTS.md"
npx openskills sync $SYNC_FLAGS
echo "✅ Skills setup completed"Вызов в GitHub Actions:
- name: Setup skills
run: .github/scripts/setup-skills.shОжидаемый результат: скрипт автоматически настраивает источник навыков и флаги на основе переменных окружения.
Пояснение:
- Гибкая настройка источника навыков через переменные окружения
- В разных средах (разработка, тестирование, продакшен) можно использовать различные
.envфайлы - Обеспечение поддерживаемости конфигураций CI/CD
Контрольная точка ✅
Выполните следующие проверки, чтобы убедиться, что вы освоили материал этого урока:
- [ ] Понимаете назначение и особенности неинтерактивного режима
- [ ] Умеете выполнять неинтерактивную установку с помощью флага
-y - [ ] Умеете выполнять неинтерактивную синхронизацию с помощью флага
-y - [ ] Понимаете различия между интерактивным и неинтерактивным режимами
- [ ] Умеете интегрировать OpenSkills в GitHub Actions
- [ ] Умеете устанавливать навыки при сборке Docker-образа
- [ ] Знаете, как работать с приватными репозиториями в CI/CD
- [ ] Понимаете лучшие практики конфигурации через переменные окружения
Предупреждения о типичных ошибках
Распространённая ошибка 1: Забыть добавить флаг -y
Сценарий ошибки: использование команды без флага -y в GitHub Actions
# ❌ Ошибка: отсутствие флага -y
- name: Install skills
run: openskills install anthropics/skillsПроблема:
- CI-окружение не имеет интерактивного терминала (TTY)
- Команда ожидает пользовательский ввод, что приводит к таймауту и сбою workflow
- Сообщение об ошибке может быть неочевидным
Правильное решение:
# ✅ Правильно: использование флага -y
- name: Install skills
run: openskills install anthropics/skills -yРаспространённая ошибка 2: Потеря конфигурации при перезаписи навыков
Сценарий ошибки: CI/CD каждый раз перезаписывает навыки, что приводит к потере локальной конфигурации
# CI/CD устанавливает навыки в глобальный каталог
openskills install anthropics/skills --global -y
# Локальный пользователь устанавливает в каталог проекта, который перезаписывается глобальной версиейПроблема:
- Глобально установленные навыки имеют более низкий приоритет, чем локальные
- Несоответствие мест установки в CI/CD и локальной среде приводит к путанице
- Возможна перезапись тщательно настроенных локальных навыков
Правильное решение:
# Вариант 1: CI/CD и локальная среда используют установку в проект
openskills install anthropics/skills -y
# Вариант 2: Использование Universal-режима для предотвращения конфликтов
openskills install anthropics/skills --universal -y
# Вариант 3: CI/CD использует специальный каталог (через пользовательский путь вывода)
openskills install anthropics/skills -y
openskills sync -o .agents-md/AGENTS.md -yРаспространённая ошибка 3: Недостаточные права доступа к Git
Сценарий ошибки: при установке навыков из приватного репозитория SSH-ключ не настроен
# ❌ Ошибка: SSH-ключ не настроен
- name: Install from private repo
run: openskills install [email protected]:your-org/private-skills.git -yПроблема:
- CI-окружение не может получить доступ к приватному репозиторию
- Сообщение об ошибке:
Permission denied (publickey) - Клонирование не выполняется, workflow завершается с ошибкой
Правильное решение:
# ✅ Правильно: настройка SSH-ключа
- name: Setup SSH key
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
- name: Install from private repo
run: openskills install [email protected]:your-org/private-skills.git -yРаспространённая ошибка 4: Слишком большой образ Docker
Сценарий ошибки: установка навыков в Dockerfile приводит к чрезмерному размеру образа
# ❌ Ошибка: каждый раз выполняется клонирование и установка
RUN openskills install anthropics/skills -yПроблема:
- При каждой сборке выполняется клонирование репозитория с GitHub
- Увеличивается время сборки и размер образа
- Сетевые проблемы могут привести к сбою
Правильное решение:
# ✅ Правильно: использование многоэтапной сборки и кэширования
FROM node:20-alpine AS skills-builder
RUN npm install -g openskills
RUN openskills install anthropics/skills -y
RUN openskills sync -y
# Основной образ
FROM node:20-alpine
WORKDIR /app
# Копирование установленных навыков
COPY --from=skills-builder ~/.claude /root/.claude
COPY --from=skills-builder /app/AGENTS.md /app/
# Копирование кода приложения
COPY . .
# Другие шаги сборки...Распространённая ошибка 5: Забыть обновить навыки
Сценарий ошибки: CI/CD каждый раз устанавливает устаревшие версии навыков
# ❌ Ошибка: только установка, без обновления
- name: Install skills
run: openskills install anthropics/skills -yПроблема:
- Репозиторий навыков мог быть обновлён
- Версия навыков, установленная CI/CD, не является последней
- Возможны отсутствие функциональности или наличие ошибок
Правильное решение:
# ✅ Правильно: сначала обновление, затем синхронизация
- name: Update skills
run: openskills update -y
- name: Sync to AGENTS.md
run: openskills sync -y
# Или использование стратегии обновления при установке
- name: Install or update skills
run: |
openskills install anthropics/skills -y || openskills update -yРезюме урока
Ключевые моменты:
- Неинтерактивный режим подходит для CI/CD: использование флага
-yдля пропуска всех интерактивных запросов - Флаг -y для команды install: автоматическая установка всех найденных навыков, перезапись существующих
- Флаг -y для команды sync: автоматическая синхронизация всех навыков в AGENTS.md
- Интеграция с GitHub Actions: использование неинтерактивных команд в workflow для автоматизации управления навыками
- Сценарии Docker: установка навыков на этапе сборки образа, обеспечивающая готовность к использованию сразу после запуска контейнера
- Доступ к приватным репозиториям: настройка SSH-ключей для доступа к приватным репозиториям навыков в CI/CD
- Конфигурация через переменные окружения: гибкая настройка параметров установки навыков через переменные окружения
Процесс принятия решений:
[Необходимо использовать OpenSkills в CI/CD] → [Установка навыков]
↓
[Использование флага -y для пропуска взаимодействия]
↓
[Генерация AGENTS.md]
↓
[Использование флага -y для пропуска взаимодействия]
↓
[Проверка корректности установки навыков]Мнемоническое правило:
- В CI/CD не забудь -y: неинтерактивный режим — ключевой момент
- В GitHub Actions используй SSH: для приватных репозиториев необходима настройка ключей
- В Docker устанавливай навыки на ранних этапах: обращай внимание на размер образа
- Настраивай переменные окружения: разделяй конфигурации для разных сред
Следующий урок
В следующем уроке мы изучим Безопасность.
Вы узнаете:
- Характеристики безопасности и механизмы защиты OpenSkills
- Принципы работы защиты от path traversal
- Безопасную обработку символических ссылок
- Меры безопасности при парсинге YAML
- Лучшие практики управления правами доступа
Приложение: Справочник по исходному коду
Нажмите, чтобы просмотреть расположение исходного кода
Дата обновления: 2026-01-24
| Функциональность | Путь к файлу | Строки |
|---|---|---|
| Неинтерактивная установка | src/commands/install.ts | 424-455 |
| Обнаружение конфликтов и перезапись | src/commands/install.ts | 521-550 |
| Неинтерактивная синхронизация | src/commands/sync.ts | 46-93 |
| Определение аргументов командной строки | src/cli.ts | 49 |
| Определение аргументов командной строки | src/cli.ts | 65 |
Ключевые константы:
-y, --yes: флаг командной строки для пропуска интерактивного выбора
Ключевые функции:
warnIfConflict(skillName, targetPath, isProject, skipPrompt): обнаруживает конфликты навыков и принимает решение о перезаписиinstallFromRepo(): устанавливает навыки из репозитория (поддерживает неинтерактивный режим)syncAgentsMd(): синхронизирует навыки в AGENTS.md (поддерживает неинтерактивный режим)
Бизнес-правила:
- При использовании флага
-yпропускаются все интерактивные запросы - При существовании навыка в неинтерактивном режиме выполняется автоматическая перезапись (отображается
Overwriting: <skill-name>) - Неинтерактивный режим корректно работает в headless-окружениях (без TTY)
- Команды
installиsyncподдерживают флаг-y