Общедоступная доступность правил автоматизации команды и улучшенная проверка AB#

Мы рады сообщить, что улучшенная проверка AB# приложением Azure Boards в GitHub и правилах team Automation общедоступны! Мы улучшили проверку AB#, чтобы получать уведомления о недопустимой ссылке на рабочий элемент. В правилах team Automation теперь можно настроить каждый уровень невыполненной работы, чтобы автоматизировать открытие и закрытие или разрешение рабочих элементов на основе состояний дочернего элемента.

В этом обновлении также представлена поддержка пользовательских запросов CodeQL в сканировании кода! Это позволит создавать собственные запросы, предназначенные для выявления проблем, относящихся к базе кода.

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

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

Azure Boards

Azure Pipelines

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

Пользовательские запросы CodeQL теперь поддерживаются в GitHub Advanced Security для Azure DevOps

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

Дополнительные сведения об использовании пользовательских запросов для сканирования кода в GitHub Advanced Security для Azure DevOps см. в статье "Проверка кода" для GitHub Advanced Security для Azure DevOps.

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

Azure Boards

Интеграция GitHub — улучшенная проверка AB# общедоступна

Несколько спринтов назад мы объявили о предварительной версии для улучшения проверки AB# приложением Azure Boards в GitHub. Мы улучшили приложение, чтобы лучше уведомить пользователей о действительности ссылок рабочих элементов, помогая им выявлять и устранять все проблемы перед слиянием запроса на вытягивание.

После нескольких недель тестирования и обратной связи эта функция теперь доступна всем пользователям с помощью интеграции GitHub + Azure Boards.

Screenshots of improved validation.

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

Правила автоматизации группы обычно доступны

Мы рады сообщить о выпуске этой функции всем клиентам Azure DevOps Service.

Примечание.

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

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

  • При активации одного дочернего элемента активируйте родительский элемент.
  • При закрытии всех дочерних элементов закройте родительский элемент (или устраните его).

Чтобы включить эти параметры, щелкните конфигурацию уровня невыполненной работы для вашей команды. Затем перейдите на вкладку "Правила автоматизации>", чтобы увидеть два разных правила, которые можно применить к невыполненной работы. Каждый уровень невыполненной работы (требования, функции, эпические представления) можно настроить по-разному в зависимости от того, как ваша команда хочет работать.

Screenshots of team settings.

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

Gif to demo closing user story.

Дополнительные сведения об этой функции см. в документации и этой записи блога.

Эта функция была приоритетна на основе этого запроса предложения Сообщество разработчиков.

Azure Pipelines

Обновление устаревших задач до 31 января

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

Screenshot of task-specific deprecation warnings.

Ознакомьтесь с предыдущими объявлениями, связанными с устаревшими задачами:

Размещенные агенты Майкрософт используют PowerShell 7.4

Все размещенные агенты Майкрософт начнут использовать PowerShell 7.2 LTS в PowerShell 7.4 LTS с 28 января. Ознакомьтесь с новыми функциональностью PowerShell 7.4 и PowerShell 7.4.

Запишите критические изменения и обновите скрипты соответствующим образом:

Срок действия новых секретов подключения службы Azure истекает через три месяца

Служба Azure Подключение, в которых Azure DevOps создает секрет, будет иметь срок действия секрета в течение трех месяцев вместо двух лет.

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

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 
#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798"
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint
    
    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

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

Примечание.

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

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

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

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

Make a suggestion

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

Thanks,

Дэн Хеллем