Упражнение. Создание агента сборки, работающего в 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.

  1. Перейдите на портал Azure и войдите.

  2. В меню выберите Cloud Shell. При появлении запроса выберите интерфейс Bash.

    Снимок экрана портала Azure с расположением элемента меню Cloud Shell.

    Заметка

    Cloud Shell требует, чтобы ресурс хранилища Azure сохранял все файлы, создаваемые в Cloud Shell. При первом открытии Cloud Shell вам будет предложено создать группу ресурсов, учетную запись хранения и общую папку файлов Azure. Эта настройка автоматически используется для всех будущих сеансов Cloud Shell.

Выбор региона Azure

Регион — это один или несколько центров обработки данных Azure в географическом расположении. Восточная часть США, западная часть США и Северная Европа являются примерами регионов. Каждому ресурсу Azure, включая виртуальную машину Azure, назначается регион.

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

  1. В Cloud Shell для перечисления регионов, доступных из подписки Azure, выполните следующую команду az account list-locations:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. В столбце Name в выходных данных выберите регион, близкий к вам. Например, выберите eastasia или westus2.

  3. Запустите 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. Позже вы укажете имя пула агентов при настройке агента, чтобы он смог зарегистрировать себя в правильном пуле.

  1. В Azure DevOps перейдите в проект Space Game – web – Agent.

  2. Выберите параметры проекта.

  3. В разделе Конвейерывыберите пулы агентов .

    Снимок экрана: параметры проекта в Azure DevOps с расположением пункта меню пулов агентов.

  4. Выберите Добавить пул.

  5. В окне Добавление пула:

    1. В разделе Пул, чтобы связать, выберите Создать.
    2. В разделе тип пулавыберите Самообслуживание.
    3. В разделе "Имя "введите MyAgentPool.

    На практике вы бы выбрали более описательное название для вашего пула.

  6. Выберите Создать. В списке появится новый пул агентов.

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

Для регистрации агента сборки в Azure DevOps требуется способ проверки подлинности.

Для этого можно создать личный маркер доступа. Личный маркер доступа (или PAT) является альтернативой паролю. Вы можете использовать PAT для проверки подлинности с помощью таких служб, как Azure DevOps.

Важный

Как и в случае с паролем, не забудьте сохранить маркер доступа в безопасном месте. В этом разделе вы сохраните маркер доступа в качестве переменной среды, чтобы она не отображалась в скрипте оболочки.

  1. В Azure DevOps откройте параметры профиля, а затем выберите Личные маркеры доступа.

    Снимок экрана Azure DevOps с расположением пункта меню

  2. Выберите новый токен.

  3. Введите имя для своего токена, например, агент сборки.

  4. В разделе Областивыберите ссылку Показать все области внизу.

  5. Найдите пулов агентов, а затем выберите & управления.

  6. Выберите Создать.

  7. Скопируйте маркер в безопасное место.

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

Подключение к виртуальной машине

В этом разделе описано, как подключиться к виртуальной машине Linux по протоколу SSH, чтобы настроить ее.

Помните, что вы не можете выполнять интерактивный вход в размещенный корпорацией Майкрософт агент. Поскольку частный агент сборки является вашим собственным, вы можете войти в систему и настроить его, как вы хотите.

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

  1. Чтобы получить 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.

  2. Распечатайте IP-адрес виртуальной машины в консоли:

    echo $IPADDRESS
    
  3. Создайте подключение 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.

  1. В подключении SSH обновите кэш диспетчера пакетов apt:

    sudo apt-get update
    

    sudo выполняет команду с правами администратора или root-пользователя.

  2. Чтобы скачать скрипт оболочки с именем build-tools.sh из GitHub, выполните следующую команду curl:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
    
  3. Распечатайте скрипт в терминале, чтобы проверить его содержимое:

    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 для установки. Если эта переменная не задана, скрипт устанавливает версию, которую использует существующая конфигурация сборки. В целях обучения эта переменная не задана. Вы разрешаете скрипту использовать версию по умолчанию.

  4. Сделайте скрипт исполняемым, а затем запустите сценарий:

    chmod u+x build-tools.sh
    sudo ./build-tools.sh
    

    Выполнение скрипта занимает несколько минут.

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

