Параметр отключения создания репозиториев TFVC

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

Кроме того, мы рады сообщить о том, что в Azure Pipelines новая конечная точка REST API доступна для запроса токенов OIDC! Это позволяет разработчикам задач создавать idTokens для проверки подлинности идентификатора Записи, повышая безопасность и удобство использования.

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

Дополнительные сведения см. в заметках о выпуске.

Расширенная безопасность GitHub для Azure DevOps

Azure Boards:

Azure Repos

Azure Pipelines

Azure Test Plans:

Расширенная безопасность GitHub для Azure DevOps

Документация по API обзора безопасности теперь доступна

Теперь доступна документация по API с помощью вкладки "Общие сведения о рисках расширенной безопасности". Используйте конечную точку /{organization}/_apis/reporting/summary/alerts для просмотра сводки критических сведений об оповещении во всех репозиториях с поддержкой расширенной безопасности. Убедитесь, что ADO PAT имеет vso.advsec разрешение, которое предоставляет возможность чтения оповещений, экземпляров результатов и экземпляров результатов анализа.

Azure Boards

Изменение для удаления области и путей итерации

Удаление области или пути итерации может быть нарушено. Он может переместить рабочие элементы в новый путь и может привести к тому, что команды теряют доступ к их доскам и невыполненной работе. Несмотря на предупреждения и запросы, пути иногда удаляются без полного понимания последствий. Чтобы устранить эту проблему, мы изменили поведение: пути к области и итерации теперь можно удалить только в том случае, если они больше не используются рабочими элементами.

Снимок экрана: область удаления.

Azure Repos

Новый параметр для отключения создания репозиториев TFVC

В последние годы новые функции не были добавлены в система управления версиями Team Foundation (TFVC), так как Git стал предпочтительной системой управления версиями в Azure Repos. Все последние улучшения безопасности, производительности и специальных возможностей были сделаны исключительно в репозиториях Git, что привело к непрерывному снижению использования TFVC. Хотя некоторые по-прежнему полагаются на TFVC, и мы не намерены удалить этот набор функций, мы планируем постепенно отменить TFVC для новых проектов и организаций, а также для проектов, которые в настоящее время не используют TFVC.

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

Gif для демонстрации отключения создания репозиториев TFVC.

Azure Pipelines

Доступ к Служебная шина Azure из конвейеров с помощью проверки подлинности идентификатора Microsoft Entra

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

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

задача PublishToAzureServiceBus@2

Новые PublishToAzureServiceBus@2 задачи можно настроить с помощью подключения службы Azure. Создайте подключение службы Azure и заполните serviceBusQueueName serviceBusNamespace свойства новой задачи:

- task: PublishToAzureServiceBus@2
  inputs:
    azureSubscription: my-azure-service-connection
    serviceBusQueueName: my-service-bus-queue
    serviceBusNamespace: my-service-bus-namespace
    useDataContractSerializer: false
    messageBody: |
      {
        "foo": "bar"
      }
Задачи сервера

Пользовательские задачи сервера (без агента), использующие ServiceBus выполнение, могут указывать подключение службы Azure как EndpointId и опущено ConnectionString. См . статью "Разработка задач сервера".

Конвейеры и задачи заполняют переменные для настройки проверки подлинности федерации удостоверений рабочей нагрузки

Конечная точка REST API для запроса маркеров OIDC теперь доступна в переменной конвейера System.OidcRequestUri . Разработчики задач могут использовать эту переменную для создания idToken для проверки подлинности с идентификатором Entra.

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

Снимок экрана: совместная работа oidc.

Задачи, которые принимают входные connectedService:AzureRM данные в task.json , можно обновить для поддержки федерации удостоверений рабочей нагрузки, выполнив следующие действия:

  • Используйте REST API Oidctoken для запроса idToken (стрелка 1 на схеме выше).
  • Exchange idToken для маркера доступа с помощью федеративного потока учетных данных API OAuth, указав idToken as client_assertion (стрелки 2 и 4 на схеме выше);
    или:
  • Для задач, которые выполняют роль оболочки вокруг средства, выполняющего проверку подлинности, используйте метод проверки подлинности средств для указания федеративного токена.

Задачи узла могут использовать пакет npm azure-pipelines-tasks-artifacts-common npm для получения idToken. Дополнительные сведения о реализации см. в примере кода.

Запрос нового idToken

Переменная System.OidcRequestUri конвейера и AZURESUBSCRIPTION_SERVICE_CONNECTION_ID переменная среды, предоставляемые в AzureCLI@2 задачах, AzurePowerShell@5 позволяют авторам конвейера проходить проверку подлинности из собственного скрипта:

PowerShell Az
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'my-azure-subscription'
    scriptType: inlineScript
    inline: |        
      # Request fresh idToken
      Invoke-RestMethod -Headers @{
                        Authorization  = "Bearer $(System.AccessToken)"
                        'Content-Type' = 'application/json'
                      } `
                      -Uri "${env:SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${env:AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}" `
                      -Method Post `
                      | Select-Object -ExpandProperty oidcToken
                      | Set-Variable idToken

    # Fetch current context
    $azContext = Get-AzContext

    # Start new Az session
    Connect-AzAccount -ApplicationId $azContext.Account.Id `
                      -TenantId $azContext.Tenant.Id `
                      -SubscriptionId $azContext.Subscription.Id `
                      -FederatedToken $idToken
Azure CLI
- task: AzureCLI@2
  inputs:
    addSpnToEnvironment: true
    azureSubscription: 'my-azure-subscription'
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      # Request fresh idToken
      OIDC_REQUEST_URL="${SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}"
      ARM_OIDC_TOKEN=$(curl -s -H "Content-Length: 0" -H "Content-Type: application/json" -H "Authorization: Bearer $(System.AccessToken)" -X POST $OIDC_REQUEST_URL | jq -r '.oidcToken')

      # Save subscription context
      ARM_SUBSCRIPTION_ID=$(az account show --query id -o tsv)

      # New az-cli session
      az login --service-principal -u $servicePrincipalId --tenant $tenantId --allow-no-subscriptions --federated-token $ARM_OIDC_TOKEN
      az account set --subscription $ARM_SUBSCRIPTION_ID

Повторные попытки для задач сервера

Задачи сервера, которые вызывают внешние системы, например AzureFunction или InvokeRESTAPI, иногда могут завершать сбой из-за временных ошибок, таких как исчерпание вычислительных ресурсов. Ранее такие сбои могут привести ко всему заданию и потенциально конвейеру.

Чтобы повысить устойчивость к временным ошибкам, мы ввели поддержку retryCountOnTaskFailure свойства в задачах сервера. Предположим, что в конвейере есть следующий код YAML:

- stage: deploy
  jobs:
  - job:
    pool: server
    steps:
    - task: AzureFunction@1
      retryCountOnTaskFailure: 2
      inputs:
        function: 'https://api.fabrikamfiber.com'
        key: $(functionKey)
        method: 'POST'
        waitForCompletion: 'false'

Если https://api.fabrikamfiber.com возникает временная ошибка, Azure Pipelines повторит запрос до трех раз (начальная попытка плюс две повторные попытки, указанные в параметре retryCountOnTaskFailure). Каждая повторная попытка включает увеличение периода ожидания. Максимально допустимое число повторных попыток — 10.

Он retryCountOnTaskFailure недоступен для ManualValidation задачи и других задач, которые не включают вызовы внешней системы.

Задачи, использующие версию запуска узла конца жизни для выполнения предупреждений

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

Версия <version> задачи TaskName зависит от версии узла (10), которая является конечной. Обратитесь к владельцу расширения для обновленной версии задачи. Обслуживающие задачи должны просмотреть рекомендации по обновлению узла: https://aka.ms/node-runner-guidance

