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

Semaphore поддерживает следующие типы репозиториев:
- локальная файловая система (
/path/to/the/repo) - локальный Git-репозиторий (
file://) - удалённый Git-репозиторий, доступный по HTTPS (
https://) или SSH (ssh://) - протокол
git://поддерживается, но не рекомендуется по соображениям безопасности.
Для запуска любого шаблона задачи требуется репозиторий.
Аутентификация
Если вы используете удалённый репозиторий, требующий аутентификации, вам нужно настроить ключ в разделе Хранилище ключей Semaphore.
Для удалённых репозиториев, использующих SSH, необходимо использовать ваш SSH-ключ из Хранилища ключей.
Для удалённых репозиториев без аутентификации можно создать ключ типа None.
Ключ репозитория используется только для этого репозитория. Чтобы получить доступ к подмодулям, ролям из requirements.yml или другим репозиториям, размещённым на других серверах со своими учётными данными, добавьте сопоставление в разделе Конфигурация хостов.
Создание н ового репозитория
-
Убедитесь, что вы настроили ключ для добавляемого репозитория в разделе хранилища ключей.
-
Перейдите в раздел «Репозитории» Semaphore и нажмите кнопку Новый репозиторий в правом верхнем углу.
-
Настройте репозиторий:
- Задайте имя репозитория
- Добавьте URL. URL должен начинаться с одного из следующих вариантов:
/path/to/the/repoдля локальной папки в файловой системеhttps://для удалённого Git-репозитория, доступного по HTTPSssh://для удалённого Git-репозитория, доступного по SSHfile://для локального Git-репозиторияgit://для удалённого Git-репозитория, доступного по протоколу Git
- Укажите ветку репозитория; если вы не уверены, скорее всего это master или main
- Отметьте Единая рабочая копия для всех шаблонов, если репозиторий — монорепозиторий, который должны использовать все шаблоны, см. Монорепозиторий
- Выберите ключ доступа, который вы настроили перед добавлением этого репозитория.
-
Нажмите «Сохранить», когда всё будет настроено.
Монорепозиторий: одна рабочая копия для всех шаблонов
Опция Единая рабочая копия для всех шаблонов доступна начиная с Semaphore 2.20. Более ранние версии всегда клонируют репозиторий отдельно для каждого шаблона.
По умолчанию Semaphore клонирует репозиторий отдельно для каждого шаблона, поэтому каждый шаблон работает в собственной копии. Для большого репозитория, который используют многие шаблоны, копии занимают место на диске, а каждая задача начинается с клонирования или pull своей копии.
Отметьте Единая рабочая копия для всех шаблонов, чтобы клонировать репозиторий один раз и использовать эту рабочую копию для всех шаблонов проекта. Опция недоступна для локальной папки (/path/to/the/repo), которая никогда не клонируется.

Как работает общая рабочая копия:
- Перед запуском задачи Semaphore захватывает блокировку рабочей копии, выполняет fetch и pull ветки, заданной в репозитории, и освобождает блокировку. Задачи других шаблонов ждут освобождения блокировки, пока рабочая копия обновляется, но сами задачи выполняются параллельно.
- Для каждой ветки по-прежнему создаётся отдельная рабочая копия, поэтому репозитории с разными ветками никогда не используют одно рабочее дерево.
- Рабочая копия общая, но домашний каталог Ansible (роли и коллекции, установленные из
requirements.yml) остаётся отдельным для каждого шаблона.
Поскольку все шаблоны работают в одной рабочей копии на одной ветке, у шаблона монорепозитория не может быть собственного поля Branch, и он не может включить подсказку Branch, которая позволяет задаче выбрать ветку или коммит. Форма шаблона отключает оба поля и объясняет причину, а API отклоняет такой шаблон. Убедитесь, что playbook не пишут в рабочую копию: изменённое рабочее дерево ломает следующий pull, после чего Semaphore удаляет рабочую копию и клонирует её заново.
Редактирование существующего репозитория
-
Перейдите в раздел «Репозитории» Semaphore.
-
Нажмите значок карандаша рядом с репозиторием, который хотите изменить, — откроется конфигурация репозитория.
Удаление репозитория
Убедитесь, что удаляемый репозиторий не используется ни в одном шабло не задач. Репозиторий нельзя удалить, если он используется в каком-либо шаблоне задач:
-
Перейдите в раздел «Репозитории» Semaphore.
-
Нажмите значок корзины у репозитория, который хотите удалить.
-
Нажмите «Да» во всплывающем окне подтверждения, если вы уверены, что хотите удалить этот репозиторий.
Requirements
При инициализации проекта Semaphore ищет и устанавливает роли и коллекции Ansible из requirements.yml в следующих расположениях и в следующем порядке.
Роли
playbook_dir/roles/requirements.ymlplaybook_dir/requirements.ymlrepo_path/roles/requirements.ymlrepo_path/requirements.yml
Коллекции
playbook_dir/collections/requirements.ymlplaybook_dir/requirements.ymlrepo_path/collections/requirements.ymlrepo_path/requirements.yml
Логика обработки
- Каждый файл обрабатывается независимо
- Если файл существует, он обрабатывается в соответствии со своим типом (роль или коллекция)
- Если при обработке какого-либо файла возникает ошибка, процесс установки останавливается и возвращает ошибку
- Один и тот же файл requirements.yml в корневых каталогах (
playbook_dir/requirements.yml иrepo_path/requirements.yml) обрабатывается дважды — один раз для ролей и один раз для коллекций
Semaphore попытается обработать все эти расположения независимо от того, были ли найдены или успешно обработаны предыдущие, за исключением случаев возникновения ошибок.