Установка Chrome на агенте Azure через конвейер

Вопрос или проблема

Я пытаюсь запустить свои модульные тесты с помощью Chrome в режиме headless и мне нужно установить Google Chrome на агенте Azure. Интересно, как я могу это сделать. Я нашел несколько решений в интернете:
например, это,
а также:

steps:
# Install Google Chrome on the virtual machine
- powershell: |
    $chromeInstaller = "chrome_installer.exe"
    Invoke-WebRequest -Uri "https://dl.google.com/chrome/install/latest/chrome_installer.exe" -OutFile $chromeInstaller
    Start-Process -FilePath $chromeInstaller -ArgumentList "/silent", "/install" -NoNewWindow -Wait
    Remove-Item -Path $chromeInstaller
  displayName: 'Install Google Chrome'

и через chocolatey, но я постоянно получаю ошибки.
Мой вопрос:
есть ли удобный способ установить браузер google chrome перед другими зависимостями моего проекта?
И это Windows машина 🙂

Одно из сообщений об ошибке, которое я получаю:

Starting: choco install googlechrome
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.201.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
Script contents: shell
choco install googlechrome --ignore-checksums
========================== Starting Command Output ===========================
"C:\Windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\build-agent1\_work\_temp\126aba93-a820-462a-afb4-9a641c09b1dc.cmd""
'choco' is not recognized as an internal or external command,
operable program or batch file.
##[error]Cmd.exe exited with code '1'.
Finishing: choco install googlechrome

Это при попытке с choco.
У меня также есть другая ошибка, когда я пытаюсь использовать скрипт PowerShell:

Starting: Install Google Chrome
==============================================================================
Task         : PowerShell
Description  : Run a PowerShell script on Linux, macOS, or Windows
Version      : 2.228.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
==============================================================================
Generating script.
========================== Starting Command Output ===========================
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\build-agent1\_work\_temp\53343eda-e728-4087-964a-bade5361f976.ps1'"
Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (503) Server Unavailable."
At D:\build-agent1\_work\_temp\53343eda-e728-4087-964a-bade5361f976.ps1:4 char:70
+ ... aller.exe"; (new-object    System.Net.WebClient).DownloadFile('http:/ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : WebException
 
##[error]PowerShell exited with code '1'.
Finishing: Install Google Chrome

Мой файл pipeline:

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
- main

pool:
  name: M3-build-pool

steps:
# Install Google Chrome on the virtual machine
- powershell: |
    $chromeInstaller = "chrome_installer.exe"
    Invoke-WebRequest -Uri "https://dl.google.com/chrome/install/latest/chrome_installer.exe" -OutFile $chromeInstaller
    Start-Process -FilePath $chromeInstaller -ArgumentList "/silent", "/install" -NoNewWindow -Wait
    Remove-Item -Path $chromeInstaller
  displayName: 'Install Google Chrome'

- task: NodeTool@1
  inputs:
    versionSpec: '22.x'
  displayName: 'Install Node.js 22.x'

- script: |
    npm install
  displayName: 'npm install'

- script: |
    npm run build:webcomponent
  displayName: 'npm build:webcomponent'

- script:
    npm run npm test:once
  displayName: 'npm test:once'

- task: CopyFiles@2
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: |
       main.js
       styles.css
    targetFolder: '$(Build.ArtifactStagingDirectory)'
  displayName: 'Copy project files'

- task: PublishPipelineArtifact@1
  inputs:
    artifactName: m3-webcomponent
    targetPath: '$(Build.ArtifactStagingDirectory)'
    publishLocation: 'pipeline'
  displayName: 'Publish npm artifact'


Ответ или решение

Установка Google Chrome на агенте Azure в рамках конвейера может быть необходима для выполнения тестов с использованием безголового режима браузера Chrome. Однако, учитывая ошибки, возникающие у вас при использовании PowerShell и Chocolatey, вам может потребоваться более надежное и простое решение. В данном ответе рассмотрены возможные пути решения проблемы, с акцентом на использование предустановленных возможностей и исправление ошибок, которые уже были замечены.

Теория: Особенности установки ПО на агенте Azure

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

Пример: Возможные ошибки и пути их обхода

  1. Проблема с Chocolatey: Ошибка 'choco' is not recognized as an internal or external command означает, что на вашем агенте не установлен Chocolatey, или что путь к нему не добавлен в системные переменные окружения. Это может произойти, если вы используете образ Windows, на котором не настроен пакетный менеджер. Для исправления этой ошибки, можно установить Chocolatey как отдельный шаг перед установкой Chrome.

  2. Ошибка при скачивании через PowerShell: Ошибка The remote server returned an error: (503) Server Unavailable. может быть вызвана временной недоступностью сервера или сетевыми ограничениями на вашем агенте. Рекомендуется повторить попытку позже или использовать другой способ загрузки, такой как использование альтернативных URL или проверка сетевых политик безопасности.

Применение: Настройка конвейера для установки Chrome

  1. Установка Chocolatey (если необходимо):

    Добавьте в свой YAML-файл шаг для установки Chocolatey:

    - powershell: |
       Set-ExecutionPolicy ByPass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 
       iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
     displayName: 'Install Chocolatey'
  2. Установка Google Chrome с помощью Chocolatey:

    После установки Chocolatey, добавьте шаг для установки Chrome:

    - powershell: |
       choco install googlechrome -y
     displayName: 'Install Google Chrome'
  3. Альтернативная установка через PowerShell:

    В случае использования PowerShell для установки Chrome, важно убедиться, что URL для скачивания действителен и агент имеет к нему доступ:

    - powershell: |
       $chromeInstaller = "chrome_installer.exe"
       try {
         Invoke-WebRequest -Uri "https://dl.google.com/chrome/install/latest/chrome_installer.exe" -OutFile $chromeInstaller
         Start-Process -FilePath $chromeInstaller -ArgumentList "/silent", "/install" -NoNewWindow -Wait
       } catch {
         Write-Error "Failed to download or install Google Chrome."
       } finally {
         if (Test-Path $chromeInstaller) { Remove-Item -Path $chromeInstaller }
       }
     displayName: 'Install Google Chrome'
  4. Проверка исходной конфигурации:

    Убедитесь, что образ виртуальной машины, который вы используете в pool секции, поддерживает установку необходимых компонентов. Обычно образы Windows Server включают в себя возможность установки таких приложений.

  5. Отладка и документация:

    Ведите логирование всех действий в PowerShell или Bash-скриптах, чтобы отслеживать, на каком этапе происходит сбой. Использование команд Write-Host или Write-Error также поможет в диагностике.

  6. Обновление документации:

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

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

Оцените материал
Добавить комментарий

Капча загружается...