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

Задачи

Задача — это одно выполнение шаблона задачи: один запуск playbook Ansible, конфигурации Terraform/OpenTofu/Terragrunt либо скрипта Bash, PowerShell или Python. У каждой задачи есть собственные лог, статус и подробности, поэтому всегда видно, что было запущено, когда, кем и с какой ревизией репозитория.

Запуск задачи​

Вам нужна роль Task Runner или выше в проекте (см. Команды). Запустить задачу можно двумя способами:

  • В разделе Task Templates нажмите кнопку воспроизведения в строке шаблона.
  • На странице шаблона нажмите кнопку в правом верхнем углу. Её название зависит от типа шаблона: Run, Build или Deploy.

Оба способа открывают диалог New Task. Его содержимое зависит от приложения и от опций, включённых в шаблоне.

Диалог New Task для шаблона Ansible

ПолеДля каких шаблоновОписание
Messageвсех шаблоновНеобязательная заметка, которая сохраняется вместе с задачей и отображается в истории и уведомлениях.
Build Versionшаблонов deployКакую сборку разворачивать. По умолчанию выбрана последняя успешная сборка. См. Шаблоны сборки и развёртывания.
Переменные опросашаблонов с переменными опросаПо одному полю на переменную; обязательные переменные необходимо заполнить.
Dry Run --check, Diff --diffAnsibleЗапустить playbook в режиме проверки или показать изменения файлов. Остальные подсказки Ansible (Limit, Tags, Skip tags, Debug) появляются, если включены в шаблоне, см. Подсказки.
Plan, Destroy, Auto Approve, Upgrade, ReconfigureTerraform, OpenTofu, TerragruntВыполнить только plan либо добавить -destroy, -auto-approve, -upgrade или -reconfigure. См. Terraform/OpenTofu.
Branch, Inventory, CLI argsлюбого приложенияПереопределить значения шаблона для этого запуска. Каждое переопределение должно быть разрешено в настройках шаблона.

Диалог New Task для шаблона Terraform

Нажмите Run (или Build / Deploy), чтобы поставить задачу в очередь.

Очередь и параллельное выполнение​

Задачи одного шаблона выполняются последовательно, если в шаблоне не включена опция Allow parallel tasks. Кроме того, проект может ограничивать общее число выполняемых задач параметром Max number of parallel tasks в настройках проекта. Задача, которой приходится ждать, остаётся в статусе waiting и запускается автоматически, когда освобождается место.

Окно задачи​

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

Лог задачи

ВкладкаСодержимое
LogВывод задачи в реальном времени с отметками времени. Пока задача выполняется, лог передаётся потоком. Raw log открывает необработанный вывод в новой вкладке браузера.
DetailsСведения о шаблоне (приложение, шаблон), сведения о коммите (сообщение и хеш) и сведения о запуске: сообщение, время создания, начала и окончания, длительность, а также, если заданы, раннер, ветка, ограничение limit и переменные, использованные при запуске.
Summary (Pro)Для задач Ansible: сколько хостов завершилось успешно и сколько с ошибкой, с таблицей неуспешных задач по серверам.

Подробности задачи

Сводка по задаче

Статусы задач​

СтатусЗначение
waitingЗадача в очереди: выполняется другая задача того же шаблона, достигнут лимит проекта или пока нет доступного раннера.
startingРаннер взял задачу и готовит репозиторий и окружение.
waiting_confirmationИнструмент задал вопрос и ждёт пользователя, например terraform apply без Auto Approve или скрипт, читающий ввод. Используйте Confirm или Reject в окне задачи.
confirmedПользователь подтвердил запрос, задача продолжается.
rejectedПользователь отклонил запрос, задача завершается.
runningPlaybook или скрипт выполняется.
stoppingЗапрошена остановка, процесс завершается.
stoppedЗадача остановлена пользователем.
successЗавершилась с кодом возврата 0.
errorЗавершилась с ненулевым кодом возврата или не смогла запуститься. В интерфейсе отображается как Failed.

Остановка задач​

Откройте окно выполняющейся задачи и нажмите Stop. Semaphore отправляет сигнал завершения, и задача переходит в статус stopping, пока процесс завершается. Если процесс не реагирует, кнопка меняется на Force Stop; нажмите её, чтобы немедленно завершить процесс.

Чтобы остановить все выполняющиеся и стоящие в очереди задачи одного шаблона, откройте страницу шаблона и воспользуйтесь кнопкой Stop all. В выпадающем меню доступны Stop и Force stop.

Меню Stop all

Повторный запуск задачи​

На вкладке Tasks шаблона в каждой строке есть кнопка повторного запуска. Она открывает диалог New Task с уже заполненными сообщением и параметрами этой задачи.

Задачи шаблона с кнопками повторного запуска

Где искать задачи​

  • Dashboard → History: все задачи проекта, см. История.
  • Страница шаблона → Tasks: задачи одного шаблона.
  • Task Templates: разверните строку стрелкой слева, чтобы увидеть последние задачи шаблона, не покидая список.

Переменные окружения​

Каждая задача, независимо от используемого приложения (Ansible, Terraform, Bash, PowerShell или Python), получает переменные, идентифицирующие ее в Semaphore:

ПеременнаяЗначение
SEMAPHORE_TASK_IDID задачи
SEMAPHORE_PROJECT_IDID проекта, которому принадлежит задача
SEMAPHORE_WORKFLOW_IDID рабочего процесса, если задача является узлом запуска рабочего процесса
SEMAPHORE_WORKFLOW_RUN_IDID запуска рабочего процесса, которому принадлежит задача
SEMAPHORE_WORKFLOW_VERSIONВерсия запуска рабочего процесса, которому принадлежит задача, если она задана
SEMAPHORE_WORKFLOW_URLСсылка на страницу запуска рабочего процесса (требуется web_host в конфигурации сервера)
SEMAPHORE_OUTPUTS_FILEПуть к файлу, в который задача рабочего процесса записывает свои выходные данные

Переменные рабочего процесса отсутствуют, если задача была запущена не из рабочего процесса.

Полный список, включая переменные отдельных приложений и служебные переменные для git и SSH, приведён в справочнике: Переменные окружения задачи.

В определенных случаях задаются и другие переменные:

Пример для Bash:

echo "Task $SEMAPHORE_TASK_ID of project $SEMAPHORE_PROJECT_ID"
if [ -n "$SEMAPHORE_WORKFLOW_RUN_ID" ]; then
echo "Started by workflow run: $SEMAPHORE_WORKFLOW_URL"
fi

Хранение логов​

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