Чтобы отключить эти предупреждения, можно задать среду или переменную конвейера на уровне конвейера (задания) или задачи. Например:

variables:
  AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false

DockerCompose@0 использует Docker Compose версии 2 в режиме совместимости версии 1

Docker Compose версии 1 достигнет конца жизни и будет удален из размещенных агентов 24 июля 2024 года. Мы обновили задачу DockerCompose@0 , чтобы использовать Docker Compose версии 2 в режиме совместимости версии 1, если Docker Compose версии 1 недоступна на агенте.

Однако режим совместимости не решает все проблемы совместимости. См. статью "Миграция на Создание версии 2". Некоторым пользователям потребуется больше времени для обновления проектов Docker Compose для совместимости Docker Compose версии 2. В этих случаях следуйте этим инструкциям, чтобы использовать задачу DockerComposeV0 с docker-compose версии 1.

ПРИМЕЧАНИЕ. Это руководство основано на автономной документации по установке Compose

Использование docker-compose версии 1 в Windows

Добавьте шаг PowerShell в конвейер, чтобы скачать docker-Compose версии 1.29.2 и использовать его с задачей DockerComposeV0 в Windows:

variables:
    dockerComposePath: C:\docker-compose

steps:
- powershell: |
    mkdir -f $(dockerComposePath)
    # GitHub now requires TLS1.2. In PowerShell, run the following
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-windows-x86_64.exe" -Destination $(dockerComposePath)\docker-compose.exe
  displayName: Download docker-compose
- task: DockerCompose@0
  inputs:
    containerregistrytype: 'Azure Container Registry'
    dockerComposeFile: '**/docker-compose.yml'
    action: 'Run a Docker Compose command'
    dockerComposeCommand: 'run'
    dockerComposePath: $(dockerComposePath)\docker-compose.exe

Использование docker-compose версии 1 в Linux

Добавьте шаг bash в конвейер, чтобы скачать Docker-Compose версии 1.29.2 и использовать его с задачей DockerComposeV0 в Linux:

variables:
    dockerComposePath: /tmp/docker-compose

steps:
- bash: |
    sudo mkdir $(dockerComposePath)
    sudo curl -SL https://github.com/docker/compose/releases/download/1.29.2/docker-compose-linux-x86_64 -o $(dockerComposePath)/docker-compose
    sudo chmod 755 $(dockerComposePath)/docker-compose
  displayName: Download docker-compose
- task: DockerCompose@0
  inputs:
    containerregistrytype: 'Azure Container Registry'
    dockerComposeFile: $(Build.SourcesDirectory)/DockerComposeV0/docker-compose.yml
    action: 'Run a Docker Compose command'
    dockerComposeCommand: 'run'
    dockerComposePath: $(dockerComposePath)/docker-compose

Планы тестирования Azure

Расширение тестирования и обратной связи в манифесте версии 3

Мы рады сообщить о новом обновлении расширения Azure DevOps Test and Feedback! Это обновление переместит нашу реализацию с манифеста версии 2 на версию 3, выравнивая расписание нерекомендуации Google для манифеста версии 2.

Хотя основные функции расширения остаются неизменными, это обновление повышает безопасность и производительность. Обновленное расширение будет постепенно развертываться в браузерах Chrome и Edge в ближайшие недели. Мы будем отслеживать производительность и обратную связь, чтобы обеспечить плавный переход перед расширением развертывания на основе результатов.

Дополнительные сведения см. в нашей последней записи блога об этом обновлении. Расширение тестирования и обратной связи в манифесте версии 3

Следующие шаги

Примечание.

Эти функции будут развернуты в течение следующих двух-трех недель.

Перейдите к Azure DevOps и посмотрите.

Отправка отзыва

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

Внести предложение

Вы также можете получить советы и ваши вопросы, ответы сообщества на Stack Overflow.

Thanks,

Сильвиу Андреика