{"meta":{"title":"Выполнение скриптов до или после задания","intro":"Скрипты можно автоматически выполнять на локально размещенном средстве выполнении тестов сразу до или после задания.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/manage-runners","title":"Управление средствами выполнения"},{"href":"/ru/actions/how-tos/manage-runners/self-hosted-runners","title":"Локальные средства выполнения тестов"},{"href":"/ru/actions/how-tos/manage-runners/self-hosted-runners/run-scripts","title":"Выполнение скриптов"}],"documentType":"article"},"body":"# Выполнение скриптов до или после задания\n\nСкрипты можно автоматически выполнять на локально размещенном средстве выполнении тестов сразу до или после задания.\n\n## Сведения о выполнении скриптов до и после задания\n\nВы можете автоматически выполнять скрипты в локальном средстве выполнения либо перед запуском задания, либо после его завершения. С помощью этих скриптов можно выполнять требования задания, например создавать или удалять среду средства выполнения либо очищать каталоги. С их помощью можно также отслеживать использование средств выполнения посредством данных телеметрии.\n\nПользовательские скрипты активируются автоматически при задании определенной переменной среды в средстве выполнения. Переменная среды должна содержать абсолютный путь к скрипту. Дополнительные сведения см. в разделе [\"Активация скриптов](#triggering-the-scripts) ниже\".\n\nПоддерживаются следующие языки написания скриптов:\n\n* **Bash**: использует `bash` и может переключаться на `sh`. Запускается путем выполнения команды `-e {pathtofile}`.\n* **PowerShell**: использует `pwsh` и может переключаться на `powershell`. Запускается путем выполнения команды `-command \\\". '{pathtofile}'\\\"`.\n\n## Написание скриптов\n\nВ пользовательских скриптах можно использовать перечисленные ниже возможности.\n\n* **Переменные.** Скрипты имеют доступ к переменным по умолчанию. Полные полезные данные события веб-перехватчика можно найти в `GITHUB_EVENT_PATH`. Дополнительные сведения см. в разделе [Справочник по переменным](/ru/actions/reference/workflows-and-actions/variables#default-environment-variables).\n* **Команды рабочего процесса**: скрипты могут использовать команды рабочего процесса. Дополнительные сведения см. в разделе [Команды рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-commands). Скрипты также могут использовать файлы среды. Дополнительные сведения см. в разделе [Файлы среды](/ru/actions/reference/workflows-and-actions/workflow-commands#environment-files).\n\nФайлы скриптов должны использовать расширение файла для соответствующего языка, например `.sh` или `.ps1`для успешного выполнения.\n\n> \\[!NOTE]\n> Избегайте использования скриптов для вывода конфиденциальной информации в консоль, так как любой пользователь с доступом на чтение к репозиторию может видеть выходные данные в журналах пользовательского интерфейса.\n\n### Обработка кодов выхода\n\nДля скриптов, выполняемых перед заданием, код выхода `0` указывает, что скрипт успешно завершен и далее будет запущено задание. При любом другом коде выхода задание не будет запущено и будет помечено как завершившееся сбоем. Чтобы просмотреть результаты скриптов, выполняемых перед заданием, проверьте наличие записей `Set up runner` в журналах. Дополнительные сведения о проверке журналов см. в разделе [Использование журналов выполнения рабочих процессов](/ru/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures).\n\nИспользование параметра [`continue-on-error`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error) этими скриптами не поддерживается.\n\n## Активация скриптов\n\nПользовательские скрипты должны находиться в средстве выполнения, но не должны храниться в каталоге приложения `actions-runner`. Скрипты выполняются в контексте безопасности учетной записи службы, в котором запущена служба средства выполнения.\n\n> \\[!NOTE]\n> Триггерные скрипты обрабатываются синхронно, поэтому они блокируют выполнение заданий во время их выполнения.\n\nСкрипты выполняются автоматически, если в средстве выполнения имеются следующие переменные среды, содержащие абсолютный путь к скрипту:\n\n* `ACTIONS_RUNNER_HOOK_JOB_STARTED`. Скрипт, определенный в этой переменной среды, активируется при назначении задания средству выполнения, но перед запуском задания.\n* `ACTIONS_RUNNER_HOOK_JOB_COMPLETED`: скрипт, определенный в этой переменной среды, активируется в конце задания после выполнения всех шагов, определенных в рабочем процессе.\n\nЧтобы задать эти переменные среды, можно добавить их в операционную систему или добавить их в файл с именем `.env` в каталоге приложений локального запуска (то есть каталог, в который вы скачали и распаковали программное обеспечение runner). Обратите внимание, что для любого изменения `.env` файла потребуется перезапустить средство выполнения.\nНапример, следующая `.env` запись будет автоматически запускать скрипт, сохраненный на `/opt/runner/cleanup_script.sh` компьютере runner перед выполнением каждого задания:\n\n```bash\nACTIONS_RUNNER_HOOK_JOB_STARTED=/opt/runner/cleanup_script.sh\n```\n\n> \\[!NOTE]\n> Скрипт, определенный в `ACTIONS_RUNNER_HOOK_JOB_COMPLETED` , выполняется в конце задания до завершения задания. Это делает его непригодным для вариантов использования, которые могут прерывать выполнение, например удаление компьютера runner в рамках реализации автомасштабирования.\n\n## Устранение неполадок\n\n### Отказ в разрешении\n\nЕсли при попытке запустить скрипт возникает ошибка \"отказано в разрешении\", убедитесь, что скрипт является исполняемым. Например, в терминале linux или macOS можно использовать следующую команду для создания исполняемого файла.\n\n```bash\nchmod +x PATH/TO/FILE\n```\n\nСведения об использовании рабочих процессов для выполнения скриптов см. в разделе [Добавление сценариев в рабочий процесс](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/add-scripts).\n\n### Отсутствие параметра времени ожидания\n\nВ настоящее время для скриптов, выполняемых посредством `ACTIONS_RUNNER_HOOK_JOB_STARTED` или `ACTIONS_RUNNER_HOOK_JOB_COMPLETED`, отсутствует параметр времени ожидания. Поэтому в скрипт может потребоваться добавить логику для обработки времени ожидания.\n\n### Просмотр журнала выполнения рабочего процесса\n\nЧтобы проверить, выполняются ли скрипты, можно просмотреть журналы задания. Скрипты будут указаны в отдельных шагах для `Set up runner` или `Complete runner` в зависимости от того, какая переменная среды активирует скрипт. Дополнительные сведения о проверке журналов см. в разделе [Использование журналов выполнения рабочих процессов](/ru/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures)."}