Упражнение. Создание агента сборки, работающего в Azure
В этом уроке для настройки агента сборки, который можно использовать в Microsoft Azure Pipelines, вы будете использовать виртуальную машину, которая работает в Microsoft Azure. Мы предоставляем виртуальную машину, которую можно использовать в течение этого модуля.
В этом разделе вы будете:
- Создайте виртуальную машину Ubuntu в Azure, чтобы служить агентом сборки.
- Создайте пул агентов в Microsoft Azure DevOps.
- Создайте маркер доступа для проверки подлинности агента с помощью Azure DevOps.
- Настройте агент с помощью программного обеспечения, необходимого для создания веб-сайта Space Game.
- Настройте агент для подключения к Azure DevOps, чтобы он смог получать задания сборки.
- Убедитесь, что агент подключен к Azure DevOps и готов к получению заданий сборки.
Существует множество способов создания виртуальной машины в Azure. В этом уроке вы создадите виртуальную машину Ubuntu с помощью интерактивного терминала Cloud Shell.
Чтобы настроить виртуальную машину, у вас есть несколько вариантов:
- Для виртуальной машины Linux можно подключиться непосредственно через SSH и интерактивно настроить систему.
- Развертывание можно автоматизировать с помощью шаблона ARM, Bicep или другого инструмента автоматического развертывания.
- Если вам нужно развернуть множество агентов сборки, можно создать образ виртуальной машины с предварительно установленным программным обеспечением.
Настройка системы в интерактивном режиме — это хороший способ приступить к работе, так как он помогает понять процесс и необходимые действия. Чтобы упростить процесс, подключитесь к виртуальной машине Ubuntu по протоколу SSH и запустите скрипты оболочки для настройки агента сборки.
Заметка
Если вы не знакомы с подключением к системам Linux или их настройкой, просто следуйте. Вы можете применить те же понятия к агентам сборки Windows.
Создание виртуальной машины Linux
В этом разделе вы создадите виртуальную машину под управлением Ubuntu 20.04, которая будет служить агентом сборки. Виртуальная машина еще не настроена как агент сборки и не имеет никаких средств, необходимых для создания веб-приложения Space Game. Вы настроите это в ближайшее время.
Создание Cloud Shell с помощью портала Azure
Важный
Чтобы выполнить упражнения в этом модуле, вам потребуется собственная подписка Azure.
В меню выберите Cloud Shell. При появлении запроса выберите интерфейс Bash.
Заметка
Cloud Shell требует, чтобы ресурс хранилища Azure сохранял все файлы, создаваемые в Cloud Shell. При первом открытии Cloud Shell вам будет предложено создать группу ресурсов, учетную запись хранения и общую папку файлов Azure. Эта настройка автоматически используется для всех будущих сеансов Cloud Shell.
Выбор региона Azure
Регион — это один или несколько центров обработки данных Azure в географическом расположении. Восточная часть США, западная часть США и Северная Европа являются примерами регионов. Каждому ресурсу Azure, включая виртуальную машину Azure, назначается регион.
Чтобы упростить выполнение команд, начните с выбора региона по умолчанию. После указания региона по умолчанию последующие команды используют этот регион, если не указать другой регион.
В Cloud Shell для перечисления регионов, доступных из подписки Azure, выполните следующую команду
az account list-locations
:az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
В столбце
Name
в выходных данных выберите регион, близкий к вам. Например, выберитеeastasia
илиwestus2
.Запустите
az configure
, чтобы задать регион по умолчанию. Замените<REGION>
именем выбранного региона:az configure --defaults location=<REGION>
В этом примере
westus2
устанавливается в качестве региона по умолчанию.az configure --defaults location=westus2
Создание группы ресурсов
Создайте группу ресурсов для хранения ресурсов, используемых в этом модуле обучения.
Чтобы создать группу ресурсов с именем tailspin-space-game-rg, выполните следующую команду
az group create
:az group create --name tailspin-space-game-rg
Создание виртуальной машины
Чтобы создать виртуальную машину, выполните следующую команду az vm create
:
az vm create \
--name MyLinuxAgent \
--resource-group tailspin-space-game-rg \
--image canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
--size Standard_DS2_v2 \
--admin-username azureuser \
--generate-ssh-keys
Запуск виртуальной машины займет несколько минут.
Standard_DS2_v2 указывает размер виртуальной машины. Размер виртуальной машины определяет скорость процессора, объем памяти, начальное количество хранилища и ожидаемую пропускную способность сети. Это тот же размер, который предоставляется агентами, размещенными на платформе Майкрософт. На практике можно выбрать размер, обеспечивающий большую вычислительную мощность или дополнительные возможности, такие как обработка графики.
Аргумент --resource-group
указывает группу ресурсов , которая содержит все необходимые элементы. Группа ресурсов позволяет администрировать все виртуальные машины, диски, сетевые интерфейсы и другие элементы, составляющие наше решение в виде единицы.
Создание пула агентов
Помните, что пул агентов организует агентов сборки. В этом разделе описано, как создать пул агентов в Azure DevOps. Позже вы укажете имя пула агентов при настройке агента, чтобы он смог зарегистрировать себя в правильном пуле.
В Azure DevOps перейдите в проект Space Game – web – Agent.
Выберите параметры проекта.
В разделе Конвейерывыберите пулы агентов .
Выберите Добавить пул.
В окне Добавление пула:
- В разделе Пул, чтобы связать, выберите Создать.
- В разделе тип пулавыберите Самообслуживание.
- В разделе "Имя "введите MyAgentPool.
На практике вы бы выбрали более описательное название для вашего пула.
Выберите Создать. В списке появится новый пул агентов.
Создание личного токена доступа
Для регистрации агента сборки в Azure DevOps требуется способ проверки подлинности.
Для этого можно создать личный маркер доступа. Личный маркер доступа (или PAT) является альтернативой паролю. Вы можете использовать PAT для проверки подлинности с помощью таких служб, как Azure DevOps.
Важный
Как и в случае с паролем, не забудьте сохранить маркер доступа в безопасном месте. В этом разделе вы сохраните маркер доступа в качестве переменной среды, чтобы она не отображалась в скрипте оболочки.
В Azure DevOps откройте параметры профиля, а затем выберите Личные маркеры доступа.
Выберите новый токен.
Введите имя для своего токена, например, агент сборки.
В разделе Областивыберите ссылку Показать все области внизу.
Найдите пулов агентов, а затем выберите & управления.
Выберите Создать.
Скопируйте маркер в безопасное место.
В ближайшее время вы будете использовать токен, чтобы дать возможность агенту сборки аутентифицировать доступ к Azure Pipelines.
Подключение к виртуальной машине
В этом разделе описано, как подключиться к виртуальной машине Linux по протоколу SSH, чтобы настроить ее.
Помните, что вы не можете выполнять интерактивный вход в размещенный корпорацией Майкрософт агент. Поскольку частный агент сборки является вашим собственным, вы можете войти в систему и настроить его, как вы хотите.
Возможность подключения к агенту сборки позволяет настроить его с помощью средств, необходимых для сборки программного обеспечения. Это также позволяет устранять неполадки при сборке конфигурации конвейера.
Чтобы получить IP-адрес виртуальной машины, выполните
az vm show
в Cloud Shell:IPADDRESS=$(az vm show \ --name MyLinuxAgent \ --resource-group tailspin-space-game-rg \ --show-details \ --query [publicIps] \ --output tsv)
Эта команда сохраняет IP-адрес в переменной Bash с именем
IPADDRESS
.Распечатайте IP-адрес виртуальной машины в консоли:
echo $IPADDRESS
Создайте подключение SSH к виртуальной машине. Вместо $IPADDRESS введите IP-адрес, полученный на предыдущем шаге. В командной строке введите да для продолжения подключения.
ssh azureuser@$IPADDRESS
Теперь вы подключены к виртуальной машине через SSH.
Эта команда работает, так как вы предоставили параметр
--generate-ssh-keys
при запускеaz vm create
ранее. Этот параметр создает пару ключей SSH, которая позволяет войти в виртуальную машину.
Установка средств сборки на виртуальной машине
В этом разделе вы настроите вашу виртуальную машину с помощью инструментов, необходимых для создания веб-сайта Space Game.
Помните, что существующий процесс сборки использует следующие средства:
- Пакет SDK для .NET, который используется для сборки приложения
- Node.js, который используется для выполнения задач сборки
- npm, диспетчер пакетов для Node.js
- gulp — пакет Node.js, который используется для минификации файлов JavaScript и CSS.
Это основные средства, необходимые процессу сборки. Чтобы установить их, вы скачайте и запустите скрипт оболочки из GitHub.
Заметка
Процесс сборки использует другие средства, такие как node-sass, для преобразования файлов Sass (.scss) в файлы CSS (.css). Однако Node.js устанавливает эти средства при запуске сборки.
Начнем с обновления диспетчера пакетов Ubuntu с именем apt. Это действие извлекает последние сведения из репозиториев пакетов и обычно является первой вещью, которую вы делаете при настройке новой системы Ubuntu.
В подключении SSH обновите кэш диспетчера пакетов apt:
sudo apt-get update
sudo
выполняет команду с правами администратора или root-пользователя.Чтобы скачать скрипт оболочки с именем build-tools.sh из GitHub, выполните следующую команду
curl
:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
Распечатайте скрипт в терминале, чтобы проверить его содержимое:
cat build-tools.sh
Отображается следующий результат:
#!/bin/bash set -e # Select a default .NET version if one is not specified if [ -z "$DOTNET_VERSION" ]; then DOTNET_VERSION=6.0.300 fi # Add the Node.js PPA so that we can install the latest version curl -sL https://deb.nodesource.com/setup_16.x | bash - # Install Node.js and jq apt-get install -y nodejs apt-get install -y jq # Install gulp npm install -g gulp # Change ownership of the .npm directory to the sudo (non-root) user chown -R $SUDO_USER ~/.npm # Install .NET as the sudo (non-root) user sudo -i -u $SUDO_USER bash << EOF curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c LTS -v $DOTNET_VERSION EOF
Скрипт устанавливает Node.js, npm, gulp и .NET Core.
Задав переменную среды
DOTNET_VERSION
, можно указать версию .NET для установки. Если эта переменная не задана, скрипт устанавливает версию, которую использует существующая конфигурация сборки. В целях обучения эта переменная не задана. Вы разрешаете скрипту использовать версию по умолчанию.Сделайте скрипт исполняемым, а затем запустите сценарий:
chmod u+x build-tools.sh sudo ./build-tools.sh
Выполнение скрипта занимает несколько минут.
На практике теперь можно выполнить команды, чтобы убедиться, что каждый компонент программного обеспечения успешно установлен.
Установка программного обеспечения агента на виртуальной машине
Теперь пришло время установить программное обеспечение агента на виртуальной машине. Это программное обеспечение позволяет виртуальной машине выступать в качестве агента сборки и получать задания сборки из Azure Pipelines.
Процесс регистрации проверяет наличие установленного программного обеспечения перед регистрацией агента в Azure Pipelines. Поэтому важно настроить агент после установки всего другого программного обеспечения. На практике можно зарегистрировать агент во второй раз, если необходимо установить дополнительное программное обеспечение.
В документации объясняется, как вручную настроить локальные агенты Linux, а также агенты macOS и Windows. Вы запускаете скрипт оболочки, чтобы настроить агент так же, как вы настроили средства сборки в предыдущем разделе.
Важный
Скрипт, выполняемый здесь, предназначен для обучения. На практике необходимо сначала понять, как каждая команда в скриптах, которые вы создаете, влияет на общую систему. В конце модуля мы укажем на документацию, которая более полно описывает ваши варианты.
Чтобы скачать скрипт оболочки с именем build-agent.sh из GitHub, выполните следующую команду
curl
:curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
Распечатайте скрипт в терминале, чтобы проверить его содержимое:
cat build-agent.sh
Отображается следующий результат:
#!/bin/bash set -e # Select a default agent version if one is not specified if [ -z "$AZP_AGENT_VERSION" ]; then AZP_AGENT_VERSION=2.187.2 fi # Verify Azure Pipelines token is set if [ -z "$AZP_TOKEN" ]; then echo 1>&2 "error: missing AZP_TOKEN environment variable" exit 1 fi # Verify Azure DevOps URL is set if [ -z "$AZP_URL" ]; then echo 1>&2 "error: missing AZP_URL environment variable" exit 1 fi # If a working directory was specified, create that directory if [ -n "$AZP_WORK" ]; then mkdir -p "$AZP_WORK" fi # Create the Downloads directory under the user's home directory if [ -n "$HOME/Downloads" ]; then mkdir -p "$HOME/Downloads" fi # Download the agent package curl https://vstsagentpackage.azureedge.net/agent/$AZP_AGENT_VERSION/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz > $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz # Create the working directory for the agent service to run jobs under if [ -n "$AZP_WORK" ]; then mkdir -p "$AZP_WORK" fi # Create a working directory to extract the agent package to mkdir -p $HOME/azp/agent # Move to the working directory cd $HOME/azp/agent # Extract the agent package to the working directory tar zxvf $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz # Install the agent software ./bin/installdependencies.sh # Configure the agent as the sudo (non-root) user chown $SUDO_USER $HOME/azp/agent sudo -u $SUDO_USER ./config.sh --unattended \ --agent "${AZP_AGENT_NAME:-$(hostname)}" \ --url "$AZP_URL" \ --auth PAT \ --token "$AZP_TOKEN" \ --pool "${AZP_POOL:-Default}" \ --work "${AZP_WORK:-_work}" \ --replace \ --acceptTeeEula # Install and start the agent service ./svc.sh install ./svc.sh start
Вам не нужно понимать, как работает каждая строка, но ниже приведены краткие сведения о том, что делает этот скрипт:
- Он загружает пакет агента в виде файла .tar.gz и извлекает его содержимое.
- В извлеченных файлах скрипт:
- Запускает скрипт оболочки с именем installdependencies.sh для установки программного обеспечения агента.
- Запускает скрипт оболочки с именем config.sh для настройки агента и регистрации агента в Azure Pipelines.
- Запускает скрипт оболочки с именем svc.sh для установки и запуска службы агента.
Скрипт использует переменные среды для предоставления сведений о организации Azure DevOps. Вот сводка:
Переменная Bash Описание По умолчанию AZP_AGENT_VERSION
Версия программного обеспечения агента для установки Последняя версия, используемая для тестирования этого модуля AZP_URL
URL-адрес организации Azure DevOps (Нет) AZP_TOKEN
Ваш личный маркер доступа (Нет) AZP_AGENT_NAME
Имя вашего агента, как оно отображается в Azure DevOps Имя узла системы AZP_POOL
Имя пула агентов по умолчанию AZP_WORK
Рабочий каталог агента для выполнения задач сборки _работа Если скрипт не предоставляет значение по умолчанию для переменной, которая не задана, скрипт выводит сообщение об ошибке и немедленно завершает работу.
В следующих шагах задайте следующие переменные среды:
AZP_AGENT_VERSION
AZP_URL
AZP_TOKEN
AZP_AGENT_NAME
AZP_POOL
Сейчас рекомендуется оставить другие переменные неустановленными.
Задайте переменную среды
AZP_AGENT_NAME
, чтобы указать имя агента. Мы рекомендуем MyLinuxAgent.export AZP_AGENT_NAME=MyLinuxAgent
Задайте переменную среды
AZP_URL
, чтобы указать URL-адрес организации Azure DevOps.Замените <организации> вашими. Вы можете получить имя на вкладке браузера, где отображается Azure DevOps.
export AZP_URL=https://dev.azure.com/organization
Установите переменную среды
AZP_TOKEN
, чтобы указать значение вашего персонального токена доступа (длинное значение токена, которое вы скопировали ранее в этом уроке).Замените маркер <> на ваш маркер.
export AZP_TOKEN=token
Задайте переменную среды
AZP_POOL
, чтобы указать имя пула агентов. Ранее вы создали пул с именем MyAgentPool.export AZP_POOL=MyAgentPool
Задайте переменную среды
AZP_AGENT_VERSION
, чтобы указать последнюю версию агента.export AZP_AGENT_VERSION=$(curl -s https://api.github.com/repos/microsoft/azure-pipelines-agent/releases | jq -r '.[0].tag_name' | cut -d "v" -f 2)
Конвейер YAML на машине с Linux должен использовать последнюю версию агента, даже если это предварительный выпуск. Программное обеспечение агента постоянно обновляется, поэтому вы
curl
сведения о версии из репозитория GitHub. Команда используетjq
для чтения последней версии из возвращаемой строки JSON.Выведите версию агента в консоль. При необходимости проверьте, чтобы убедиться, что это последняя версия.
echo $AZP_AGENT_VERSION
Сделайте сценарий исполняемым, а затем запустите его.
chmod u+x build-agent.sh sudo -E ./build-agent.sh
sudo
позволяет скрипту выполняться от имени корневого пользователя. Аргумент-E
сохраняет текущие переменные среды, включая заданные, чтобы они были доступны для скрипта.По мере выполнения скрипта вы можете увидеть, как агент подключается к Azure DevOps, увидеть его добавление в пул агентов и как тестируется подключение агента.
Убедитесь, что агент запущен
Вы успешно установили средства сборки и программное обеспечение агента на виртуальной машине. В качестве шага проверки перейдите в Azure DevOps и убедитесь, что агент доступен в пуле агентов.
В Azure DevOps перейдите в проект Space Game - web - Agent.
Выберите параметры проекта.
В разделе Конвейерывыберите пулы агентов .
Выберите MyAgentPool.
Выберите вкладку агентов.
Вы можете увидеть, что агент подключен к сети и готов принять задания сборки.
Совет
Если агент сборки отображается как автономной, попробуйте ждать несколько минут, а затем обновить страницу.
Выберите агент, MyLinuxAgent.
Перейдите на вкладку Возможности.
Во время установки процесс настройки сканировал агент сборки на предмет возможностей инструментов. Вы видите, что
npm
указан как один из них. Помните, что исходная конфигурация сборки указала, чтоnpm
необходимо установить на агенте.При указании используемого пула агентов можно включить любые из этих записей в раздел
demands
. Их включение гарантирует, что Azure Pipelines выбирает агент сборки с программным обеспечением, необходимым для сборки вашего приложения. Он также позволяет создавать пулы агентов с различными конфигурациями программного обеспечения. Azure Pipelines выберет правильную конфигурацию в зависимости от ваших требований.