Если вы администрируете инфраструктуру 1С:Предприятие или занимаетесь разработкой конфигураций, то рано или поздно сталкиваетесь с рутинными задачами: развертывание обновлений на тестовых и рабочих серверах, запуск регрессионных тестов, резервное копирование перед релизом. Вручную эти процессы отнимают часы, а ошибки обходятся в нервы и деньги. Здесь на помощь приходит Jenkins — система непрерывной интеграции (CI) и доставки (CD), которая может взять на себя львиную долю рутинных операций с .

Но как именно Jenkins взаимодействует с платформой ? Можно ли автоматизировать не только сборку кода, но и обновление баз данных, запуск тестов или даже мониторинг производительности? В этой статье мы разберём уникальные сценарии применения Jenkins для 1С, которые редко освещаются в стандартных руководствах: от настройки триггеров на изменения в хранилище конфигурации до интеграции с vanessa-automation для автотестов. Вы узнаете, какие плагины потребуются, как избежать типичных ошибок при работе с 1cv8-командами, и почему некоторые задачи лучше решать через OneScript, а не через стандартные средства Jenkins.

Что такое Jenkins и зачем он нужен для 1С

Jenkins — это открытая платформа для автоматизации процессов непрерывной интеграции (CI) и непрерывной доставки (CD). В контексте 1С:Предприятие она позволяет:

  • 🔄 Автоматически развертывать обновления конфигураций на тестовых и рабочих серверах по расписанию или при изменении кода.
  • 🧪 Запускать регрессионные тесты (включая vanessa-automation или 1С:Тест-центр) после каждого коммита в хранилище.
  • 📦 Создавать резервные копии баз данных перед релизом и архивировать их с историей изменений.
  • 📊 Мониторить производительность серверов и отправлять уведомления при критических ошибках.

Главное преимущество Jenkins для — это централизация управления. Вместо того чтобы вручную запускать скрипты на каждом сервере, вы настраиваете пайплайны (последовательности задач) в Jenkins, которые выполняются автоматически. Например, ночью можно обновлять тестовые базы, днём — запускать тесты, а вечером — развертывать изменения на продакшн, если все проверки пройдены успешно.

Важно понимать, что Jenkins сам по себе не "понимает" . Для работы с платформой требуются:

  • 🔌 Плагины (например, Pipeline, Git, PowerShell или SSH).
  • 📜 Скрипты на PowerShell, Bash или OneScript для выполнения команд 1cv8.
  • 🔗 Интеграции с хранилищами конфигураций, системами контроля версий (Git, SVN) и тестовыми фреймворками.
⚠️ Внимание: Jenkins не заменяет хранилище конфигураций или систему контроля версий. Он лишь автоматизирует действия, которые вы обычно выполняете вручную после изменений в коде. Если у вас нет хранилища или Git-репозитория для конфигураций, настройка Jenkins потеряет смысл.

Как Jenkins взаимодействует с 1С: архитектура интеграции

Чтобы Jenkins мог управлять 1С:Предприятием, ему нужны "мосты" для связи с платформой. Рассмотрим ключевые компоненты такой интеграции:

Компонент Назначение Примеры инструментов
Агент Jenkins Выполняет задачи на целевых серверах (где установлена 1С). Может работать как на Windows, так и на Linux. Jenkins Agent, SSH Slaves
Скрипты управления Запускают команды 1cv8, OneScript или PowerShell для работы с базами. 1cv8.exe DESIGNER, vanessa-runner, oscript
Хранилище конфигурации Источник изменений, которые триггерят задачи в Jenkins (например, коммиты в Git или обновления в хранилище 1С). Git, SVN, хранилище 1С
Тестовые фреймворки Автоматизированные тесты, которые Jenkins запускает после развертывания. vanessa-automation, 1С:Тест-центр, xUnitFor1C

Типичный сценарий работы выглядит так:

  1. Разработчик фиксирует изменения в хранилище конфигурации или Git-репозитории.
  2. Jenkins обнаруживает изменения (через webhook или опрос репозитория).
  3. Запускается пайплайн, который:
    • 📥 Выгружает актуальную версию конфигурации.
    • 🔄 Обновляет тестовую базу данных.
    • 🧪 Запускает автотесты.
    • 📧 Отправляет отчёт о результатах.

    Для связи с Jenkins чаще всего использует:

    • 🖥️ Локальные команды через 1cv8.exe (если агент Jenkins установлен на сервере с 1С).
    • 🌐 Удалённое выполнение через PowerShell Remoting или SSH.
    • 🔌 REST API (если у вас настроен веб-сервис для управления 1С).
    ⚠️ Внимание: При работе с 1cv8.exe через Jenkins учитывайте, что команда может завершаться с ошибкой, если сеанс пользователя в Windows заблокирован. Для стабильной работы настройте запуск агентов Jenkins под dedicated-пользователем с правами на выполнение 1С.
    📊 Как вы обычно обновляете конфигурации 1С?
    Вручную через конфигуратор
    С помощью скриптов (PowerShell, Bash)
    Через Jenkins или другой CI/CD
    Не обновляем, используем типовые решения

    Установка и настройка Jenkins для работы с 1С

    Чтобы начать использовать Jenkins с 1С:Предприятием, выполните следующие шаги:

    1. Установка Jenkins

    Jenkins можно установить на:

    • 🖥️ Windows (через установщик или как службу).
    • 🐧 Linux (через пакетный менеджер или Docker).

    Для работы с удобнее использовать Windows-версию, так как большинство скриптов будут запускать 1cv8.exe или PowerShell.

    Минимальные требования для сервера Jenkins:

    • 💾 4 ГБ ОЗУ (8 ГБ рекомендуется при активном использовании).
    • 🖥️ 2 ядра CPU.
    • 📁 20 ГБ свободного места на диске (для логов и артефактов).

После установки:

  1. Откройте http://localhost:8080 в браузере.
  2. Установите рекомендуемые плагины (включая Pipeline, Git, PowerShell).
  3. Создайте первого пользователя с правами администратора.

2. Настройка агентов для работы с 1С

Если Jenkins установлен не на том сервере, где развернута , потребуется настроить агента (или slave). Это программа, которая выполняет задачи Jenkins на удалённой машине.

Для Windows:

  1. Скачайте agent.jar с сервера Jenkins (http://[jenkins-url]/jnlpJars/agent.jar).
  2. Запустите агент командой:
    java -jar agent.jar -jnlpUrl http://[jenkins-url]/computer/[agent-name]/slave-agent.jnlp -secret [secret-key] -workDir "C:\JenkinsAgent"
  3. Убедитесь, что у агента есть права на запуск 1cv8.exe и доступ к папкам с базами 1С.

Для Linux (если 1С работает под Wine или в Docker):

  • Настройте SSH-соединение между Jenkins и сервером с 1С.
  • Используйте плагин SSH Agent для выполнения команд.

3. Установка необходимых плагинов

Для работы с рекомендуются следующие плагины:

  • 🔧 Pipeline — для создания гибких сценариев (пайплайнов).
  • 📂 Git или Subversion — для интеграции с репозиториями конфигураций.
  • 💻 PowerShell — для выполнения скриптов на Windows.
  • 📧 Email Extension — для рассылки уведомлений.
  • 🔄 Rebuild — для повторного запуска задач.

Установите их через Manage Jenkins → Manage Plugins → Available.

☑️ Подготовка Jenkins к работе с 1С

Выполнено: 0 / 5

Создание первого пайплайна для 1С: обновление тестовой базы

Рассмотрим простой, но практичный пример: автоматическое обновление тестовой базы 1С при изменениих в хранилище конфигурации.

1. Создание задачи типа "Pipeline"

В Jenkins:

  1. Перейдите в New Item.
  2. Выберите тип Pipeline.
  3. Укажите название, например, 1C_Update_Test_DB.

2. Настройка триггера на изменения в Git

Если ваша конфигурация хранится в Git:

  1. В разделе Pipeline → Definition выберите Pipeline script from SCM.
  2. Укажите URL репозитория и ветку (например, main).
  3. В поле Script Path укажите путь к файлу Jenkinsfile (например, jenkins/Jenkinsfile).

Если используете хранилище 1С:

  • Настройте опрос хранилища через PowerShell-скрипт, который проверяет изменения.
  • Используйте плагин Build Periodically для запуска задачи по расписанию (например, каждые 2 часа).

3. Пример скрипта для пайплайна

Ниже приведён пример Jenkinsfile (Groovy-скрипт) для обновления тестовой базы:

pipeline {

agent any

stages {

stage('Checkout') {

steps {

git branch: 'main', url: 'https://github.com/your-repo/1c-config.git'

}

}

stage('Update Test DB') {

steps {

bat '''

"C:\\Program Files\\1cv8\\8.3.20.1549\\bin\\1cv8.exe" DESIGNER /S"srvinfo\\test_db" /N"Admin" /P"password" /UpdateDBCfg -force

'''

}

}

stage('Run Tests') {

steps {

bat '''

"C:\\vanessa\\vanessa-runner.exe" -run "C:\\tests\\regression_tests.vt" -report "C:\\reports\\report.html"

'''

}

}

stage('Notify') {

steps {

emailext body: 'Обновление тестовой базы завершено!', subject: '1C: Обновление тестовой БД', to: 'admin@example.com'

}

}

}

}

В этом скрипте:

  • 📥 Checkout — выгружает актуальную версию конфигурации из Git.
  • 🔄 Update Test DB — обновляет тестовую базу командой 1cv8.exe DESIGNER /UpdateDBCfg.
  • 🧪 Run Tests — запускает тесты через vanessa-automation.
  • 📧 Notify — отправляет email с результатами.
⚠️ Внимание: В команде 1cv8.exe никогда не храните пароли в открытом виде! Используйте Jenkins Credentials или переменные окружения. Пример безопасного вызова:
1cv8.exe DESIGNER /S"${DB_SERVER}" /N"${DB_USER}" /P"${DB_PASSWORD}"

где ${DB_PASSWORD} — переменная, хранимая в Jenkins.

💡

Для отладки пайплайнов используйте режим Replay в Jenkins: он позволяет запустить скрипт с последними изменениями без создания новой сборки.

Автоматизация тестирования 1С через Jenkins

Одной из самых востребованных задач при работе с в Jenkins является автоматизированное тестирование. Это позволяет:

  • 🛡️ Предотвращать регрессии после обновлений.
  • 📈 Повышать качество кода за счёт регулярных проверок.
  • ⏱️ Сокращать время на ручное тестирование.

1. Интеграция с vanessa-automation

Vanessa-Automation — популярный фреймворк для автотестирования , который хорошо интегрируется с Jenkins. Чтобы настроить его:

  1. Установите vanessa-runner на сервере с 1С.
  2. Создайте тестовые сценарии в формате .vt.
  3. Добавьте в пайплайн Jenkins шаг для запуска тестов:
    bat '"C:\\vanessa\\vanessa-runner.exe" -run "C:\\tests\\smoke_tests.vt" -report "C:\\reports\\${BUILD_NUMBER}.html"'

2. Парсинг результатов тестов

Jenkins может анализировать отчёты vanessa-automation и визуализировать результаты. Для этого:

  1. Установите плагин HTML Publisher.
  2. Добавьте в пайплайн пост-обработку:
    post {
    

    always {

    publishHTML(target: [

    allowMissing: false,

    alwaysLinkToLastBuild: true,

    keepAll: true,

    reportDir: 'C:\\reports',

    reportFiles: '${BUILD_NUMBER}.html',

    reportName: 'Test Report'

    ])

    }

    }

3. Пример пайплайна с тестами и уведомлениями

Ниже — расширенный пример пайплайна, который:

  • Обновляет тестовую базу.
  • Запускает тесты.
  • Отправляет уведомление в Telegram (через бота).
pipeline {

agent any

environment {

TELEGRAM_BOT_TOKEN = credentials('telegram-bot-token')

TELEGRAM_CHAT_ID = '-123456789'

}

stages {

stage('Update DB') {

steps {

bat '1cv8.exe DESIGNER /S"${DB_SERVER}" /N"${DB_USER}" /P"${DB_PASSWORD}" /UpdateDBCfg -force'

}

}

stage('Run Tests') {

steps {

bat '"C:\\vanessa\\vanessa-runner.exe" -run "C:\\tests\\full_tests.vt" -report "C:\\reports\\${BUILD_NUMBER}.html"'

}

}

}

post {

success {

script {

def message = "✅ Сборка #${BUILD_NUMBER} успешна! Тесты пройдены."

sendTelegram(message)

}

}

failure {

script {

def message = "❌ Сборка #${BUILD_NUMBER} упала! ${currentBuild.currentResult}: ${currentBuild.failureCause}"

sendTelegram(message)

}

}

}

}

def sendTelegram(String message) {

def url = "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage?chat_id=${TELEGRAM_CHAT_ID}&text=${message}"

def response = sh(script: "curl -s '${url}'", returnStdout: true)

echo "Telegram response: ${response}"

}

⚠️ Внимание: При интеграции с vanessa-automation убедитесь, что версия vanessa-runner совместима с вашей платформой 1С. Например, для 1С 8.3.20+ требуется vanessa-automation версии 2.4.0 или новее.
Как обработать ошибку "Не найден ключ лицензии" в vanessa-automation?

Эта ошибка возникает, если в файле лицензии vanessa.lic указан неверный ключ или истёк срок действия. Решения:

1. Проверьте файл лицензии в папке с vanessa-runner.

2. Обновите лицензию на сайте vanessa-automation.ru.

3. Убедитесь, что дата на сервере синхронизирована (ошибка может возникать при сбое времени).

Распространённые ошибки и их решения

При настройке Jenkins для можно столкнуться с типичными проблемами. Рассмотрим самые частые и способы их решения:

Ошибка Причина Решение
1cv8.exe не является внутренней или внешней командой Jenkins не находит путь к 1cv8.exe. Укажите полный путь к файлу (например, "C:\\Program Files\\1cv8\\8.3.20.1549\\bin\\1cv8.exe") или добавьте папку в PATH.
Ошибка доступа к информационной базе Неверные права пользователя или база заблокирована. Проверьте права пользователя в 1С и убедитесь, что нет активных сеансов.
Git: Authentication failed Неверные учётные данные для доступа к репозиторию. Настройте Credentials в Jenkins или используйте SSH-ключи.
Vanessa: Не найден тестовый сценарий Неверный путь к файлу .vt. Проверьте путь в команде запуска и права доступа.

Другие частые проблемы:

  • 🕒 Зависание задач: Если задача в Jenkins висит без прогресса, проверьте, не заблокирован ли процесс 1cv8.exe в Диспетчере задач. Часто это связано с ожиданием ввода пользователя (например, при обновлении конфигурации). Решение: используйте ключ -force или настройте неинтерактивный режим.
  • 📂 Проблемы с кодировкой: Если в логах Jenkins вместо кириллицы отображаются "кракозябры", установите переменную окружения JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8.
  • 🔄 Конфликты версий: Убедитесь, что версия 1cv8.exe, используемая в Jenkins, совпадает с версией платформы на сервере 1С. Например, если на сервере 1С 8.3.20, а Jenkins запускает 1cv8.exe от 8.3.18, могут возникать ошибки совместимости.

Для диагностики ошибок в Jenkins:

  1. Проверьте лог сборки (Console Output).
  2. Включите дебаг-режим в скриптах (например, добавьте -Debug в команды OneScript).
  3. Используйте плагин Blue Ocean для визуализации пайплайнов и быстрого поиска ошибок.
💡

90% ошибок при интеграции Jenkins и 1С связаны с правами доступа, путями к файлам или несовпадением версий платформы. Всегда проверяйте эти три момента в первую очередь!

Продвинутые сценарии: резервное копирование, мониторинг и деплой на продакшн

Когда базовая автоматизация настроена, можно переходить к более сложным задачам:

1. Автоматическое резервное копирование баз 1С

Jenkins может создавать резервные копии баз перед обновлениями. Пример скрипта для PostgreSQL:

bat '''

"C:\\Program Files\\PostgreSQL\\13\\bin\\pg_dump.exe" -U postgres -Fc -f "C:\\backups\\1c_db_${BUILD_NUMBER}.dump" db_name

gzip "C:\\backups\\1c_db_${BUILD_NUMBER}.dump"

'''

Для MS SQL:

bat '''

sqlcmd -S localhost -U sa -P "${SQL_PASSWORD}" -Q "BACKUP DATABASE [1C_DB] TO DISK='C:\\backups\\1c_db_${BUILD_NUMBER}.bak'"

'''

Храните резервные копии с историей (например, последние 7 дней) и настройте уведомления при сбоях.

2. Мониторинг производительности серверов 1С

С помощью Jenkins и PowerShell можно отслеживать:

  • 📊 Нагрузку на CPU/RAM сервера 1С.
  • 🕒 Время ответа кластера 1С:Предприятия.
  • 📥 Количество активных сеансов.

Пример скрипта для проверки количества сеансов:

bat '''

$sessions = (Get-WmiObject -ComputerName "srvinfo" -Namespace "root\\1Cv8" -Class "V8Sessions").Count

if ($sessions -gt 50) {

Write-Host "⚠️ Превышено количество сеансов: $sessions"

exit 1

}

'''

3. Деплой на продакшн с утверждением

Для безопасного развертывания на рабочих серверах используйте ручное утверждение (manual approval) в пайплайне:

stage('Deploy to Production') {

steps {

script {

timeout(time: 1, unit: 'HOURS') {

input message: 'Подтвердите развертывание на продакшн', ok: 'Deploy'

}

}

bat '1cv8.exe DESIGNER /S"prod_server" /N"Admin" /P"${PROD_PASSWORD}" /UpdateDBCfg -force'

}

}

Это позволит:

  • 🔒 Избежать случайных обновлений.
  • 📋 Вести историю развертываний.
  • 📧 Уведомлять команду перед релизом.
📊 Какую задачу вы хотели бы автоматизировать в первую очередь?
Обновление тестовых баз
Запуск автотестов
Резервное копирование
Мониторинг производительности
Деплой на продакшн

FAQ: Частые вопросы по Jenkins и 1С

Можно ли использовать Jenkins для обновления типовых конфигураций 1С (например, УТ 11 или ЗУП 3.1)?

Да, но с оговорками:

  • 📦 Для типовых конфигураций Jenkins может автоматизировать выгрузку обновлений с сайта (через 1C:Fresh или ITS), распаковку и применение на тестовых базах.
  • ⚠️ Однако обновление рабочих баз требует ручного контроля из-за возможных изменений в данных (например, новые реквизиты в ЗУП).
  • 🔄 Лучше использовать Jenkins для предварительного тестирования обновлений на копии продакшн-базы.

Пример пайплайна для загрузки обновлений:

bat '''

wget -O "C:\\temp\\ut11_update.cfu" "https://releases.1c.ru/version_files?..." --header="Authorization: Bearer ${ITS_TOKEN}"

"C:\\Program Files\\1cv8\\8.3.20.1549\\bin\\1cv8.exe" DESIGNER /S"test_server" /N"Admin" /P"${PASSWORD}" /UpdateDBCfg -force /LoadCfgFromFile "C:\\temp\\ut11_update.cfu"

'''

Как интегрировать Jenkins с хранилищем конфигурации 1С (не Git)?

Если вы используете хранилище конфигурации 1С (а не Git), интеграция с Jenkins возможна через:

  1. PowerShell-скрипты, которые проверяют изменения в хранилище через 1cv8.exe:
    1cv8.exe DESIGNER /S"srvinfo" /N"Admin" /P"password" /DumpCfg -file "C:\\temp\\config_dump.cfg" -v8

    Сравнивайте дампы конфигурации для обнаружения изменений.

  2. Плагин 1C Storage (если найдёте его для Jenkins).
  3. Промежуточный Git-репозиторий, в который выгружаются изменения из хранилища 1С (через OneScript или v8unpack).

Пример скрипта для выгрузки изменений:

# OneScript

ПодключитьСкрипт("C:\\scripts\\v8unpack.os");

ВыгрузитьКонфигурациюИзХранилища(

ПутьКХранилищу: "