Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Хотя многие службы Azure имеют подключаемые модули Jenkins, большинство этих подключаемых модулей завершили поддержку с 29 февраля 2024 года. Azure CLI — это рекомендуемый в настоящее время способ интеграции Jenkins с службами Azure. Для получения дополнительной информации см. статью плагины Jenkins для Azure.
В этом руководстве показано, как развернуть пример приложения из GitHub в кластере Службы Azure Kubernetes (AKS), настроив непрерывную интеграцию (CI) и непрерывное развертывание (CD) в Jenkins.
При работе с этим руководством вы выполните следующие задачи:
- Разверните пример приложения голосования Azure в кластере AKS.
- Создайте базовый проект Jenkins.
- Настройте учетные данные для Jenkins для взаимодействия с ACR.
- Создайте задание сборки Jenkins и вебхук GitHub для автоматизированных сборок.
- Проверьте конвейер CI/CD для обновления приложения в AKS на основе коммитов кода GitHub.
Предпосылки
Чтобы завершить работу с этим руководством, вам потребуются следующие элементы:
Базовое понимание Kubernetes, Git, CI/CD и образов контейнеров
Кластер AKS и
kubectlнастроен с учетными данными кластера AKS.Реестр контейнеров Azure (ACR), имя сервера входа ACR и кластер AKS, настроенный для проверки подлинности в реестре ACR.
Контроллер Jenkins, развернутый на виртуальной машине Azure.
Azure CLI версии 2.0.46 или более поздней, установлен и настроен. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI".Docker, установленный в системе разработки
Учетная запись GitHub, личный маркер доступа GitHub и клиент Git, установленный в системе разработки
Если вы предоставляете собственный экземпляр Jenkins, а не используете этот пример сценария для развертывания Jenkins, ваш экземпляр Jenkins должен иметь Docker, установленный и настроенный и kubectl.
Подготовка приложения
В этой статье вы используете пример приложения для голосования Azure, содержащего веб-интерфейс и Redis для временного хранилища данных.
Прежде чем интегрировать Jenkins и AKS для автоматизированных развертываний, сначала подготовьте и разверните приложение для голосования Azure в кластере AKS. Это развертывание вручную позволяет увидеть приложение в действии.
Замечание
В примере приложения для голосования Azure используется модуль pod Linux, который планируется запустить на узле Linux. Поток, описанный в этой статье, также работает для модуля pod Windows Server, запланированного на узле Windows Server.
Форкните следующий репозиторий GitHub для образца приложения - https://github.com/Azure-Samples/azure-voting-app-redis. Чтобы сделать форк репозитория в собственную учетную запись GitHub, нажмите кнопку Fork в правом верхнем углу.
Клонируйте форк на свою систему разработки. Убедитесь, что при клонировании этого репозитория используется URL-адрес форка.
git clone https://github.com/<your-github-account>/azure-voting-app-redis.git
Перейдите в директорию вашего клонированного форка.
cd azure-voting-app-redis
Чтобы создать образы контейнеров, необходимые для примера приложения, используйте файл docker-compose.yaml с docker-compose:
docker-compose up -d
Необходимые базовые образы извлекаются и создаются контейнеры приложений. Затем можно использовать команду docker images для просмотра созданного образа. Три образа скачаны или созданы. Изображение azure-vote-front содержит приложение и использует образ nginx-flask в качестве основы. Образ redis используется для запуска экземпляра Redis:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
azure-vote-front latest 9cc914e25834 40 seconds ago 694MB
redis latest a1b99da73d05 7 days ago 106MB
tiangolo/uwsgi-nginx-flask flask 788ca94b2313 9 months ago 694MB
Войдите в реестр контейнеров Azure.
az acr login -n <acrLoginServer>
Замените <acrLoginServer> сервером входа ACR.
Используйте команду docker tag для тега изображения с именем сервера входа ACR и номером версии v1. Используйте собственное <acrLoginServer> имя, полученное на предыдущем шаге:
docker tag azure-vote-front <acrLoginServer>/azure-vote-front:v1
Наконец, отправьте образ azure-vote-front в реестр ACR. Опять же, замените <acrLoginServer> именем сервера входа в собственный реестр ACR, например myacrregistry.azurecr.io:
docker push <acrLoginServer>/azure-vote-front:v1
Развертывание примера приложения в AKS
Чтобы развернуть образец приложения в кластере AKS, можно использовать файл манифеста Kubernetes в корне репозитория Azure Vote. Откройте файл манифеста azure-vote-all-in-one-redis.yaml с помощью редактора, например vi. Замените microsoft на название вашего сервера входа ACR. Это значение найдено в строке 60 файла манифеста:
containers:
- name: azure-vote-front
image: azuredocs/azure-vote-front
Затем используйте команду kubectl apply, чтобы развернуть приложение в вашем кластере AKS.
kubectl apply -f azure-vote-all-in-one-redis.yaml
Служба подсистемы балансировки нагрузки Kubernetes создается для предоставления приложению доступа к Интернету. Этот процесс может занять несколько минут. Чтобы отслеживать ход развертывания подсистемы балансировки нагрузки, используйте команду kubectl get service с аргументом --watch .
$ kubectl get service azure-vote-front --watch
После изменения состояния EXTERNAL-IP с ожидание на IP-адрес, используйте Control + C для остановки процесса наблюдения kubectl.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Чтобы увидеть приложение в действии, откройте веб-браузер и перейдите к внешнему IP-адресу вашего сервиса. Отображается приложение для голосования Azure, как показано в следующем примере:
Настройка контроллера Jenkins
Примените следующие изменения, чтобы включить развертывания AKS из контроллера Jenkins:
Откройте входящий порт 80 .
az vm open-port \
--resource-group <Resource_Group_name> \
--name <Jenkins_Controller_VM> \
--port 80 --priority 1020
Замените <Resource_Group_name> и <Jenkins_Controller_VM> соответствующими значениями.
Подключитесь через SSH к контроллеру Jenkins
ssh azureuser@<PublicIPAddress>
Замените <PublicIPAddress> IP-адрес контроллера Jenkins.
Установка и вход в AzCLI
curl -L https://aka.ms/InstallAzureCli | bash
az login
Замечание
Чтобы вручную установить AzCLI, следуйте этим инструкциям.
Установите Docker.
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;
sudo apt-key fingerprint 0EBFCD88;
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable";
sudo apt-get update;
sudo apt-get install docker-ce -y;
Установка Kubectl и подключение к AKS
sudo az aks install-cli
sudo az aks get-credentials --resource-group <Resource_Group> --name <AKS_Name>
Замените <Resource_Group> и <AKS_Name> соответствующими значениями.
Настройка доступа
sudo usermod -aG docker jenkins;
sudo usermod -aG docker azureuser;
sudo touch /var/lib/jenkins/jenkins.install.InstallUtil.lastExecVersion;
sudo service jenkins restart;
sudo cp ~/.kube/config /var/lib/jenkins/.kube/
sudo chmod 777 /var/lib/jenkins/
sudo chmod 777 /var/lib/jenkins/config
Создание переменной среды Jenkins
Переменная среды Jenkins используется для хранения имени сервера входа ACR. Эта переменная используется в задании сборки в Jenkins. Чтобы создать эту переменную среды, выполните следующие действия.
В левой части портала Jenkins выберите "Управление Jenkins" и "Настроить систему".
В разделе "Глобальные свойства" выберите переменные среды. Добавьте переменную с именем
ACR_LOGINSERVERи значением сервера входа ACR.
По завершении нажмите кнопку "Сохранить " в нижней части страницы.
Создание учетных данных Jenkins для ACR
Во время процесса CI/CD Jenkins создает новые образы контейнеров на основе обновлений приложений и затем отправляет эти образы в реестр ACR.
Чтобы разрешить Jenkins отправлять обновленные образы контейнеров в ACR, необходимо указать учетные данные для ACR.
Для разделения ролей и разрешений настройте объект-субъект службы для Jenkins с разрешениями участника в реестре ACR.
Создание субъекта-службы для Jenkins для использования ACR
Сначала создайте учетную запись службы с помощью команды az ad sp create-for-rbac :
az ad sp create-for-rbac
Эта команда создает выходные данные, аналогичные следующему примеру:
{
"appId": "<app-ID>",
"displayName": "azure-cli-2018-09-28-22-19-34",
"name": "http://azure-cli-2018-09-28-22-19-34",
"password": "<password>",
"tenant": "<tenant-ID>"
}
Запишите идентификатор приложения и пароль. Эти значения используются в следующих шагах для настройки ресурса учетных данных в Jenkins.
Получите идентификатор ресурса реестра ACR с помощью команды az acr show и сохраните его в качестве переменной.
ACR_ID=$(az acr show --resource-group <Resource_Group> --name <acrLoginServer> --query "id" --output tsv)
Замените <Resource_Group> и <acrLoginServer> соответствующими значениями.
Создайте назначение роли, чтобы назначить права служебного субъекта реестру ACR.
az role assignment create --assignee <appID> --role Contributor --scope $ACR_ID
Замените <appId> значением, предоставленным в выходных данных предыдущей команды, использованной для создания основного субъекта-службы.
Создание ресурса учетных данных в Jenkins для субъекта-службы ACR
После создания назначения ролей в Azure сохраните свои учетные данные ACR в объекте учетных данных Jenkins. Эти учетные данные используются во время задания сборки Jenkins.
Слева в портале Jenkins выберите Управление Jenkins>Управление учетными данными>Хранилище Jenkins>Глобальные учетные данные (неограниченные)>Добавить учетные данные
Убедитесь, что тип учетных данных имеет имя пользователя с паролем и введите следующие элементы:
- Имя пользователя — идентификатор приложения субъекта-службы, созданного для аутентификации с вашим реестром ACR.
- Пароль — пароль сервисного объекта, созданного для аутентификации в реестре ACR.
- ID — идентификатор учетных данных, например acr-credentials
По завершении форма учетных данных выглядит следующим образом:
Нажмите кнопку "ОК " и вернитесь на портал Jenkins.
Создание проекта Jenkins
На домашней странице портала Jenkins выберите новый элемент в левой части:
Введите azure-vote в качестве имени задания. Выберите проект Freestyle, а затем нажмите кнопку "ОК"
В разделе «Общие» выберите проект GitHub и введите URL-адрес вашего форкнутого репозитория, например https://github.com/<your-github-account>/azure-voting-app-redis
В разделе «Управление исходным кодом» выберите Git, введите URL-адрес вашего вилочного репозитория
.git, например https://github.com/<your-github-account>/azure-voting-app-redis.gitВ разделе Триггеры сборки выберите триггер веб-хука GitHub для опроса системы GITscm
В разделе "Среда сборки" выберите "Использовать секретные тексты или файлы"
В разделе "Привязки" выберите "Добавить>имя пользователя и пароль" (разделенные)
Введите
ACR_IDпеременную имени пользователя иACR_PASSWORDдля переменной пароля
Выберите добавление шага сборки типа Execute shell и используйте следующий текст. Этот скрипт создает новый образ контейнера и отправляет его в реестр ACR.
# Build new image and push to ACR. WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}" docker build -t $WEB_IMAGE_NAME ./azure-vote docker login ${ACR_LOGINSERVER} -u ${ACR_ID} -p ${ACR_PASSWORD} docker push $WEB_IMAGE_NAMEДобавьте еще один шаг сборки типа Execute shell и используйте следующий текст. Этот скрипт обновляет развертывание приложения в AKS с новым образом контейнера из ACR.
# Update kubernetes deployment with new image. WEB_IMAGE_NAME="${ACR_LOGINSERVER}/azure-vote-front:kube${BUILD_NUMBER}" kubectl set image deployment/azure-vote-front azure-vote-front=$WEB_IMAGE_NAMEПосле завершения нажмите кнопку "Сохранить".
Тестирование сборки Jenkins
Прежде чем автоматизировать задание на основе фиксаций GitHub, вручную протестируйте сборку Jenkins.
Эта сборка проверяет правильность настройки задания. Он подтверждает, что надлежащий файл аутентификации Kubernetes находится на месте и что аутентификация в ACR работает.
В меню слева проекта выберите "Создать сейчас".
Первая сборка занимает больше времени, так как слои образов Docker извлекаются на сервер Jenkins.
Сборки выполняют следующие задачи:
- Клонирует репозиторий GitHub
- Создает новый образ контейнера
- Отправляет образ контейнера в реестр ACR
- Обновляет образ, используемый развертыванием AKS
Так как в код приложения изменения не были внесены, веб-интерфейс не изменяется.
После завершения задания сборки выберите сборку #1 в журнале сборки. Выберите выходные данные консоли и просмотрите выходные данные процесса сборки. Последняя строка должна указывать на успешную сборку.
Создайте вебхук GitHub
После успешной сборки вручную теперь интегрируйте GitHub в сборку Jenkins. Используйте вебхук для запуска задания сборки Jenkins каждый раз, когда код коммитится в GitHub.
Чтобы создать вебхук GitHub, выполните следующие действия.
Перейдите к вашему форкнутому репозиторию GitHub в веб-браузере.
Выберите Настройки, а затем выберите Webhooks слева.
Выберите Добавить вебхук. В поле URL-адрес полезных данных введите
http://<publicIp:8080>/github-webhook/, где<publicIp>— это IP-адрес сервера Jenkins. Обязательно включите окончательный элемент/. Оставьте остальные значения по умолчанию для типа контента и для срабатывания на событиях push.Выберите «Добавить веб-перехватчик».
Тестируйте полный конвейер CI/CD
Теперь можно протестировать весь конвейер CI/CD. При отправке коммита кода на GitHub выполняются следующие шаги:
- Вебхук GitHub уведомляет Jenkins.
- Jenkins запускает задание сборки и извлекает последнюю фиксацию кода из GitHub.
- Сборка Docker запускается с помощью обновленного кода, а новый образ контейнера помечен последним номером сборки.
- Этот новый образ контейнера отправляется в реестр контейнеров Azure.
- Приложение, работающее в службе Azure Kubernetes, обновляется с помощью последнего образа из реестра контейнеров Azure.
На компьютере разработки откройте клонированного приложения с помощью редактора кода. В каталоге /azure-vote/azure-vote откройте файл с именем config_file.cfg. Обновите значения голосов в этом файле на что-то другое, отличное от кошек и собак, как показано в следующем примере:
# UI Configurations
TITLE = 'Azure Voting App'
VOTE1VALUE = 'Blue'
VOTE2VALUE = 'Purple'
SHOWHOST = 'false'
При обновлении сохраните файл, зафиксируйте изменения и отправьте их в вилку репозитория GitHub. Веб-хук GitHub запускает новое задание на процесс сборки в Jenkins. На веб-панели мониторинга Jenkins отслеживайте процесс сборки. Требуется несколько секунд, чтобы извлечь последний код, создать и отправить обновленный образ и развернуть обновленное приложение в AKS.
После завершения сборки обновите веб-браузер примера приложения для голосования Azure. Изменения отображаются, как показано в следующем примере: