Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Хотя многие службы Azure имеют подключаемые модули Jenkins, большинство этих подключаемых модулей завершили поддержку с 29 февраля 2024 года. Azure CLI — это рекомендуемый в настоящее время способ интеграции Jenkins с службами Azure. Для получения дополнительной информации см. статью плагины Jenkins для Azure.
Для автоматизации этапа сборки и тестирования разработки приложений можно использовать конвейер непрерывной интеграции и развертывания (CI/CD). В этом руководстве вы создадите конвейер CI/CD на виртуальной машине Azure, включая инструкции по выполнению следующих шагов.
- Создание виртуальной машины Jenkins
- Установка и настройка Jenkins
- Создать интеграцию вебхука между GitHub и Jenkins
- Создание и активация заданий сборки Jenkins из фиксаций GitHub
- Создание образа Docker для приложения
- Проверка фиксации GitHub создает новый образ Docker и обновляет запущенное приложение
При работе с этим руководством используется интерфейс командной строки (CLI) в Azure Cloud Shell, который всегда обновлен до последней версии. Чтобы открыть Cloud Shell, выберите Попробовать в верхнем углу любого блока кода.
Если вы решили установить и использовать интерфейс командной строки локально, то для работы с этим руководством вам понадобится Azure CLI 2.0.30 или более поздней версии. Чтобы узнать версию, выполните команду az --version
. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".
Создание экземпляра Jenkins
В предыдущем руководстве по настройке виртуальной машины Linux при первой загрузке вы узнали, как автоматизировать настройку виртуальной машины с помощью cloud-init. В этом руководстве используется файл cloud-init для установки Jenkins и Docker на виртуальной машине. Jenkins — это популярный сервер автоматизации с открытым кодом, который легко интегрируется с Azure для обеспечения непрерывной интеграции (CI) и непрерывной доставки (CD). Дополнительные руководства по использованию Jenkins см. в разделе Jenkins в Центре Azure.
В текущей оболочке создайте файл с именемcloud-init-jenkins.txt и вставьте следующую конфигурацию. Например, создайте файл в Cloud Shell, не на локальном компьютере. Введите sensible-editor cloud-init-jenkins.txt
, чтобы создать файл и просмотреть список доступных редакторов. Убедитесь, что весь файл cloud-init скопирован правильно, особенно первая строка:
#cloud-config
package_upgrade: true
write_files:
- path: /etc/systemd/system/docker.service.d/docker.conf
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
- path: /etc/docker/daemon.json
content: |
{
"hosts": ["fd://","tcp://127.0.0.1:2375"]
}
runcmd:
- apt install openjdk-8-jre-headless -y
- wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
- sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
- apt-get update && apt-get install jenkins -y
- curl -sSL https://get.docker.com/ | sh
- usermod -aG docker azureuser
- usermod -aG docker jenkins
- service jenkins restart
Прежде чем создать виртуальную машину, выполните команду az group create, чтобы создать группу ресурсов. В следующем примере создается группа ресурсов с именем myResourceGroupJenkins в расположении eastus :
az group create --name myResourceGroupJenkins --location eastus
Теперь создайте виртуальную машину с помощью az vm create. Используйте параметр --custom-data
, чтобы передать файл конфигурации cloud-init. Укажите полный путь к cloud-init-jenkins.txt , если файл сохранен за пределами текущего рабочего каталога.
az vm create --resource-group myResourceGroupJenkins \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-jenkins.txt
Для создания и настройки виртуальной машины потребуется несколько минут.
Чтобы разрешить веб-трафик к виртуальной машине, используйте az vm open-port для открытия порта 8080 для трафика Jenkins и порта 1337 для приложения Node.js, используемого для запуска примера приложения:
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 8080 --priority 1001
az vm open-port --resource-group myResourceGroupJenkins --name myVM --port 1337 --priority 1002
Настройка Jenkins
Чтобы получить доступ к экземпляру Jenkins, получите общедоступный IP-адрес виртуальной машины:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Для обеспечения безопасности необходимо ввести начальный пароль администратора, хранящийся в текстовом файле на виртуальной машине, чтобы запустить установку Jenkins. Используйте общедоступный IP-адрес, полученный на предыдущем шаге, для SSH на виртуальной машине:
ssh azureuser@<publicIps>
Убедитесь, что Jenkins выполняется с помощью service
команды:
$ service jenkins status
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Tue 2019-02-12 16:16:11 UTC; 55s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 4103)
CGroup: /system.slice/jenkins.service
Feb 12 16:16:10 myVM systemd[1]: Starting LSB: Start Jenkins at boot time...
...
Просмотрите initialAdminPassword
файл установки Jenkins и скопируйте его:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Если файл еще недоступен, подождите несколько минут, пока cloud-init завершит установку Jenkins и Docker.
Теперь откройте веб-браузер и перейдите на http://<publicIps>:8080
. Выполните начальную настройку Jenkins следующим образом:
- Выберите подключаемые модули для установки
- Найдите GitHub в текстовом поле в верхней части окна. Установите флажок для GitHub, а затем нажмите кнопку "Установить"
- Создайте первого пользователя администратора. Введите имя пользователя, например администратор, а затем укажите собственный безопасный пароль. Наконец, введите полное имя и адрес электронной почты.
- Нажмите кнопку "Сохранить" и "Готово"
- Когда Jenkins будет готов, нажмите кнопку "Пуск" с помощью Jenkins
- Если веб-браузер отображает пустую страницу при запуске Jenkins, перезапустите службу Jenkins. В сеансе SSH введите
sudo service jenkins restart
и обновите веб-браузер.
- Если веб-браузер отображает пустую страницу при запуске Jenkins, перезапустите службу Jenkins. В сеансе SSH введите
- При необходимости войдите в Jenkins с помощью созданного имени пользователя и пароля.
Создайте веб-перехватчик GitHub
Чтобы настроить интеграцию с GitHub, откройте пример приложенияNode.js Hello World из репозитория примеров Azure. Чтобы сделать форк репозитория в собственную учетную запись GitHub, нажмите кнопку Fork в правом верхнем углу.
Создайте вебхук внутри созданного форка:
- Выберите Настройки, а затем выберите Webhooks слева.
- Нажмите "Добавить вебхук", а затем введите Jenkins в поле фильтра.
- Для URL-адреса полезных данных, введите
http://<publicIps>:8080/github-webhook/
. Убедитесь, что вы добавили конечную / - Для типа контента выберите application/x-www-form-urlencoded.
- Для каких событий вы хотите активировать этот веб-перехватчик? выберите только push-событие.
- Установите флажок "Активный" на отмечено.
- Щелкните Add webhook (Добавить веб-перехватчик).
Создание задания Jenkins
Чтобы Jenkins реагировал на событие в GitHub, например фиксацию кода, создайте задачу в Jenkins. Используйте URL для своего форка GitHub.
На веб-сайте Jenkins выберите "Создать задания " на домашней странице:
- Введите HelloWorld в качестве имени задания. Выберите проект Freestyle, а затем нажмите кнопку "ОК".
- В разделе Общие выберите проект GitHub и введите URL-адрес вашего форкнутого репозитория, например
https://github.com/cynthn/nodejs-docs-hello-world
- В разделе "Управление исходным кодом " выберите Git, введите URL-адрес вилированного репозитория .git , например
https://github.com/cynthn/nodejs-docs-hello-world.git
- В разделе Триггеры сборки выберите триггер hook GitHub для опроса GITscm.
- В разделе "Сборка" выберите "Добавить шаг сборки". Выберите "Выполнить оболочку", а затем введите
echo "Test"
в командное окно. - Нажмите кнопку "Сохранить " в нижней части окна заданий.
Тестирование интеграции GitHub
Чтобы проверить интеграцию GitHub с Jenkins, зафиксируйте изменения в форке.
Вернитесь в веб-интерфейс GitHub, выберите ваш форк репозитория и выберите файл index.js. Щелкните значок карандаша, чтобы отредактировать этот файл так, чтобы строка 6 выглядела следующим образом:
response.end("Hello World!");
Чтобы зафиксировать изменения, нажмите кнопку "Фиксация изменений " внизу.
В Jenkins новая сборка начинается в разделе История сборок в нижнем левом углу страницы вашего задания. Выберите ссылку номера сборки и выберите выходные данные консоли слева. Вы можете просмотреть шаги Jenkins по мере извлечения кода из GitHub, а действие сборки выводит сообщение Test
в консоль. Каждый раз, когда фиксация выполняется в GitHub, веб-перехватчик обращается к Jenkins и запускает новую сборку таким образом.
Определение сборочного образа Docker
Чтобы увидеть, как Node.js приложение работает на основе ваших фиксаций в GitHub, давайте создадим образ Docker для его запуска. Образ создается из Dockerfile, который определяет, как настроить контейнер, который запускает приложение.
Из подключения SSH к виртуальной машине перейдите в каталог рабочей области Jenkins с именем задания, созданного на предыдущем шаге. В этом примере было названо HelloWorld.
cd /var/lib/jenkins/workspace/HelloWorld
Создайте в этом каталоге рабочей области файл с sudo sensible-editor Dockerfile
и вставьте следующее содержимое. Убедитесь, что весь файл Dockerfile копируется правильно, особенно первая строка:
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
Этот Dockerfile использует базовый образ Node.js с Alpine Linux, открывает порт 1337 для приложения Hello World, затем копирует файлы приложения и инициализирует его.
Создание правил сборки Jenkins
На предыдущем шаге вы создали базовое правило сборки Jenkins, которое выводит сообщение в консоль. Давайте создадим шаг сборки, чтобы использовать Dockerfile и запустить приложение.
Вернитесь в экземпляр Jenkins, выберите задание, созданное на предыдущем шаге. Выберите "Настроить" в левой части и прокрутите вниз до раздела "Сборка ":
Удалите существующий
echo "Test"
шаг сборки. Выберите красный крест в правом верхнем углу существующего поля шага сборки.Выберите "Добавить шаг сборки", а затем нажмите кнопку "Выполнить оболочку"
В командном поле введите следующие команды Docker, а затем нажмите кнопку "Сохранить".
docker build --tag helloworld:$BUILD_NUMBER . docker stop helloworld && docker rm helloworld docker run --name helloworld -p 1337:1337 helloworld:$BUILD_NUMBER node /var/www/index.js &
Шаги сборки Docker создают образ и помечают его номером сборки Jenkins, чтобы сохранить историю образов. Все существующие контейнеры, работающие с приложением, остановлены и удалены. Затем новый контейнер запускается на основе образа и выполняет ваше приложение Node.js, используя последние коммиты в GitHub.
Тестирование конвейера
Чтобы увидеть весь рабочий процесс в действии, измените файл index.js в вашем форкнутом репозитории GitHub и нажмите Зафиксировать изменение. Новое задание начинается в Jenkins на основе веб-перехватчика для GitHub. Для создания образа Docker и запуска приложения в новом контейнере потребуется несколько секунд.
При необходимости получите общедоступный IP-адрес виртуальной машины еще раз:
az vm show --resource-group myResourceGroupJenkins --name myVM -d --query [publicIps] --o tsv
Откройте веб-браузер и введите http://<publicIps>:1337
. На вашем приложении Node.js отображаются и отражаются последние коммиты в вашем форке на GitHub следующим образом:
Теперь внесите еще одно изменение в файл index.js в GitHub и зафиксируйте это изменение. Подождите несколько секунд, пока задание завершится в Jenkins, а затем обновите веб-браузер, чтобы увидеть обновленную версию приложения, запущенную в новом контейнере, следующим образом:
Дальнейшие шаги
В этом руководстве вы настроили GitHub для запуска задания сборки Jenkins при каждом коммите кода, а затем развернули контейнер Docker для тестирования вашего приложения. Вы узнали, как:
- Создание виртуальной машины Jenkins
- Установка и настройка Jenkins
- Создать интеграцию вебхука между GitHub и Jenkins
- Создание и активация заданий сборки Jenkins из фиксаций GitHub
- Создание образа Docker для приложения
- Проверка фиксации GitHub создает новый образ Docker и обновляет запущенное приложение
Перейдите к следующему руководству, чтобы узнать, как интегрировать Jenkins с Azure DevOps Services.