Гид по технологиям

Установка и настройка Jenkins с интеграцией GitHub и доставкой файлов по SSH

• 8 min read • DevOps • Обновлено 21 Nov 2025
Jenkins: установка, GitHub и доставка по SSH
Jenkins: установка, GitHub и доставка по SSH

Jenkins — популярный сервер для CI/CD. В этой подробной инструкции показано, как установить Jenkins на CentOS 7, подключить его к GitHub через webhook и настроить доставку артефактов на удалённый сервер по SSH с помощью плагина Publish Over SSH. Пройдите шаги по установке Java, добавлению репозитория Jenkins, установке плагинов, созданию SSH-ключей и настройке job, затем протестируйте сборку.

К чему подходит это руководство

Это руководство предназначено для системных администраторов и DevOps-инженеров, которые хотят развернуть Jenkins для автоматизированных сборок и доставки файлов на целевые сервера. Дается последовательная инструкция и набор проверок для безопасной и повторяемой настройки.

Важно: инструкции предполагают базовые навыки работы с Linux, SSH и GitHub. В примерах используется CentOS 7 и OpenJDK 8.

Краткие определения

  • Jenkins — сервер автоматизации для CI/CD. Упрощённо: принимает события (push, pull request), запускает сборки и выполняет шаги доставки.
  • Webhook — механизм уведомления (HTTP POST) от GitHub к Jenkins о событиях репозитория.
  • Publish Over SSH — плагин Jenkins, который копирует файлы и выполняет команды на удалённом сервере по SSH.

Установка Jenkins

Jenkins — Java‑приложение, поэтому первым шагом нужно установить Java (OpenJDK). Ниже — команды и примечания для CentOS 7.

  1. Установка Java (OpenJDK 8)
sudo yum install java-1.8.0-openjdk-devel

Проверьте версию Java:

[root@centos ~]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
  1. Добавление репозитория Jenkins и ключа
curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo

Ожидаемый вывод в файле репозитория выглядит так:

[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=1

Импорт ключа:

sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
  1. Установка Jenkins и запуск сервиса
sudo yum install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins

Проверка состояния сервиса:

sudo systemctl status jenkins
  1. Настройка брандмауэра (порт по умолчанию 8080)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

Примечание: если сервер находится в облаке (AWS/GCP/DigitalOcean), также откройте порт 8080 в сетевом ACL/правиле безопасности.

Первичная конфигурация Jenkins через веб-интерфейс

Откройте браузер и перейдите по адресу http://:8080

Экран разблокировки Jenkins

На первом запуске Jenkins требует ввод начального пароля, который хранится в файле initialAdminPassword. Получите его так:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Затем установите рекомендуемые плагины (Suggested plugins) или выбранный набор плагинов вручную.

Создайте административного пользователя на следующем шаге и укажите адрес Jenkins (Instance Configuration). По умолчанию порт можно оставить 8080 или заменить на другой.

Создать администратора

После завершения вы попадёте в дашборд Jenkins.

Jenkins готов к работе

Дашборд Jenkins

Базовые плагины и подготовка к интеграции с GitHub и SSH

Рекомендуемые плагины

Перейдите: Manage Jenkins → Manage Plugins → Available и установите минимум следующие плагины:

  • Publish Over SSH
  • Git
  • GitHub Plugin
  • Git Client Plugin

Publish Over SSH отвечает за копирование файлов и выполнение команд на удалённом сервере через SSH.

Добавление учётных данных в Jenkins

Перейдите: Dashboard → Credentials → System → Global credentials (unrestricted) → Add Credentials

Вы можете добавить разные типы учётных данных: логин/пароль, SSH private key, GitHub token и т.д. Для доступа к приватным репозиториям GitHub предпочтительно использовать Personal Access Token (PAT).

Добавление учётных данных

Ввод данных GitHub

Настройка SSH‑доступа между Jenkins и целевым сервером

Цель: Jenkins должен уметь подключаться к удалённому серверу по SSH и копировать туда файлы или запускать команды.

Подход: сгенерировать пару ключей на удалённом сервере (или на Jenkins), добавить публичный ключ в authorized_keys, а приватный ключ — в конфиг Publish Over SSH в Jenkins.

Пример: у нас есть веб‑сервер с IP 138.197.151.144, под пользователем root.

  1. На веб‑сервере (138.197.151.144) под root создайте ключи в папке ~/.ssh:
ssh [email protected]
cd ~/.ssh
ssh-keygen -t rsa -f private_key_for_jenkins

При запросе passphrase нажмите Enter (пустой пароль). Результатом будут два файла: private_key_for_jenkins и private_key_for_jenkins.pub.

  1. Создайте/обновите файл authorized_keys и добавьте туда содержимое public key:
cat private_key_for_jenkins.pub >> authorized_keys
chmod 600 authorized_keys

Это позволяет пользователю, у которого есть приватный ключ (private_key_for_jenkins), подключаться по SSH без пароля.

  1. Скопируйте приватный ключ (safe!) в безопасное место, откуда вы сможете вставить содержимое в Jenkins. Не храните приватные ключи в репозитории. Для передачи используйте безопасный канал (scp, sftp) и сразу удалите временные копии.

  2. На Jenkins: Manage Jenkins → Configure System → Publish over SSH (этот раздел появится при установленном плагине SSH)

  • В поле Key вставьте содержимое файла private_key_for_jenkins.
  • Добавьте SSH Server → Add: Hostname (138.197.151.144), Username (root), Remote Directory и при необходимости Port.
  • Нажмите Test Configuration — вы должны увидеть успешное соединение.

Детали SSH сервера

Примечание: можно генерировать ключи также на Jenkins и копировать публичный ключ на удалённый сервер. Главное — приватный ключ никогда не публиковать и ограничить доступ к нему.

Настройка GitHub webhook

Чтобы Jenkins автоматически запускал сборки при push или pull request, добавьте webhook в репозиторий GitHub.

Шаги:

  1. Войдите в GitHub и откройте репозиторий.
  2. Перейдите Settings → Webhooks → Add webhook.
  3. Payload URL: http://:8080/github-webhook/
  4. Content type: application/json
  5. Secret: оставьте пустым, если вы не настраивали секрет в Jenkins (или заполните, если настроен).
  6. Choose individual events → отметьте Push и Pull requests.
  7. Убедитесь, что Active отмечено.
  8. Нажмите Add webhook.

Добавить webhook

Настройки webhook

После этого GitHub будет отправлять HTTP POST в Jenkins при выбранных событиях.

Создание первой job в Jenkins и копирование файлов по SSH

  1. Dashboard → New Item → введите имя → выберите Freestyle Project → OK.

Добавить задачу

  1. Вкладка General: опишите проект и при необходимости отметьте GitHub project, указав URL репозитория.

Общие настройки

  1. Source Code Management → Git → укажите Repository URL. Выберите ранее добавленные креденшалы (логин/пароль или token).

  2. Branches to build: укажите ветку, например */master.

Управление исходным кодом

  1. Build Triggers → отметьте GitHub hook trigger for GITScm polling.

Триггеры сборки

  1. Build Environment → отметьте Send files or execute commands over SSH after the build runs (Publish over SSH).
  • SSH Publishers → SSH Server: выберите ранее добавленный сервер.
  • Transfers → Source files: укажите */ чтобы скопировать все файлы.
  • Remote directory: укажите, например, /jenkins-test
  • Exec command: при необходимости укажите команду, которая выполнится на удалённом сервере после копирования.
SSH Publishers --> Transfers --> Transfers Set --> Source files --> add **/*
SSH Publishers --> Transfers --> Transfers Set --> Remote directory --> /jenkins-test
SSH Publishers --> Transfers --> Transfers Set --> Exec command --> 

Настройки окружения

По умолчанию Jenkins исключает файлы типа .git, .svn и т.п. Чтобы копировать всё, нажмите Advanced и включите No default excludes.

Дополнительные настройки окружения

Сохраните job.

Запуск сборки и проверка

В Dashboard откройте проект и нажмите Build Now.

Тест сборки

Откройте номер сборки → Console Output. В конце вы должны увидеть строку Finished: SUCCESS, если всё прошло корректно.

Интеграция GitHub и Jenkins завершена успешно

Проверки безопасности и рекомендации

  • Никогда не храните приватные SSH‑ключи в открытом виде в репозиториях.
  • Ограничьте доступ к Jenkins через firewall, VPN или обратный прокси (например, nginx с аутентификацией).
  • Используйте HTTPS для доступа к Jenkins (заверните Jenkins за nginx/Let’s Encrypt).
  • Для доступа к GitHub к приватным репозиториям предпочтительны Personal Access Tokens с минимально необходимыми правами.
  • Регулярно обновляйте Jenkins и плагины.

Примеры отказов и поиск причин (troubleshooting)

Сценарий: тест соединения Publish Over SSH не проходит.

Проверки:

  • Проверьте, что на целевом сервере SSH запущен и слушает нужный порт: sudo systemctl status sshd.
  • Попробуйте подключиться с Jenkins-сервера вручную: ssh -i /path/to/private_key root@138.197.151.144
  • Убедитесь, что публичный ключ корректно добавлен в authorized_keys и права на ~/.ssh (700) и authorized_keys (600) выставлены.
  • Включите подробный лог SSH (на Jenkins и/или целевом сервере) для диагностики.

Сценарий: webhook от GitHub не доходит до Jenkins.

Проверки:

  • В вебхуке GitHub проверьте Recent Deliveries — есть ли ошибки и какой код ответа возвращает Jenkins.
  • Убедитесь, что Jenkins доступен по адресу, указанному в Payload URL.
  • Если Jenkins за NAT/файрволом, используйте публичный адрес или настроьте обратный прокси с пробросом портов.

Роль‑ориентированные чеклисты

Для администраторов Jenkins:

  • Установить и обновить Java и Jenkins.
  • Настроить брандмауэр и HTTPS.
  • Ограничить доступ к веб‑интерфейсу.
  • Резервировать конфигурацию (/var/lib/jenkins).

Для DevOps‑инженеров:

  • Создать job с нужными шагами сборки и деплоя.
  • Настроить SSH‑ключи и Publish Over SSH.
  • Настроить webhook и тесты.

Для разработчиков:

  • Настроить структуру репозитория (скрипты сборки, артефакты).
  • Тестировать локально перед push.
  • Описать шаги в README для CI.

Модель зрелости настройки CI/CD (коротко)

  • Уровень 0: ручной деплой.
  • Уровень 1: базовый Jenkins с ручными job.
  • Уровень 2: автоматический запуск по webhook, копирование на стейджинг.
  • Уровень 3: автоматические тесты, проверка качества (lint, unit tests).
  • Уровень 4: blue/green или Canary‑деплой, rollback сценарии.

Критерии приёмки

  • Jenkins установлен и доступен по HTTPS или HTTP по защищённому каналу.
  • Webhook от GitHub успешно доставляет события в Jenkins.
  • Job выполняет checkout кода из GitHub и завершает сборку со статусом SUCCESS.
  • Файлы успешно копируются на целевой сервер по SSH и выполняются указанные команды.

Частые ошибки и быстрые решения

  • Ошибка доступа к репозиторию: проверьте креденшалы и URL.
  • Ошибка авторизации SSH: проверьте права файлов в ~/.ssh и содержимое authorized_keys.
  • Webhook 404: проверьте URL /github-webhook/ и доступность Jenkins.

Небольшая методология настройки (микро‑SOP)

  1. Подготовьте сервер: обновите пакеты, установите Java.
  2. Установите Jenkins, откройте порт.
  3. Настройте HTTPS/прокси.
  4. Установите плагины Git/GitHub/Publish Over SSH.
  5. Настройте креденшалы и SSH‑ключи.
  6. Создайте job с простым скриптом и протестируйте.
  7. Подключите webhook и проверяйте автоматические запуски.

Мини‑чеклист для деплоя на несколько серверов

  • Сгенерировать ключ для каждого целевого сервера или использовать агентскую модель с ограниченными ключами.
  • Для каждого сервера добавить конфигурацию в Publish Over SSH.
  • Тестировать соединение отдельно для каждого сервера.
  • Настроить параллельные Transfer Set, если нужно выкладывать на несколько хостов.

Глоссарий (1‑строчные определения)

  • CI — непрерывная интеграция, автоматизация сборки и тестирования при изменениях кода.
  • CD — непрерывная доставка/деплой, автоматическая публикация артефактов.
  • Webhook — уведомление о событии по HTTP.
  • SSH — протокол удалённого доступа с шифрованием.

Контрольный пример: команда для ручной проверки SSH с Jenkins‑сервера

ssh -i /path/to/private_key_for_jenkins root@138.197.151.144 ls -la /jenkins-test

Если команда выводит содержимое директории без запроса пароля — соединение настроено корректно.

Заключение

В этом руководстве показаны базовые и продвинутые шаги для установки Jenkins, интеграции с GitHub и доставки файлов на удалённый сервер по SSH. Следуя чеклистам и рекомендациям по безопасности, вы получите повторяемую и прозрачную систему CI/CD.

Кратко: установите Java, Jenkins, нужные плагины; настройте креденшалы и SSH‑ключи; создайте job с Publish Over SSH; подключите webhook на GitHub и протестируйте сборку.

Дополнительно: документируйте шаги и храните резервные копии конфигурации Jenkins.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро