Skip to content

Интеграция 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):

typescript
// Interactive selection (unless -y flag or single skill)
let skillsToInstall = skillInfos;

if (!options.yes && skillInfos.length > 1) {
  // Вход в интерактивный процесс выбора
  // ...
}

Особенности неинтерактивного режима:

  1. Пропуск выбора навыков: устанавливаются все найденные навыки
  2. Автоматическое перезаписывание: при обнаружении существующих навыков выполняется прямая замена (отображается Overwriting: <skill-name>)
  3. Пропуск подтверждения конфликтов: без запроса на подтверждение выполняется немедленная замена
  4. Совместимость с headless-окружением: корректная работа в CI-окружениях без TTY

Поведение функции warnIfConflict (исходный код install.ts:524-527):

typescript
if (skipPrompt) {
  // Автоматическое перезаписывание в неинтерактивном режиме
  console.log(chalk.dim(`Overwriting: ${skillName}`));
  return true;
}

::: important Ключевая концепция

Неинтерактивный режим: использование флага --yes/-y для пропуска всех интерактивных запросов, позволяющее командам автоматически выполняться в CI/CD, скриптах и headless-окружениях без ожидания пользовательского ввода.

:::


Практическое руководство

Шаг 1: Опробуйте неинтерактивную установку

Зачем Сначала протестируйте поведение неинтерактивного режима в локальной среде, чтобы понять отличия от интерактивного режима.

Откройте терминал и выполните:

bash
# Неинтерактивная установка (устанавливает все найденные навыки)
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: Сравните интерактивный и неинтерактивный режимы

Зачем Путём сравнения лучше понять различия между двумя режимами и сценарии их применения.

Выполните следующие команды для сравнения режимов:

bash
# Очистка существующих навыков (для тестирования)
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-агенты всегда использовали актуальный список навыков.

Выполните:

bash
# Неинтерактивная синхронизация (синхронизирует все навыки в AGENTS.md)
npx openskills sync -y

# Просмотр сгенерированного AGENTS.md
cat AGENTS.md | head -20

Ожидаемый результат:

✅ Synced 3 skill(s) to AGENTS.md

Содержимое AGENTS.md:

xml
<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:

yaml
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:

bash
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:

yaml
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:

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"]

Сборка и запуск:

bash
# Сборка 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:

bash
# Конфигурация среды CI/CD
SKILLS_SOURCE=anthropics/skills
SKILLS_INSTALL_FLAGS=-y
SYNC_FLAGS=-y

Использование в CI/CD-скриптах:

bash
#!/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:

yaml
- 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

yaml
# ❌ Ошибка: отсутствие флага -y
- name: Install skills
  run: openskills install anthropics/skills

Проблема:

  • CI-окружение не имеет интерактивного терминала (TTY)
  • Команда ожидает пользовательский ввод, что приводит к таймауту и сбою workflow
  • Сообщение об ошибке может быть неочевидным

Правильное решение:

yaml
# ✅ Правильно: использование флага -y
- name: Install skills
  run: openskills install anthropics/skills -y

Распространённая ошибка 2: Потеря конфигурации при перезаписи навыков

Сценарий ошибки: CI/CD каждый раз перезаписывает навыки, что приводит к потере локальной конфигурации

bash
# CI/CD устанавливает навыки в глобальный каталог
openskills install anthropics/skills --global -y

# Локальный пользователь устанавливает в каталог проекта, который перезаписывается глобальной версией

Проблема:

  • Глобально установленные навыки имеют более низкий приоритет, чем локальные
  • Несоответствие мест установки в CI/CD и локальной среде приводит к путанице
  • Возможна перезапись тщательно настроенных локальных навыков

Правильное решение:

bash
# Вариант 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-ключ не настроен

yaml
# ❌ Ошибка: SSH-ключ не настроен
- name: Install from private repo
  run: openskills install [email protected]:your-org/private-skills.git -y

Проблема:

  • CI-окружение не может получить доступ к приватному репозиторию
  • Сообщение об ошибке: Permission denied (publickey)
  • Клонирование не выполняется, workflow завершается с ошибкой

Правильное решение:

