В прошлых заметках уже немного упоминал о том, что начал потихоньку разбираться с вопросами CI∕CD. Чтобы закрепить у себя и попутно нанести пользу моим 59 подписчикам решил запилить небольшую серию постов по этим экспериментам. Самые основы со скриншотами.
Для начала минимум терминологии, CI∕CD включает в себя 2 понятия:
- Continuous integration (непрерывная интеграция) - подход при котором ПО раз в определенное время или после каждого коммита (обычно подразумевается одобренный коммит в мастер или dev) компилируется, тестируется и, если успешно прошло тесты, собирается в новую версию.
- Continuous deployment (непрерывное развертывание) - подход при котором новый пакет приложения (или новые образы докера и т.д.) автоматически отправляются на боевой сервер и развертываются незаметно для пользователя.
Как понятно из описания, это по большей части концепции и подходы. Их исполнение можно обеспечить множеством инструментов. Мы будем говорить преимущественно о Jenkins, но также заденем тестирование и bash скрипты.
Jenkins - программная система с открытым кодом на Java, которая как раз позволяет наладить непрерывную интеграцию и развертывание вашего проекта.
В этой части установим Jenkins и "подружим" с github, а уже в следующей накидаем наноприложение с тестами и напишем jenkins pipeline.
Установка Jenkins
Поскольку сам jenkins написан на Java, и в пайплайнах частично использует её синтаксис, перед установкой необходимо поставить openjdk-8-jdk.
$ sudo apt update
$ sudo apt install openjdk-8-jdk
После этого добавляем Jenkins репозиторий и устанавливаем само приложение.
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt update
$ sudo apt install jenkins
Проверить статус установленного сервиса можно так:
$ sudo systemctl status jenkins
Если приложение активно, вы должны будете увидеть что-то подобное:
После этого заходим в браузере на localhost:8080 и видим стартовую страницу настройки:
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Получаем пароль для запуска -> устанавливаем необходимые плагины (можно просто выбрать установку по умолчанию) -> создаем профиль (для теста можно просто продолжить как админ.) -> Та-дааа! Можно создавать первый пайплайн.
Опционально.
Поскольку это тестовый запуск "на поиграться", можно отключить авторизацию с помощью пароля.
-> открываем файл /var/lib/jenkins/config.xml
-> меняем `<useSecurity>true</useSecurity>` на false
-> в браузере прописываем localhost:8080/restart (или другую ссылку /restart, если вы меняли url при установке)
Настраиваем права доступа
Linux
Генерируем пару ssh ключей (чуть более подробно о генерации ключей писал здесь).
Jenkins
В левом верхнем меню переходим во вкладку `credentials`
кликаем по ссылке `(global)`
И дальше в левом верхнем углу `add_credentials`
В поле `Kind` создаваемых credentials выбираем `SSH Username with private key`
Указываем ваш `username`, используемый на github.
Заполняем `Description` так, чтобы вам было понятно, что это за ключ
`Private key` -> включаем `enter directly` -> жмем `Add`
Приватный ключ вставляем в открывшееся поле. Если указывали `Passphrase`, то её тоже необходимо указать здесь
OK.
С Jenkins частью разобрались, теперь переходим к Github.
Github
Переходим в Settings
Раздел SSH and GPC keys
Жмакаем `new ssh key`
Закидываем сюда Публичный ssh ключ, подтверждаем это все дело паролем
Поздравляю, Начало положено)
В следующей части сделаем небольшой pipeline, маленькое приложение и тесты для него а также чуть чуть заденем тему обработки сигналов завершения в linux.
Чтобы не пропустить продолжение - подписаться можно сюда
#linux #devops #junior #jenkins #tutorial