Установка программного обеспечения агента на виртуальной машине

Теперь пришло время установить программное обеспечение агента на виртуальной машине. Это программное обеспечение позволяет виртуальной машине выступать в качестве агента сборки и получать задания сборки из Azure Pipelines.

Процесс регистрации проверяет наличие установленного программного обеспечения перед регистрацией агента в Azure Pipelines. Поэтому важно настроить агент после установки всего другого программного обеспечения. На практике можно зарегистрировать агент во второй раз, если необходимо установить дополнительное программное обеспечение.

В документации объясняется, как вручную настроить локальные агенты Linux, а также агенты macOS и Windows. Вы запускаете скрипт оболочки, чтобы настроить агент так же, как вы настроили средства сборки в предыдущем разделе.

Важный

Скрипт, выполняемый здесь, предназначен для обучения. На практике необходимо сначала понять, как каждая команда в скриптах, которые вы создаете, влияет на общую систему. В конце модуля мы укажем на документацию, которая более полно описывает ваши варианты.

  1. Чтобы скачать скрипт оболочки с именем build-agent.sh из GitHub, выполните следующую команду curl:

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
    
  2. Распечатайте скрипт в терминале, чтобы проверить его содержимое:

    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

    Сейчас рекомендуется оставить другие переменные неустановленными.

  3. Задайте переменную среды AZP_AGENT_NAME, чтобы указать имя агента. Мы рекомендуем MyLinuxAgent.

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. Задайте переменную среды AZP_URL, чтобы указать URL-адрес организации Azure DevOps.

    Замените <организации> вашими. Вы можете получить имя на вкладке браузера, где отображается Azure DevOps.

    export AZP_URL=https://dev.azure.com/organization
    
  5. Установите переменную среды AZP_TOKEN, чтобы указать значение вашего персонального токена доступа (длинное значение токена, которое вы скопировали ранее в этом уроке).

    Замените маркер <> на ваш маркер.

    export AZP_TOKEN=token
    
  6. Задайте переменную среды AZP_POOL, чтобы указать имя пула агентов. Ранее вы создали пул с именем MyAgentPool.

    export AZP_POOL=MyAgentPool
    
  7. Задайте переменную среды 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.

  8. Выведите версию агента в консоль. При необходимости проверьте, чтобы убедиться, что это последняя версия.

    echo $AZP_AGENT_VERSION
    
  9. Сделайте сценарий исполняемым, а затем запустите его.

    chmod u+x build-agent.sh
    sudo -E ./build-agent.sh
    

    sudo позволяет скрипту выполняться от имени корневого пользователя. Аргумент -E сохраняет текущие переменные среды, включая заданные, чтобы они были доступны для скрипта.

    По мере выполнения скрипта вы можете увидеть, как агент подключается к Azure DevOps, увидеть его добавление в пул агентов и как тестируется подключение агента.

Убедитесь, что агент запущен

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

  1. В Azure DevOps перейдите в проект Space Game - web - Agent.

  2. Выберите параметры проекта.

  3. В разделе Конвейерывыберите пулы агентов .

  4. Выберите MyAgentPool.

  5. Выберите вкладку агентов.

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

    Снимок экрана Azure DevOps с состоянием частного агента. Агент отображается как

    Совет

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

  6. Выберите агент, MyLinuxAgent.

  7. Перейдите на вкладку Возможности.

    Во время установки процесс настройки сканировал агент сборки на предмет возможностей инструментов. Вы видите, что npm указан как один из них. Помните, что исходная конфигурация сборки указала, что npm необходимо установить на агенте.

    Снимок экрана Azure DevOps с несколькими возможностями агента. Выделена возможность npm.

    При указании используемого пула агентов можно включить любые из этих записей в раздел demands. Их включение гарантирует, что Azure Pipelines выбирает агент сборки с программным обеспечением, необходимым для сборки вашего приложения. Он также позволяет создавать пулы агентов с различными конфигурациями программного обеспечения. Azure Pipelines выберет правильную конфигурацию в зависимости от ваших требований.