Поделиться через


Использование прокси-сервера разработки с Azure Pipelines

Использование прокси-сервера разработки с Azure Pipelines — отличный способ тестирования приложений в управляемой среде. Следуя этим инструкциям, вы можете использовать прокси-сервер разработки с Azure Pipelines.

Заметка

В этой статье мы используем агент Ubuntu для Azure Pipelines.

Установка прокси-сервера разработки и его кэширование

Сначала установите прокси-сервер разработки на агенте, но сделайте это только в том случае, если он еще не установлен. Чтобы установить и кэшировать Dev Proxy, добавьте следующие действия в файл pipeline:

variables:
- name: DEV_PROXY_VERSION
  value: v0.29.2
- name: DEV_PROXY_CACHE_RESTORED
  value: 'false'

steps:
- task: Cache@2
  inputs:
    key: '"dev-proxy-$(DEV_PROXY_VERSION)"'
    path: ./devproxy
    cacheHitVar: DEV_PROXY_CACHE_RESTORED
  displayName: Cache Dev Proxy

- script: bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" $DEV_PROXY_VERSION
  displayName: 'Install Dev Proxy'
  condition: ne(variables.DEV_PROXY_CACHE_RESTORED, 'true')

Запуск прокси-сервера разработки

При запуске Dev Proxy в конвейере CI/CD необходимо запустить его из скрипта, чтобы вы могли закрыть его аккуратно. Когда скрипт готов, вызовите его в файле конвейера:

- script: bash ./run.sh
  displayName: 'Run Dev Proxy'

Загрузка журналов Dev Proxy в качестве артефактов

При запуске прокси-сервера разработки в конвейере CI/CD может потребоваться проанализировать журналы позже. Чтобы сохранить журналы прокси-сервера разработки, вы можете загрузить их как артефакты:

- task: PublishPipelineArtifact@1
  displayName: Upload Dev Proxy logs
  inputs:
    targetPath: $(LOG_FILE)
    artifact: $(LOG_FILE)

Загрузка отчетов Dev Proxy

Если вы используете Dev Proxy для анализа запросов, вы можете также загрузить отчеты в качестве артефактов:

- script: |
    mkdir -p $(Build.ArtifactStagingDirectory)/Reports
    for file in *Reporter*; do
      if [ -f "$file" ]; then
        cp "$file" $(Build.ArtifactStagingDirectory)/Reports
      fi
    done
  displayName: 'Copy reports to artifact directory'

- task: PublishPipelineArtifact@1
  displayName: Upload Dev Proxy reports
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)/Reports'
    artifact: 'Reports'

Пример файла конвейера

Ниже приведен пример файла конвейера, который устанавливает прокси-сервер разработки, запускает его и отправляет журналы и отчеты в виде артефактов:

trigger:
- main
- dev

pool:
  vmImage: ubuntu-latest

variables:
- name: LOG_FILE
  value: devproxy.log
- name: DEV_PROXY_VERSION
  value: v0.29.2
- name: DEV_PROXY_CACHE_RESTORED
  value: 'false'
- name: PLAYWRIGHT_CACHE_RESTORED
  value: 'false'

steps:

- task: UseNode@1
  inputs:
    version: '20.x'
  displayName: 'Install Node.js'

- script: npm ci
  displayName: 'Install dependencies'

#################################
# Cache + install of Playwright #
#################################
- script: |
    PLAYWRIGHT_VERSION=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//')
    echo "Playwright's Version: $PLAYWRIGHT_VERSION"
    echo "##vso[task.setvariable variable=PLAYWRIGHT_VERSION]$PLAYWRIGHT_VERSION"
  displayName: Store Playwright's Version

- task: Cache@2
  inputs:
    key: '"playwright-ubuntu-$(PLAYWRIGHT_VERSION)"'
    path: '$(HOME)/.cache/ms-playwright'
    cacheHitVar: PLAYWRIGHT_CACHE_RESTORED
  displayName: Cache Playwright Browsers for Playwright's Version

- script: npx playwright install --with-deps
  condition: ne(variables['PLAYWRIGHT_CACHE_RESTORED'], 'true')
  displayName: 'Install Playwright Browsers'

################################
# Cache + install of Dev Proxy #
################################
- task: Cache@2
  inputs:
    key: '"dev-proxy-$(DEV_PROXY_VERSION)"'
    path: ./devproxy
    cacheHitVar: DEV_PROXY_CACHE_RESTORED
  displayName: Cache Dev Proxy

- script: bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)" $DEV_PROXY_VERSION
  displayName: 'Install Dev Proxy'
  condition: ne(variables.DEV_PROXY_CACHE_RESTORED, 'true')

- script: bash ./run.sh
  displayName: 'Run Dev Proxy'

- task: PublishPipelineArtifact@1
  displayName: Upload Dev Proxy logs
  inputs:
    targetPath: $(LOG_FILE)
    artifact: $(LOG_FILE)

- script: |
    mkdir -p $(Build.ArtifactStagingDirectory)/Reports
    for file in *Reporter*; do
      if [ -f "$file" ]; then
        cp "$file" $(Build.ArtifactStagingDirectory)/Reports
      fi
    done
  displayName: 'Copy reports to artifact directory'

- task: PublishPipelineArtifact@1
  displayName: Upload Dev Proxy reports
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)/Reports'
    artifact: 'Reports'