Как настроить конвейеры непрерывной интеграции в Jenkins на Ubuntu 16.04

Вступление

Jenkins - это сервер автоматизации с открытым исходным кодом, предназначенный для автоматизации повторяющихся технических задач, связанных с непрерывной интеграцией и поставкой программного обеспечения. Обладая надежной экосистемой плагинов и широкой поддержкой, Jenkins может обрабатывать разнообразные рабочие нагрузки для создания, тестирования и развертывания приложений.

В предыдущих руководствах мы https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04 установили Jenkins на сервере Ubuntu 16.04] и https: // www. digitalocean.com/community/tutorials/how-to-configure-jenkins-with-ssl-using-an-nginx-reverse-proxy[configure Jenkins с SSL с использованием обратного прокси-сервера Nginx]. В этом руководстве мы покажем, как настроить Jenkins для автоматического тестирования приложения, когда изменения помещаются в репозиторий.

В этом уроке мы будем интегрировать Jenkins с GitHub, чтобы Jenkins получал уведомление, когда новый код помещается в репозиторий. Когда Jenkins получает уведомление, он извлекает код и затем тестирует его в контейнерах Docker, чтобы изолировать среду тестирования от хост-машины Jenkins. Мы будем использовать пример приложения Node.js, чтобы показать, как определить процесс CI / CD для проекта.

Предпосылки

Чтобы следовать этому руководству, вам понадобится сервер Ubuntu 16.04 с ОЗУ не менее 1 ГБ, настроенный для безопасной установки Jenkins. Для правильной защиты веб-интерфейса вам необходимо назначить доменное имя серверу Jenkins. Следуйте этим инструкциям, чтобы узнать, как настроить Jenkins в ожидаемом формате:

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

После того, как вы завершили приведенные выше руководства, вы можете продолжить чтение этой статьи.

Добавьте пользователя Jenkins в группу Docker

После выполнения предварительных условий на вашем сервере будут установлены как Jenkins, так и Docker. Однако по умолчанию пользователь Linux, ответственный за запуск процесса Jenkins, не может получить доступ к Docker.

Чтобы это исправить, нам нужно добавить пользователя + jenkins в группу` + docker` с помощью команды + usermod:

sudo usermod -aG docker jenkins

Вы можете перечислить членов группы + docker, чтобы подтвердить, что пользователь` + jenkins` был успешно добавлен:

grep docker /etc/group
Outputdocker:x:999:sammy,jenkins

Чтобы Jenkins использовал свое новое членство, вам нужно перезапустить процесс:

sudo systemctl restart jenkins

С помощью некоторых плагинов по умолчанию, которые мы включили во время установки, Jenkins теперь может использовать Docker для запуска задач сборки и тестирования.

Создать токен личного доступа в GitHub

Чтобы Jenkins мог просматривать ваши проекты на GitHub, вам необходимо создать токен личного доступа в нашей учетной записи GitHub.

Начните с посещения GitHub и войдите в свой аккаунт, если вы этого еще не сделали. После этого нажмите на свой значок пользователя в верхнем правом углу и выберите * Настройки * из выпадающего меню:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/github_settings_item.png [элемент настроек GitHub]

На следующей странице найдите раздел * Настройки разработчика * в левом меню и нажмите * Токены личного доступа *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/developer_settings.png [ссылка на токены личного доступа GitHub]

Нажмите кнопку * Создать новый токен * на следующей странице:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/new_token_button.png [GitHub сгенерировать новую кнопку токена]

Вы попадете на страницу, где вы сможете определить область действия вашего нового токена.

В поле * Описание токена * добавьте описание, которое позволит вам распознать его позже:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/token_description.png [описание токена GitHub]

В разделе * Выберите области действия * установите флажки * repo: status *, * repo: public_repo * и * admin: org_hook *. Это позволит Jenkins обновлять статусы коммитов и создавать веб-хуки для проекта. Если вы используете частный репозиторий, вам нужно выбрать общее разрешение * repo * вместо подпунктов репо:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/token_scope3.png [область действия токена GitHub]

Когда вы закончите, нажмите * Создать токен * внизу.

Вы будете перенаправлены обратно на страницу индекса токенов личного доступа, и ваш новый токен отобразится:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/view_token.png [GitHub просмотреть новый токен]

Скопируйте токен сейчас, чтобы мы могли ссылаться на него позже. Как указывается в сообщении, невозможно получить токен после того, как вы покинете эту страницу.

Теперь, когда у вас есть личный токен доступа для вашей учетной записи GitHub, мы можем настроить Jenkins для просмотра репозитория вашего проекта.

Добавьте токен личного доступа GitHub в Jenkins

Теперь, когда у нас есть токен, нам нужно добавить его на наш сервер Jenkins, чтобы он мог автоматически настраивать веб-хуки. Войдите в свой веб-интерфейс Jenkins, используя учетную запись администратора, которую вы настроили во время установки.

На главной панели инструментов нажмите * Credentials * в меню слева:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [элемент учетных данных Jenkins]

На следующей странице щелкните стрелку рядом с * (global) * в области действия * Jenkins *. В появившемся окне нажмите * Добавить учетные данные *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/add_credentials.png [кнопка добавления учетных данных Jenkins]

Вы попадете в форму для добавления новых учетных данных.

В раскрывающемся меню * Вид * выберите * Секретный текст *. В поле * Secret * вставьте свой личный токен доступа GitHub. Заполните поле * Описание *, чтобы позже вы смогли идентифицировать эту запись. Вы можете оставить Scope как Global и поле ID пустым:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/credentials_form.png [форма учетных данных Jenkins]

Нажмите кнопку * OK *, когда вы закончите.

Теперь вы сможете ссылаться на эти учетные данные из других частей Jenkins для помощи в настройке.

Настройка доступа Jenkins к GitHub

Вернувшись в основную панель управления Jenkins, нажмите * Manage Jenkins * в меню слева:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [элемент учетных данных Jenkins]

В списке ссылок на следующей странице нажмите * Настроить систему *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/configure_system_link.png [Jenkins настроить системную ссылку]

Прокрутите параметры на следующей странице, пока не найдете раздел * GitHub *. Нажмите кнопку * Добавить GitHub Server * и выберите * GitHub Server *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/add_github_server.png [Jenkins добавить сервер GitHub]

Раздел расширится, чтобы запросить дополнительную информацию. В раскрывающемся меню * Credentials * выберите свой личный токен доступа GitHub, который вы добавили в предыдущем разделе:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/select_credentials.png [Дженкинс выбирает учетные данные GitHub]

Нажмите кнопку * Проверить соединение *. Jenkins выполнит тестовый вызов API для вашей учетной записи и проверит подключение:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/test_creds.png [Дженкинс проверяет учетные данные GitHub]

Когда вы закончите, нажмите кнопку * Сохранить *, чтобы внести изменения.

Настройте демонстрационное приложение в своей учетной записи GitHub

Чтобы продемонстрировать, как использовать Jenkins для тестирования приложения, мы будем использовать простую программу helhel world », созданную с помощью https://hapijs.com/[Hapi. УД. Поскольку мы настраиваем Jenkins для реагирования на изменения в репозитории, вам необходимо иметь собственную копию демонстрационного кода.

Посетите project хранилище и нажмите кнопку * Fork * в верхнем правом углу, чтобы сделать копию хранилища в своей учетной записи:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/fork_example_project.png [пример проекта Fork]

Копия хранилища будет добавлена ​​в ваш аккаунт.

Репозиторий содержит файл + package.json +, который определяет зависимости времени выполнения и разработки, а также способ запуска включенного набора тестов. Зависимости можно установить, запустив + npm install +, а тесты можно запустить с помощью + npm test +.

Мы также добавили "+ Jenkinsfile +" в репозиторий. Дженкинс читает этот файл, чтобы определить действия, выполняемые с репозиторием для сборки, тестирования или развертывания. Он написан с использованием декларативной версии Jenkins Pipeline DSL.

+ Jenkinsfile +, включенный в репозиторий + hello-hapi +, выглядит следующим образом:

Jenkinsfile

#!/usr/bin/env groovy

pipeline {

   agent {
       docker {
           image 'node'
           args '-u root'
       }
   }

   stages {
       stage('Build') {
           steps {
               echo 'Building...'
               sh 'npm install'
           }
       }
       stage('Test') {
           steps {
               echo 'Testing...'
               sh 'npm test'
           }
       }
   }
}

+ Pipe + содержит полное определение, которое будет оценивать Jenkins. Внутри у нас есть раздел + agent, который указывает, где будут выполняться действия в конвейере. Чтобы изолировать нашу среду от хост-системы, мы будем тестировать в контейнерах Docker, указанных агентом + docker +.

Поскольку Hapi.js является основой для Node.js, мы будем использовать образ Docker + node + в качестве нашей базы. Мы указываем пользователя + root + в контейнере, чтобы пользователь мог одновременно записывать как в присоединенный том, содержащий извлеченный код, так и в том, в который сценарий записывает свой вывод.

Далее файл определяет два этапа, которые являются просто логическим разделением работы. Мы назвали первый «Build», а второй «Test». На этапе сборки выводится диагностическое сообщение, а затем запускается + npm install + для получения необходимых зависимостей. Шаг теста печатает другое сообщение и затем запускает тесты, как определено в файле + package.json +.

Теперь, когда у вас есть хранилище с допустимым + Jenkinsfile +, мы можем настроить Jenkins для просмотра этого хранилища и запуска файла при внесении изменений.

Создать новый конвейер в Дженкинс

Затем мы можем настроить Jenkins для использования личного маркера доступа GitHub для просмотра нашего хранилища.

Вернувшись в основную панель управления Jenkins, нажмите * New Item * в меню слева:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [боковое меню Дженкинса]

Введите имя для нового конвейера в поле * Введите имя элемента *. Затем выберите * Pipeline * в качестве типа элемента:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/item_type.png [тип конвейера Jenkins]

Нажмите кнопку * OK * внизу, чтобы двигаться дальше.

На следующем экране установите флажок * GitHub project *. В появившемся поле * Project url * введите URL-адрес хранилища GitHub вашего проекта.

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/add_github_project.png [Jenkins добавить проект GitHub]

Затем, в разделе * Build Triggers *, установите флажок * GitHub hook для опроса GITScm *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/github_hook_box.png [поле подключения Jenkins GitHub]

В разделе * Pipeline * мы должны указать Jenkins запустить конвейер, определенный в + Jenkinsfile + в нашем репозитории. Измените тип * Definition * на * Конвейерный скрипт из SCM *.

В появившемся новом разделе выберите * Git * в меню * SCM *. В появившемся поле * Repository URL * введите URL-адрес своего форка репозитория:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/add_pipeline_repo2.png [Jenkins GitHub добавить конвейерное хранилище]

Когда вы закончите, нажмите кнопку * Сохранить * внизу страницы.

Выполнение начальной сборки и настройка веб-крючков

На момент написания этой статьи (июнь 2017 г.) Jenkins не настраивал автоматически веб-подключения, когда вы определяете конвейер для хранилища в интерфейсе.

Для того, чтобы Дженкинс мог настроить соответствующие хуки, нам нужно выполнить ручную сборку в первый раз.

На главной странице вашего конвейера нажмите * Build Now * в меню слева:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/build_pipeline_now.png [Дженкинс создает конвейер сейчас]

Новая сборка будет запланирована. В поле * Build History * в левом нижнем углу через мгновение должна появиться новая сборка. Кроме того, * Stage View * начнет рисоваться в основной области интерфейса. Это будет отслеживать ход вашего тестирования по завершении различных этапов:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/build_progress.png [прогресс сборки Jenkins]

В поле * История сборки * щелкните номер, связанный со сборкой, чтобы перейти на страницу сведений о сборке. Отсюда вы можете нажать кнопку * Console Output * в меню слева, чтобы увидеть подробности выполненных шагов:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/console_output.png [вывод на консоль Jenkins]

По окончании щелкните элемент * Back to Project * в левом меню, чтобы вернуться к основному виду конвейера.

Теперь, когда мы создали проект один раз, мы можем попросить Дженкинса создать веб-хуки для нашего проекта. Нажмите * Configure * в левом меню конвейера:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/configure_menu_item.png [элемент конфигурации Jenkins]

На этом экране не требуется никаких изменений, просто нажмите кнопку * Сохранить * внизу. Теперь, когда у Jenkins есть информация о проекте из начального процесса сборки, он зарегистрирует webhook в нашем проекте GitHub, когда вы сохраните страницу.

Вы можете убедиться в этом, зайдя в свой репозиторий GitHub и нажав кнопку * Настройки *. На следующей странице нажмите * Webhooks * в боковом меню. Вы должны увидеть веб-крючок вашего сервера Jenkins в главном интерфейсе:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/view_webhooks.png [Дженкинс просмотр веб-хукс]

Теперь, когда вы внесете новые изменения в свой репозиторий, Jenkins будет уведомлен. Затем он извлечет новый код и повторно протестирует его, используя ту же процедуру.

Чтобы приблизиться к этому, на нашей странице репозитория на GitHub вы можете нажать кнопку * Создать новый файл * слева от зеленой кнопки * Клонировать или загрузить *:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/create_new_file_button.png [кнопка создания нового файла Дженкинса]

На следующей странице выберите имя файла и некоторое фиктивное содержимое:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/new_file_contents.png [содержимое нового файла Jenkins]

Нажмите кнопку * Commit new file * внизу, когда вы закончите.

Если вы вернетесь к своему интерфейсу Jenkins, вы увидите, что новая сборка запускается автоматически:

изображение: https: //assets.digitalocean.com/articles/jenkins_usage_1604/new_build_started.png [Новая сборка Jenkins началась]

Вы можете запустить дополнительные сборки, сделав коммиты в локальную копию репозитория и отправив его обратно в GitHub.

Заключение

В этом руководстве мы настроили Jenkins для наблюдения за проектом GitHub и автоматического тестирования любых новых изменений, которые были зафиксированы. Дженкинс извлекает код из хранилища, а затем выполняет процедуры сборки и тестирования из изолированных контейнеров Docker. Полученный код можно развернуть или сохранить, добавив дополнительные инструкции к тому же + Jenkinsfile +.

Related