Установка и настройка 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.
- Установка 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)- Добавление репозитория 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- Установка Jenkins и запуск сервиса
sudo yum install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkinsПроверка состояния сервиса:
sudo systemctl status jenkins- Настройка брандмауэра (порт по умолчанию 8080)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reloadПримечание: если сервер находится в облаке (AWS/GCP/DigitalOcean), также откройте порт 8080 в сетевом ACL/правиле безопасности.
Первичная конфигурация Jenkins через веб-интерфейс
Откройте браузер и перейдите по адресу http://

На первом запуске Jenkins требует ввод начального пароля, который хранится в файле initialAdminPassword. Получите его так:
sudo cat /var/lib/jenkins/secrets/initialAdminPasswordЗатем установите рекомендуемые плагины (Suggested plugins) или выбранный набор плагинов вручную.
Создайте административного пользователя на следующем шаге и укажите адрес Jenkins (Instance Configuration). По умолчанию порт можно оставить 8080 или заменить на другой.

После завершения вы попадёте в дашборд 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).


Настройка SSH‑доступа между Jenkins и целевым сервером
Цель: Jenkins должен уметь подключаться к удалённому серверу по SSH и копировать туда файлы или запускать команды.
Подход: сгенерировать пару ключей на удалённом сервере (или на Jenkins), добавить публичный ключ в authorized_keys, а приватный ключ — в конфиг Publish Over SSH в Jenkins.
Пример: у нас есть веб‑сервер с IP 138.197.151.144, под пользователем root.
- На веб‑сервере (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.
- Создайте/обновите файл authorized_keys и добавьте туда содержимое public key:
cat private_key_for_jenkins.pub >> authorized_keys
chmod 600 authorized_keysЭто позволяет пользователю, у которого есть приватный ключ (private_key_for_jenkins), подключаться по SSH без пароля.
Скопируйте приватный ключ (safe!) в безопасное место, откуда вы сможете вставить содержимое в Jenkins. Не храните приватные ключи в репозитории. Для передачи используйте безопасный канал (scp, sftp) и сразу удалите временные копии.
На 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 — вы должны увидеть успешное соединение.

Примечание: можно генерировать ключи также на Jenkins и копировать публичный ключ на удалённый сервер. Главное — приватный ключ никогда не публиковать и ограничить доступ к нему.
Настройка GitHub webhook
Чтобы Jenkins автоматически запускал сборки при push или pull request, добавьте webhook в репозиторий GitHub.
Шаги:
- Войдите в GitHub и откройте репозиторий.
- Перейдите Settings → Webhooks → Add webhook.
- Payload URL: http://
:8080/github-webhook/ - Content type: application/json
- Secret: оставьте пустым, если вы не настраивали секрет в Jenkins (или заполните, если настроен).
- Choose individual events → отметьте Push и Pull requests.
- Убедитесь, что Active отмечено.
- Нажмите Add webhook.


После этого GitHub будет отправлять HTTP POST в Jenkins при выбранных событиях.
Создание первой job в Jenkins и копирование файлов по SSH
- Dashboard → New Item → введите имя → выберите Freestyle Project → OK.

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

Source Code Management → Git → укажите Repository URL. Выберите ранее добавленные креденшалы (логин/пароль или token).
Branches to build: укажите ветку, например */master.

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

- 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, если всё прошло корректно.

Проверки безопасности и рекомендации
- Никогда не храните приватные 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)
- Подготовьте сервер: обновите пакеты, установите Java.
- Установите Jenkins, откройте порт.
- Настройте HTTPS/прокси.
- Установите плагины Git/GitHub/Publish Over SSH.
- Настройте креденшалы и SSH‑ключи.
- Создайте job с простым скриптом и протестируйте.
- Подключите 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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента