Всем привет! Меня зовут Айдар Сафин, я главный разработчик Центра экспертизы 1С в Magnit Tech.
Перед тем, как писать эту статью, я удивился, насколько мало информации в сети про продукт Rundeck, хотя он очень крутой и мощный, с открытым исходным кодом. Это оркестратор, который решает множество задач. Я покажу это на примерах и частично расскажу теорию.
Почему вообще мы выбрали Rundeck? Одно время у нас планировалось изменение парадигмы: нам хотели полностью запретить прямой (терминальный и консольный) доступ по SSH и RDP к серверам. Rundeck позволяет это реализовать.
Rundeck — это инструмент, который позволяет реализовать такой запрет и централизовать управление, даже если вы не готовы к полному отказу от прямого доступа.
С помощью этого инструмента можно выполнять широкий спектр задач, в том числе при необходимости реализовывать работу с серверами без прямого доступа по SSH и RDP.
О контексте использования

Типичная среда эксплуатации 1С – десятки и сотни серверов, сотни баз данных, ежемесячное закрытие месяца, обновление платформ, запуск сложных обработок и еще множество задач.
Обычно это выглядит как набор разрозненных скриптов, запускаемых планировщиками в разное время суток на разных серверах. Иногда – вручную, через бесконечные RDP- и SSH-сессии к серверам. Все это сопровождается постоянным стрессом администраторов – вдруг что-то сломается в три часа ночи.
Этот хаос приводит к реальным проблемам неконтролируемости. Мы часто не знаем, кто, когда и что запустил, особенно с полными правами, и почему задача упала. Возникают сложности с масштабированием: как быстро повторить одну и ту же операцию на десяти новых серверах одним кликом? Это создает прямые риски для бизнеса из-за человеческого фактора.

Мы живем в эпоху DevOps и GitOps. У нас есть множество инструментов и программного обеспечения для автоматизации, которое решает множество задач. Все они эффективны в своих целях, но что, если бы существовал единый безопасный пульт управления всей инфраструктурой? Инструмент, который берет на себя рутинные операции – от перезапуска службы сервера 1С до сложнейшего закрытия месяца – буквально в один клик мыши или по расписанию.
Такой инструмент существует. Он представляет готовую платформу для реализации практик DevOps и GitOps в контексте 1С без необходимости изобретать велосипед. Знакомьтесь – Rundeck.
Для начала немного теории, после будет много практики.
Что такое Rundeck

Rundeck – это open-source платформа для автоматизации операций (Runbook Automation), которая позволяет централизованно управлять задачами и рабочими процессами на множестве серверов.
Она имеет как веб-интерфейс, так и интерфейс командной строки, но наличие веб-версии позволяет использовать Rundeck более гибко – о ней я расскажу чуть ниже.
Rundeck – это не просто еще один планировщик задач. Это оркестратор и платформа для автоматизации операционной деятельности, или, по-другому, Runbook Automation (RBA).
Преимущества Rundeck
С помощью Rundeck:
-
Мы устраняем хаос: вместо россыпи скриптов на разных серверах появляется единый реестр проверенных и безопасных операций – jobs (джобы).
-
Повышаем прозрачность: больше никаких «секретных» скриптов, о которых знает только один системный администратор. Все видно и доступно в одном месте.
-
Уменьшаем количество ошибок за счет контроля доступа на основе ролей – Rundeck поддерживает RBAC. Можно, например, разрешить джуну-администратору запускать обновление, но запретить ему вручную редактировать скрипты.
-
Rundeck упрощает масштабирование: одна задача, созданная в Rundeck, может выполняться как на одном сервере, так и на сотне. Можно создавать джобы, добавлять и сохранять новые серверы буквально по одному клику,
-
Также Rundeck поддерживает практики DevOps/GitOps, так как легко интегрируется с Git. Job'ы можно хранить в репозитории и подключать к CI/CD-пайплайнам для автоматического развертывания и обновления конфигураций.
Rundeck – это не замена вашим скриптам, а надстройка над ними. Она работает поверх скриптов, например, на PowerShell или Bash, повышая их управляемость, безопасность и придавая структуру.
Как я уже упоминал, у Rundeck очень удобный веб-интерфейс. Благодаря гибкой настройке прав можно предоставить доступ даже нетехническим специалистам – например, сделать для бухгалтера ярлык на рабочем столе или разрешить кнопку в веб интерфейсе «Начать закрытие месяца». Администраторы и пользователи могут заходить в веб-интерфейс из корпоративной сети или, если вы разрешили доступ, извне – с планшета, ноутбука или телефона.
В этой статье:
-
Мы рассмотрим не просто еще один инструмент, а разберемся, как с помощью Rundeck снизить риски, ускорить выполнение стандартных операций и повысить надежность вашей 1С.
-
Перейдем от концепции к практике. Я покажу серию примеров – от простых к сложным – чтобы продемонстрировать, что можно делать в Rundeck. Есть простые задачи, а есть сложные, которые называются workflow, – о них я тоже расскажу.
-
Покажу, как вся мощь Rundeck применяется на примерах в системе 1С.
Когда нужен Rundeck?
-
Когда у вас разнородная среда с различными операционными системами – Linux, Windows, MacOS и другими.
-
Когда есть множество ручных скриптов на Bash, Python, PowerShell и так далее.
-
Когда требуется простой инструмент с поддержкой Jumphost.
О Jumphost-серверах я тоже расскажу – Rundeck позволяет работать с ними как напрямую, так и косвенно.
Первые шаги

Про установку рассказывать не буду, это подробно описано в документации.
Например, вы можете установить его в Docker:
https://docs.rundeck.com/docs/administration/install/docker.html
Но это не единственный вариант.
Перейдем сразу к моменту, когда Rundeck уже установлен и готов к работе.
В веб-интерфейсе основное, с чего все начинается, – это создание job'ов. Для этого переходим в раздел All Jobs и нажимаем New Job. Это самая частая операция при работе с Rundeck.
Пример замены крона на Rundeck

Следующий пример – как можно заменить скрипты, которые выполняются в планировщиках задач, например в cron для Linux, с помощью Rundeck.
Допустим, у нас есть скрипт под названием 1crestart, написанный на Python. Он выполняет стандартные регламентные операции с сервером приложений 1С – очистку сеансовых данных, перезапуск службы сервера 1С и другие.
Скрипт в нашем гитхабе: https://github.com/magnit-tech/magnit-ansible-linux-1c/blob/main/distr/scripts/1crestart
Раньше мы настраивали это так: скрипты лежали на хостах, а их запуск задавался в crontab – планировщике задач Linux. Там мы настраивали запуск скриптов, указывали время и так далее. Основное неудобство заключалось в том, что при добавлении каждого нового сервера все приходилось настраивать заново.
Теперь с Rundeck это гораздо удобнее: мы выбираем команду, указываем путь, задаем Label и на вкладке Schedule настраиваем время запуска.

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

При создании job'а доступны два типа шагов: Node Steps (выполняются на каждом узле) и Workflow Steps (выполняются один раз для всего workflow).
Я по каждому из них ниже приведу краткий практический пример. Пока просто отмечу, что в этой джобе (на изображении) мы выбираем тип Command в Node Steps – это делается вот так.

В Rundeck есть раздел Nodes – это, по сути, инвентарь. Здесь можно заранее настроить все хосты, указать учетные данные, добавить SSH-ключи. Сервер появился – настроили и забыли.

Далее возвращаемся к джобе: в поле «Matched nodes» указываем целевые серверы — один или несколько (до сотен). Удобство в том, что при появлении нового сервера достаточно просто добавить его в джобу – не нужно заходить на сам сервер и настраивать cron или что-то еще.

Rundeck – очень прозрачный инструмент. Ниже я приведу пример лога: видно, кто, когда и что запускал. Далее покажу, что происходит, если провалиться в конкретную строку.
Работа с Jumphost
Jumphost (прыжковый хост) – это сервер, используемый как промежуточная точка доступа к защищенным сегментам сети.
Зачем он нужен? Чаще всего – для подключения к закрытому контуру. Например, у вас есть особо защищенные серверы или системы, к которым вы не хотите давать прямой доступ. В этом случае вы настраиваете Jumphost, разрешаете ему подключаться к этим серверам и уже с него запускаете нужные скрипты или выполняете действия для управления конечными серверами.
Rundeck поддерживает как прямое подключение к серверам, так и косвенное – через Jumphost. Ниже я покажу, как можно устанавливать платформу через Ansible с использованием Jumphost.
Пример настройки в Rundeck
Resource Model: Указать jumphost как ssh-agent или через SSH-туннель.
Job: В командах прописать подключение через jumphost (ssh -J jumphost_user@jumphost target_server).
Автоматизация закрытия месяца (пример реализации)
Следующий пример – знакомая многим боль, особенно если база большая: закрытие месяца.

Когда объем данных значительный, процесс становится сложным. Обычно это выглядит так: нужно закрыть месяц в крупной базе, мы договариваемся с администраторами СУБД, администраторами 1С, они что-то настраивают у себя перед закрытием, мы созваниваемся, даем отмашки, ждем, когда бухгалтеры закончат проводки и можно будет запускать процесс. В итоге получается целая цепочка действий между администраторами и бухгалтерами.
В Rundeck все это можно упростить. Например, можно сделать для бухгалтеров кнопку «Запустить закрытие месяца», настроив операции на сервере приложений 1С – остановку и перезапуск службы. Далее можно выполнить действия на сервере СУБД, например, провести VACUUM FULL ANALYZE.
Кроме того, если база очень большая, перед закрытием месяца сервер СУБД можно немного «подтюнить»: отключить seqscan, включить nestloop или скорректировать другие параметры.
Здесь я показываю только начальную настройку: я не стал добавлять все остальное, чтобы не перегружать изображение. Понятно, что в конце нужно вернуть значения параметров к тем, которые используются в обычном режиме работы, а не в режиме закрытия месяца. Это гипотетический пример, но вы можете адаптировать его к своему процессу.
Это один workflow, то есть одна джоба. Вторым шагом после выполнения операций на сервере СУБД идет следующий этап: мы запускаем обратно службу сервера 1С и при необходимости можем прямо отсюда запустить обработку. Если обработка внешняя – способов сделать это несколько, но я показываю, что ее можно запустить и выполнить напрямую из Rundeck.
В конце можно настроить webhook-уведомление, которое отправит сообщение в рабочий чат администраторов о том, что закрытие месяца завершено.
При необходимости можно добавить webhook'и на каждом шаге – тогда Rundeck будет отправлять уведомления вроде: «Начал перезапуск сервера 1С», «Запускаю обработку», «Процесс завершен». Все это легко настраивается.
Пример: установка платформы через Jumphost

Следующий пример – установка платформы через Jumphost, а именно косвенная установка на сервере, где установлен Ansible.
Кстати, про установку платформы 1С используя Ansible я рассказывал в другой статье: //infostart.ru/1c/articles/2438899/.
Здесь мы устанавливаем платформу с помощью Ansible установленного на сервере и запускаем процесс прямо из Rundeck, но на удаленном сервере. Это пример использования Jumphost.
Далее будут примеры работы с Ansible непосредственно в Rundeck.

Слева показан краткий лог – в Rundeck логируется абсолютно каждое действие. Если нужно посмотреть подробности, можно провалиться в конкретную строку и увидеть все то же самое, что отобразилось бы при подключении к серверу по SSH, в данном случае к Linux. Видно полный лог и ход выполнения операций.
Все хранится в Rundeck и доступно для просмотра в любой момент. Это очень прозрачно и удобно.
Сравнение с Ansible Tower
Пару слов о том, почему для Ansible используют именно Rundeck, а не, например, Ansible Tower от Red Hat.
Rundeck – это универсальный оркестратор, который позволяет управлять выполнением разнородных задач, включая запуск Ansible Playbook'ов через удобный интерфейс. В то время как Ansible Tower специализирован только для работы с Ansible. Кроме того, Ansible Tower в расширенной версии является платным продуктом и при этом остается узкоспециализированным решением.
Rundeck может выполнять разные задачи: и запускать Ansible Playbook, и управлять другими процессами. Ниже я покажу пример того, как Rundeck может запускать как полноценный Playbook Ansible, так и отдельный модуль: например, ping.
Поддержка различных скриптов и ОС
В любой операционной системе: Linux или Windows – можно запускать PowerShell, Bash или обычные CMD-скрипты. Все это поддерживается Rundeck.

На скриншоте показан пример прямого подключения к Windows-серверу. Также Rundeck поддерживает WinRM – Windows Remote Management, стандартный протокол Microsoft для удаленного управления системой Windows. Это аналог SSH для Windows.
Так же, как мы подключаемся к серверам через SSH, можно использовать WinRM для подключения к Windows-серверам. Он работает по порту 5985 (и 5986 для HTTPS), в отличие от SSH. Соответственно, эти порты нужно разрешить в настройках сети.
Параметризация и циклы

Следующий пример – чуть более сложный. Здесь мы можем либо указывать IP-адрес, компьютер и порт прямо в скрипте, либо выносить эти значения в параметры и создавать более сложные параметризированные скрипты. Rundeck это поддерживает и позволяет гибко настраивать.

Здесь уже используется цикл. Например, можно с помощью Rundeck отслеживать состояние портов на одном или нескольких серверах, периодически опрашивая их каждые пять минут.
Кроме того, можно добавить оповещение в Telegram – тогда Rundeck будет отправлять сообщения в чат о том, что все в порядке или, наоборот, что обнаружена проблема.
Обзор Node Steps и Workflow Steps
Node Steps и Workflow Steps – это «кирпичики», из которых строится workflow (рабочий процесс).
Workflow может быть простым (один или несколько шагов) или сложным: с циклами, условными переходами, откатами и т.п.
Для начала я буду показывать упрощенно, но вы должны знать, что можно создавать более сложные процессы.

Node Steps выполняются для каждого узла. Если у вас добавлено 5 или 10 серверов, действие будет выполняться на каждом из них. Workflow Steps выполняются один раз для всего потока в workflow. Они очень похожи, есть лишь незначительные отличия. Я покажу примеры и того, и другого, стараясь не повторяться.

Command. Это самая распространенная операция. Например, мы можем проверить доступность сервера или свободное место на диске командой в Linux, например: df -h /var/1C.
PowerShell. Мы можем отслеживать состояние службы сервера 1С. Для этого пишем: Get-Service "1C:Enterprise 8.3 Server Agent (x86-64)" | Select-Object Name, Status
Script file or URL. Я уже показывал, как запускается скрипт непосредственно с хоста, например пайтон скрипт 1restart. Но у нас он также выложен в GitLab. GitLab – это тот же Git, только локальный. На некоторых серверах мы настроили тестовый запуск скриптов прямо из GitLab. Это очень удобно: если скрипт часто изменяется, вы можете отредактировать его у себя на компьютере, запушить в Git, и при следующем выполнении Rundeck возьмет актуальную версию напрямую из репозитория.
Скрипт в нашем гитхабе: https://github.com/magnit-tech/magnit-ansible-linux-1c/blob/main/distr/scripts/1crestart
Job Reference. Этот шаг позволяет запускать одну джобу из другой. Это удобно, чтобы не дублировать задания с небольшими изменениями: можно просто вызывать нужную джобу внутри другой.

Ansible, о котором я уже упоминал. Здесь, например, используется Ansible Playbook Inline Workflow Node Step – это запуск полноценного скрипта Ansible прямо из Rundeck.
Copy File. Это стандартная, но жизненно важная операция: копирование файлов. Мы можем просто настроить в workflow шаг копирования файлов.

Я уже писал, что в Ansible можно запускать как целиком playbook, так и отдельный модуль. Например, выбрать Ansible Module и запустить модуль ping. В Ansible есть сотни модулей для самых разных задач. Можно просто настроить выполнение одного модуля. Это очень удобно и значительно ускоряет работу.

Global Variable. Этот шаг используется в более сложных системах, когда вы создаете комплексный workflow, например, с циклами или откатами. Один из элементов – это Global Variable. Можно, например, зафиксировать время начала выполнения задачи и затем использовать это значение в следующих шагах.
Flow Control позволяет задать переходы при ошибках. Например, если что-то пошло не так, можно настроить откат или другое действие при сбое.
Log Data Step. Хотя в Rundeck уже есть встроенное подробное логирование, этот шаг позволяет дополнительно сохранять данные: выполнять дамп всех переменных и получать еще больше информации о ходе выполнения.
Data Step используется для эмуляции работы с базами данных. С его помощью можно, например, сформировать динамический инвентарь в формате JSON для генерации списка серверов.
Использование Rundeck при аутсорсинге
Rundeck эффективен для контроля работы внешних подрядчиков (аутсорсинг/аутстаффинг).
-
«Защита от дурака и злоумышленника». Аутсорсер может запускать только те джобы, которые ему делегированы. Выполнить произвольную команду на сервере невозможно.
-
Четкое разделение обязанностей. Команда аутсорсера видит кнопку «Обновить конфигурацию», а системный администратор управляет этими джобами. Разработчики могут иметь доступ к запуску тестовых сценариев.
-
Полный аудит вместо «доверия». Видно, кто, когда и что запускал, с какими правами и параметрами. Все логи централизованно хранятся в Rundeck.
-
Снижение порога входа для новых сотрудников. Новый сотрудник получает доступ только к определенному интерфейсу, где доступны конкретные джобы с заданными параметрами. Это удобно и помогает быстро войти в процесс.
Раньше вы могли давать аутсорсеру доступ по RDP к рабочему серверу 1С, чтобы он обновлял конфигурацию раз в квартал или раз в месяц. При этом у него оставалась возможность выполнять множество других действий, о которых вы могли даже не знать.
После внедрения Rundeck создается отдельная джоба, например «Обновление конфигурации БУ». Аутсорсер заходит в веб-интерфейс, выполняет только разрешенные действия, а вы видите все, что происходит.
Таким образом, Rundeck превращает аутсорсинг из источника риска в управляемый сервис, где вы задаете правила и сохраняете полный контроль над инфраструктурой.
Еще раз о преимуществах
Rundeck помогает внедрить промышленный стандарт эксплуатации 1С, где все операции предсказуемы, контролируемы и документированы.
-
Стандартизация операций. Все повторяемые задачи выполняются по единому проверенному сценарию. Исключение человеческого фактора и отклонений от регламента.
-
Ролевой доступ и безопасность. Точная настройка прав: кто может запускать, кто настраивать. Доступ к операциям без прямого доступа к серверам.
-
Полный аудит действий. Фиксация всех запусков: кто, когда, с какими параметрами. История выполнения и детальные логи каждого шага.
-
Оркестрация сложных сценариев. Последовательное или параллельное выполнение задач на разных серверах. Условная логика, паузы, обработка ошибок в рамках workflow.
-
Централизованное управление серверами. Единая точка управления для всей инфраструктуры 1С. Массовое выполнение операций на группах серверов.
-
Контролируемый аутсорсинг. Предоставление конкретных операций без доступа к инфраструктуре. Ограничение зоны ответственности внешних специалистов.
-
Продвинутое планирование задач. Расписание с учетом зависимостей и бизнес-логики. Уведомления о результатах выполнения по расписанию.
-
Интеграция с GitOps-практиками. Хранение конфигураций Jobs в git-репозитории. Версионность, код-ревью и контроль изменений процедур.
Подведем итоги
-
DevOps/GitOps – инфраструктура как код плюс CI/CD,
-
Self-Service – разработчики и бухгалтеры запускают задачи без администраторов,
-
Автоматизация – никаких ручных SSH и cron,
-
Единый интерфейс – для Ansible, скриптов и API,
-
Безопасность – использование JumpHost, RBAC и Audit Log,
-
Интеграции – GitLab, Zabbix, Telegram и другие.
Вопросы и ответы
Каковы возможности Rundeck по подключению к различным сервисам? Поддерживает ли он только готовые протоколы или есть возможность расширения?
Rundeck поддерживает множество протоколов (SSH, WinRM, JDBC для БД и др.) и типов серверов. Архитектура, похожая на работу с Jump Host, позволяет подключаться как напрямую, так и косвенно. Существует возможность написания собственных коннекторов для поддержки отсутствующих протоколов.
Являются ли задания (джобы) в Rundeck параметризируемыми?
Да, задания полностью параметризируемы. Можно прописывать параметры для запуска скриптов. Платформа позволяет организовывать сложные процессы с циклами, откатами, переходами и параметрами.
В чем ключевые отличия Rundeck от Jenkins, на который он похож?
Хотя есть сходства, Rundeck заточен под другие задачи. Он позволяет организовать парадигму, при которой прямое подключение к серверам по SSH или RDP заменяется работой через Rundeck. Jenkins не обладает всем необходимым для таких операционных функций функционалом.
Jenkins – это CI/CD-инструмент для автоматизации сборки и деплоя ПО, а Rundeck – платформа runbook-автоматизации (RBA) для централизованного выполнения операционных задач (администрирование, мониторинг, восстановление) с контролем доступа и безопасным управлением инфраструктурой.
Является ли Rundeck полноценной заменой прямого доступа (RDP/SSH) или это дополнение?
Пока это дополнение. Мы используем гибридный подход (~50/50): часть операций выполняется через Rundeck, а в некоторых случаях сохраняется прямой доступ на серверы.
В каких ситуациях возникает необходимость прямого доступа на сервер, и является ли это ограничением Rundeck?
Прямой доступ пока требуется в основном на тестовых стендах в R&D для отладки и экспериментов для проверки гипотез, отладки, работы с Python-скриптами, Docker и т.д. На продуктивных серверах доступ обычно строго контролируется, и после передачи в продуктив работа ведется преимущественно через Rundeck. Это не ограничение платформы, а особенность рабочего процесса.
Можно ли настроить доступ к Rundeck для неподготовленных пользователей, например, бухгалтеров?
Да, благодаря системе RBAC (управление доступом на основе ролей) в Rundeck можно настроить доступ ювелирно. Пользователь может даже не знать о Rundeck: у него будет ярлык (например, «Запустить закрытие месяца»), который запустит нужную джобу. Вся сложность процесса будет скрыта.
Можно ли подробнее про «шаманство» при закрытии месяца? Делается ли полный вакуум (VACUUM FULL) каждый раз?
Нет, не обязательно. Такие тяжелые операции часто планируются заранее (например, на ночь перед закрытием). Однако Rundeck позволяет запускать их и по факту, сразу после того как бухгалтеры свели данные, не дожидаясь ночного окна. Пример демонстрирует гибкость в построении процессов. Это гипотетический пример, но вы можете взять его за основу и адаптировать к вашему процессу.
Какой организации нужен Rundeck, а для кого это излишне?
Rundeck нужен, когда есть множество (десятки, сотни) скриптов, запускаемых на разных операционных системах (Windows, Linux, MacOS) с параметрами, особенно если используется Jump Host. Это не замена скриптам, а оркестратор – единый пульт управления для их централизованного, удобного и контролируемого запуска даже с мобильного устройства.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.
Вступайте в нашу телеграмм-группу Инфостарт

