Упражнение. Создание агента сборки, работающего в Azure

Завершено

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

В этом уроке вы выполните следующие задачи:

  • создать в Azure виртуальную машину Ubuntu, которая будет служить агентом сборки;
  • Создайте пул агентов в 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 .

    A screenshot of the Azure portal showing the location of the Cloud Shell menu item.

    Примечание.

    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 — веб-агент .

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

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

    A screenshot of the project settings in Azure DevOps showing the location of the Agent pools menu item.

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

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

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

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

  6. Нажмите кнопку создания. В списке появится новый пул агентов.

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

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

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

Важно!

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

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

    A screenshot of Azure DevOps showing the location of the Personal access tokens menu item.

  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 выполняет команду с правами администратора или корневого каталога.

  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 Description По умолч.
    AZP_AGENT_VERSION Версия программного обеспечения агента, которую нужно установить Версия, которая использовалась последней для тестирования этого модуля
    AZP_URL URL-адрес организации Azure DevOps (Нет)
    AZP_TOKEN Ваш личный маркер доступа (Нет)
    AZP_AGENT_NAME Имя агента, как оно отображается в Azure DevOps Имя узла системы
    AZP_POOL Имя пула агентов По умолчанию
    AZP_WORK Рабочая папка для выполнения задач сборки агентом _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 маркер доступа (длинное значение маркера, скопированное ранее в этом уроке).

    Замените <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 — веб-агент .

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

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

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

  5. Перейдите на вкладку Агенты.

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

    A screenshot of Azure DevOps showing the status of the private agent. The agent shows as online, idle, and enabled.

    Совет

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

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

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

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

    A screenshot of Azure DevOps showing a few of the agent's capabilities. The npm capability is highlighted.

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