yaml
# ✅ Правильно: настройка 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 приводит к чрезмерному размеру образа

dockerfile
# ❌ Ошибка: каждый раз выполняется клонирование и установка
RUN openskills install anthropics/skills -y

Проблема:

  • При каждой сборке выполняется клонирование репозитория с GitHub
  • Увеличивается время сборки и размер образа
  • Сетевые проблемы могут привести к сбою

Правильное решение:

dockerfile
# ✅ Правильно: использование многоэтапной сборки и кэширования
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 каждый раз устанавливает устаревшие версии навыков

yaml
# ❌ Ошибка: только установка, без обновления
- name: Install skills
  run: openskills install anthropics/skills -y

Проблема:

  • Репозиторий навыков мог быть обновлён
  • Версия навыков, установленная CI/CD, не является последней
  • Возможны отсутствие функциональности или наличие ошибок

Правильное решение:

yaml
# ✅ Правильно: сначала обновление, затем синхронизация
- 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

Резюме урока

Ключевые моменты:

  1. Неинтерактивный режим подходит для CI/CD: использование флага -y для пропуска всех интерактивных запросов
  2. Флаг -y для команды install: автоматическая установка всех найденных навыков, перезапись существующих
  3. Флаг -y для команды sync: автоматическая синхронизация всех навыков в AGENTS.md
  4. Интеграция с GitHub Actions: использование неинтерактивных команд в workflow для автоматизации управления навыками
  5. Сценарии Docker: установка навыков на этапе сборки образа, обеспечивающая готовность к использованию сразу после запуска контейнера
  6. Доступ к приватным репозиториям: настройка SSH-ключей для доступа к приватным репозиториям навыков в CI/CD
  7. Конфигурация через переменные окружения: гибкая настройка параметров установки навыков через переменные окружения

Процесс принятия решений:

[Необходимо использовать OpenSkills в CI/CD] → [Установка навыков]

                            [Использование флага -y для пропуска взаимодействия]

                            [Генерация AGENTS.md]

                            [Использование флага -y для пропуска взаимодействия]

                            [Проверка корректности установки навыков]

Мнемоническое правило:

  • В CI/CD не забудь -y: неинтерактивный режим — ключевой момент
  • В GitHub Actions используй SSH: для приватных репозиториев необходима настройка ключей
  • В Docker устанавливай навыки на ранних этапах: обращай внимание на размер образа
  • Настраивай переменные окружения: разделяй конфигурации для разных сред

Следующий урок

В следующем уроке мы изучим Безопасность.

Вы узнаете:

  • Характеристики безопасности и механизмы защиты OpenSkills
  • Принципы работы защиты от path traversal
  • Безопасную обработку символических ссылок
  • Меры безопасности при парсинге YAML
  • Лучшие практики управления правами доступа

Приложение: Справочник по исходному коду

Нажмите, чтобы просмотреть расположение исходного кода

Дата обновления: 2026-01-24

ФункциональностьПуть к файлуСтроки
Неинтерактивная установкаsrc/commands/install.ts424-455
Обнаружение конфликтов и перезаписьsrc/commands/install.ts521-550
Неинтерактивная синхронизацияsrc/commands/sync.ts46-93
Определение аргументов командной строкиsrc/cli.ts49
Определение аргументов командной строкиsrc/cli.ts65

Ключевые константы:

  • -y, --yes: флаг командной строки для пропуска интерактивного выбора

Ключевые функции:

  • warnIfConflict(skillName, targetPath, isProject, skipPrompt): обнаруживает конфликты навыков и принимает решение о перезаписи
  • installFromRepo(): устанавливает навыки из репозитория (поддерживает неинтерактивный режим)
  • syncAgentsMd(): синхронизирует навыки в AGENTS.md (поддерживает неинтерактивный режим)

Бизнес-правила:

  • При использовании флага -y пропускаются все интерактивные запросы
  • При существовании навыка в неинтерактивном режиме выполняется автоматическая перезапись (отображается Overwriting: <skill-name>)
  • Неинтерактивный режим корректно работает в headless-окружениях (без TTY)
  • Команды install и sync поддерживают флаг -y