# Выполнение скриптов до или после задания

Скрипты можно автоматически выполнять на локально размещенном средстве выполнении тестов сразу до или после задания.

> \[!NOTE]
> GitHub Enterprise Serverразмещенные в данный момент средства выполнения не поддерживаются в GitHub.

## Сведения о выполнении скриптов до и после задания

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

Пользовательские скрипты активируются автоматически при задании определенной переменной среды в средстве выполнения. Переменная среды должна содержать абсолютный путь к скрипту. Дополнительные сведения см. в разделе ["Активация скриптов](#triggering-the-scripts) ниже".

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

* **Bash**: использует `bash` и может переключаться на `sh`. Запускается путем выполнения команды `-e {pathtofile}`.
* **PowerShell**: использует `pwsh` и может переключаться на `powershell`. Запускается путем выполнения команды `-command \". '{pathtofile}'\"`.

## Написание скриптов

В пользовательских скриптах можно использовать перечисленные ниже возможности.

* **Переменные.** Скрипты имеют доступ к переменным по умолчанию. Полные полезные данные события веб-перехватчика можно найти в `GITHUB_EVENT_PATH`. Дополнительные сведения см. в разделе [Справочник по переменным](/ru/enterprise-server@3.22/actions/reference/workflows-and-actions/variables#default-environment-variables).
* **Команды рабочего процесса**: скрипты могут использовать команды рабочего процесса. Дополнительные сведения см. в разделе [Команды рабочего процесса для GitHub Actions](/ru/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-commands). Скрипты также могут использовать файлы среды. Дополнительные сведения см. в разделе [Файлы среды](/ru/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-commands#environment-files).

Файлы скриптов должны использовать расширение файла для соответствующего языка, например `.sh` или `.ps1`для успешного выполнения.

> \[!NOTE]
> Избегайте использования скриптов для вывода конфиденциальной информации в консоль, так как любой пользователь с доступом на чтение к репозиторию может видеть выходные данные в журналах пользовательского интерфейса.

### Обработка кодов выхода

Для скриптов, выполняемых перед заданием, код выхода `0` указывает, что скрипт успешно завершен и далее будет запущено задание. При любом другом коде выхода задание не будет запущено и будет помечено как завершившееся сбоем. Чтобы просмотреть результаты скриптов, выполняемых перед заданием, проверьте наличие записей `Set up runner` в журналах. Дополнительные сведения о проверке журналов см. в разделе [Использование журналов выполнения рабочих процессов](/ru/enterprise-server@3.22/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures).

Использование параметра [`continue-on-error`](/ru/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error) этими скриптами не поддерживается.

## Активация скриптов

Пользовательские скрипты должны находиться в средстве выполнения, но не должны храниться в каталоге приложения `actions-runner`. Скрипты выполняются в контексте безопасности учетной записи службы, в котором запущена служба средства выполнения.

> \[!NOTE]
> Триггерные скрипты обрабатываются синхронно, поэтому они блокируют выполнение заданий во время их выполнения.

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

* `ACTIONS_RUNNER_HOOK_JOB_STARTED`. Скрипт, определенный в этой переменной среды, активируется при назначении задания средству выполнения, но перед запуском задания.
* `ACTIONS_RUNNER_HOOK_JOB_COMPLETED`: скрипт, определенный в этой переменной среды, активируется в конце задания после выполнения всех шагов, определенных в рабочем процессе.

Чтобы задать эти переменные среды, можно добавить их в операционную систему или добавить их в файл с именем `.env` в каталоге приложений локального запуска (то есть каталог, в который вы скачали и распаковали программное обеспечение runner). Обратите внимание, что для любого изменения `.env` файла потребуется перезапустить средство выполнения.
Например, следующая `.env` запись будет автоматически запускать скрипт, сохраненный на `/opt/runner/cleanup_script.sh` компьютере runner перед выполнением каждого задания:

```bash
ACTIONS_RUNNER_HOOK_JOB_STARTED=/opt/runner/cleanup_script.sh
```

> \[!NOTE]
> Скрипт, определенный в `ACTIONS_RUNNER_HOOK_JOB_COMPLETED` , выполняется в конце задания до завершения задания. Это делает его непригодным для вариантов использования, которые могут прерывать выполнение, например удаление компьютера runner в рамках реализации автомасштабирования.

## Устранение неполадок

### Отказ в разрешении

Если при попытке запустить скрипт возникает ошибка "отказано в разрешении", убедитесь, что скрипт является исполняемым. Например, в терминале linux или macOS можно использовать следующую команду для создания исполняемого файла.

```bash
chmod +x PATH/TO/FILE
```

Сведения об использовании рабочих процессов для выполнения скриптов см. в разделе [Добавление сценариев в рабочий процесс](/ru/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/add-scripts).

### Отсутствие параметра времени ожидания

В настоящее время для скриптов, выполняемых посредством `ACTIONS_RUNNER_HOOK_JOB_STARTED` или `ACTIONS_RUNNER_HOOK_JOB_COMPLETED`, отсутствует параметр времени ожидания. Поэтому в скрипт может потребоваться добавить логику для обработки времени ожидания.

### Просмотр журнала выполнения рабочего процесса

Чтобы проверить, выполняются ли скрипты, можно просмотреть журналы задания. Скрипты будут указаны в отдельных шагах для `Set up runner` или `Complete runner` в зависимости от того, какая переменная среды активирует скрипт. Дополнительные сведения о проверке журналов см. в разделе [Использование журналов выполнения рабочих процессов](/ru/enterprise-server@3.22/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures).