Руководство. Развертывание в Функции Azure с помощью Jenkins
Важно!
Многие службы Azure используют подключаемые модули Jenkins. Поддержка некоторых таких подключаемых модулей будет прекращена 29 февраля 2024 г. В настоящее время для интеграции Jenkins со службами Azure рекомендуется использовать Azure CLI. Дополнительные сведения см. в статье Подключаемые модули Jenkins для Azure.
Функции Azure — это независимая от сервера служба вычислений. С помощью Функций Azure вы можете выполнить код по требованию, не запуская операции по подготовке инфраструктуры или управлению ею. В этом руководстве описано, как развернуть функцию Java в Функциях Azure с помощью подключаемого модуля для Функций Azure.
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Сервер Jenkins: если у вас нет установленного сервера Jenkins, см. статью "Создание сервера Jenkins в Azure".
Просмотр исходного кода
Используемый в этом руководстве исходный код расположен в репозитории GitHub для Visual Studio China.
Создание функции Java
Чтобы создать функцию Java с помощью стека среды выполнения Java, используйте портал Azure или Azure CLI.
Ниже объясняется, как создать функцию Java с помощью Azure CLI:
Создайте группу ресурсов, заменив <заполнитель resource_group> именем группы ресурсов.
az group create --name <resource_group> --location eastus
Создайте учетную запись хранения Azure, заменив заполнители соответствующими значениями.
az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS
Создайте приложение-функцию для тестирования, заменив заполнители соответствующими значениями.
az functionapp create --resource-group <resource_group> --runtime java --consumption-plan-location eastus --name <function_app> --storage-account <storage_account> --functions-version 2
Подготовка сервера Jenkins
Ниже описывается, как подготовить сервер Jenkins:
Разверните сервер Jenkins в Azure. Если у вас еще не установлен экземпляр сервера Jenkins, в статье Создание сервера Jenkins на виртуальной машине Azure под управлением Linux на портале Azure приведены соответствующие пошаговые инструкции.
Войдите в экземпляр Jenkins по SSH.
На экземпляре Jenkins установите Az CLI 2.0.67 или более поздней версии.
Установите Maven с помощью следующей команды:
sudo apt install -y maven
Установите Azure Functions Core Tools на экземпляре Jenkins. Для этого введите следующие команды в строке терминала:
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list' cat /etc/apt/sources.list.d/dotnetdev.list sudo apt-get update sudo apt-get install azure-functions-core-tools-3
Серверу Jenkins требуется субъект-служба Azure для аутентификации и доступа к ресурсам Azure. Пошаговые инструкции см. в статье Руководство. Развертывание из GitHub в Службе приложений Azure с использованием непрерывной интеграции и непрерывного развертывания Jenkins.
Убедитесь, что подключаемый модуль учетных данных установлен.
В меню выберите пункт Manage Jenkins (Управление Jenkins).
В разделе System Configuration (Конфигурация системы) выберите Manage plug-in (Управление подключаемым модулем).
Откройте вкладку Установленные.
В поле Filter (Фильтр) введите
credentials
.Убедитесь, что подключаемый модуль учетных данных установлен. В противном случае установите его, перейдя на вкладку Available (Доступно).
В меню выберите пункт Manage Jenkins (Управление Jenkins).
В разделе Security (Безопасность) выберите Manage Credentials (Управление учетными данными).
В разделе Credentials (Учетные данные) выберите (global) (Глобальные).
В меню выберите пункт Add Credentials (Добавить учетные данные).
Введите следующие значения для субъекта-службы Microsoft Azure:
- Тип: выберите значение: имя пользователя с паролем.
- Имя пользователя: укажите
appId
созданный субъект-службу. - Пароль: укажите
password
(секрет) субъекта-службы. - Идентификатор: укажите идентификатор учетных данных, например
azuresp
.
Нажмите ОК.
Создание вилки для примера из репозитория GitHub
Выполните вход в репозиторий GitHub с примером приложения для четных или нечетных чисел.
В правом верхнем углу в GitHub выберите Fork (Создать вилку).
Следуя инструкциям на экране, выберите свою учетную запись GitHub и завершите создание вилки.
Создание конвейера Jenkins
В этом разделе описано, как создать конвейер Jenkins.
Создайте конвейер на панели мониторинга Jenkins.
Установите флажок Prepare an environment for the run (Подготовить среду к запуску).
В разделе "Определение конвейера" выберите сценарий конвейера> из SCM.
Введите URL-адрес и путь к скрипту (doc/resources/jenkins/JenkinsFile) для своей вилки с GitHub, чтобы использовать их в примере JenkinsFile.
node { withEnv(['AZURE_SUBSCRIPTION_ID=99999999-9999-9999-9999-999999999999', 'AZURE_TENANT_ID=99999999-9999-9999-9999-999999999999']) { stage('Init') { cleanWs() checkout scm } stage('Build') { sh 'mvn clean package' } stage('Publish') { def RESOURCE_GROUP = '<resource_group>' def FUNC_NAME = '<function_app>' // login Azure withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) { sh ''' az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID az account set -s $AZURE_SUBSCRIPTION_ID ''' } sh 'cd $PWD/target/azure-functions/odd-or-even-function-sample && zip -r ../../../archive.zip ./* && cd -' sh "az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNC_NAME --src archive.zip" sh 'az logout' } } }
Сборка и развертывание
Теперь можно выполнить задание Jenkins.
Сначала получите ключ авторизации, выполнив инструкции из статьи Триггеры и привязки HTTP в службе "Функции Azure".
Введите URL-адрес приложения в окне браузера. Замените заполнители соответствующими значениями и укажите числовое значение для <input_number> в качестве входных данных для функции Java.
https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
Отобразятся результаты, аналогичные приведенным ниже в качестве примера выходным данным (для тестирования использовалось нечетное число 365):
The number 365 is Odd.
Очистка ресурсов
Если вы не собираетесь использовать это приложение в дальнейшем, удалите созданные ресурсы, выполнив следующее действие:
az group delete -y --no-wait -n <resource_group>