Перейти к основному содержимому

Репозитории

Репозиторий — это место для хранения и управления контентом Ansible, таким как playbook и роли.

Semaphore поддерживает следующие типы репозиториев:

  • локальная файловая система (/path/to/the/repo)
  • локальный Git-репозиторий (file://)
  • удалённый Git-репозиторий, доступный по HTTPS (https://) или SSH (ssh://)
  • протокол git:// поддерживается, но не рекомендуется по соображениям безопасности.

Для запуска любого шаблона задачи требуется репозиторий.

Аутентификация​

Если вы используете удалённый репозиторий, требующий аутентификации, вам нужно настроить ключ в разделе Хранилище ключей Semaphore.

Для удалённых репозиториев, использующих SSH, необходимо использовать ваш SSH-ключ из Хранилища ключей.

Для удалённых репозиториев без аутентификации можно создать ключ типа None.

Ключ репозитория используется только для этого репозитория. Чтобы получить доступ к подмодулям, ролям из requirements.yml или другим репозиториям, размещённым на других серверах со своими учётными данными, добавьте сопоставление в разделе Конфигурация хостов.

Создание нового репозитория​

  1. Убедитесь, что вы настроили ключ для добавляемого репозитория в разделе хранилища ключей.

  2. Перейдите в раздел «Репозитории» Semaphore и нажмите кнопку Новый репозиторий в правом верхнем углу.

  3. Настройте репозиторий:

    • Задайте имя репозитория
    • Добавьте URL. URL должен начинаться с одного из следующих вариантов:
      • /path/to/the/repo для локальной папки в файловой системе
      • https:// для удалённого Git-репозитория, доступного по HTTPS
      • ssh:// для удалённого Git-репозитория, доступного по SSH
      • file:// для локального Git-репозитория
      • git:// для удалённого Git-репозитория, доступного по протоколу Git
    • Укажите ветку репозитория; если вы не уверены, скорее всего это master или main
    • Отметьте Единая рабочая копия для всех шаблонов, если репозиторий — монорепозиторий, который должны использовать все шаблоны, см. Монорепозиторий
    • Выберите ключ доступа, который вы настроили перед добавлением этого репозитория.
  4. Нажмите «Сохранить», когда всё будет настроено.

Монорепозиторий: одна рабочая копия для всех шаблонов​

Начиная с v2.20

Опция Единая рабочая копия для всех шаблонов доступна начиная с Semaphore 2.20. Более ранние версии всегда клонируют репозиторий отдельно для каждого шаблона.

По умолчанию Semaphore клонирует репозиторий отдельно для каждого шаблона, поэтому каждый шаблон работает в собственной копии. Для большого репозитория, который используют многие шаблоны, копии занимают место на диске, а каждая задача начинается с клонирования или pull своей копии.

Отметьте Единая рабочая копия для всех шаблонов, чтобы клонировать репозиторий один раз и использовать эту рабочую копию для всех шаблонов проекта. Опция недоступна для локальной папки (/path/to/the/repo), которая никогда не клонируется.

Форма репозитория с включённой опцией «Единая рабочая копия для всех шаблонов»

Как работает общая рабочая копия:

  • Перед запуском задачи Semaphore захватывает блокировку рабочей копии, выполняет fetch и pull ветки, заданной в репозитории, и освобождает блокировку. Задачи других шаблонов ждут освобождения блокировки, пока рабочая копия обновляется, но сами задачи выполняются параллельно.
  • Для каждой ветки по-прежнему создаётся отдельная рабочая копия, поэтому репозитории с разными ветками никогда не используют одно рабочее дерево.
  • Рабочая копия общая, но домашний каталог Ansible (роли и коллекции, установленные из requirements.yml) остаётся отдельным для каждого шаблона.

Поскольку все шаблоны работают в одной рабочей копии на одной ветке, у шаблона монорепозитория не может быть собственного поля Branch, и он не может включить подсказку Branch, которая позволяет задаче выбрать ветку или коммит. Форма шаблона отключает оба поля и объясняет причину, а API отклоняет такой шаблон. Убедитесь, что playbook не пишут в рабочую копию: изменённое рабочее дерево ломает следующий pull, после чего Semaphore удаляет рабочую копию и клонирует её заново.

Редактирование существующего репозитория​

  1. Перейдите в раздел «Репозитории» Semaphore.

  2. Нажмите значок карандаша рядом с репозиторием, который хотите изменить, — откроется конфигурация репозитория.

Удаление репозитория​

Убедитесь, что удаляемый репозиторий не используется ни в одном шаблоне задач. Репозиторий нельзя удалить, если он используется в каком-либо шаблоне задач:

  1. Перейдите в раздел «Репозитории» Semaphore.

  2. Нажмите значок корзины у репозитория, который хотите удалить.

  3. Нажмите «Да» во всплывающем окне подтверждения, если вы уверены, что хотите удалить этот репозиторий.

Requirements​

При инициализации проекта Semaphore ищет и устанавливает роли и коллекции Ansible из requirements.yml в следующих расположениях и в следующем порядке.

Роли​

  • playbook_dir/roles/requirements.yml
  • playbook_dir/requirements.yml
  • repo_path/roles/requirements.yml
  • repo_path/requirements.yml

Коллекции​

  • playbook_dir/collections/requirements.yml
  • playbook_dir/requirements.yml
  • repo_path/collections/requirements.yml
  • repo_path/requirements.yml

Логика обработки​

  • Каждый файл обрабатывается независимо
  • Если файл существует, он обрабатывается в соответствии со своим типом (роль или коллекция)
  • Если при обработке какого-либо файла возникает ошибка, процесс установки останавливается и возвращает ошибку
  • Один и тот же файл requirements.yml в корневых каталогах (playbook_dir/requirements.yml и repo_path/requirements.yml) обрабатывается дважды — один раз для ролей и один раз для коллекций

Semaphore попытается обработать все эти расположения независимо от того, были ли найдены или успешно обработаны предыдущие, за исключением случаев возникновения ошибок.