Obecná dostupnost pravidel automatizace týmu a vylepšené ověřování AB#

S radostí oznamujeme, že vylepšené ověřování AB# aplikací Azure Boards v GitHubu a pravidlech pro týmovou automatizaci jsou obecně dostupné. Vylepšili jsme ověřování AB#, abyste byli upozorněni, když odkaz na pracovní položku není platný. V pravidlech služby Team Automation teď můžete nakonfigurovat každou úroveň backlogu, která automatizuje otevírání a zavírání a překlad pracovních položek na základě stavů podřízené položky.

V této aktualizaci také zavádíme podporu vlastních dotazů CodeQL ve skenování kódu. To vám umožní vytvořit vlastní dotazy přizpůsobené k identifikaci problémů specifických pro váš základ kódu.

Podrobnosti najdete v poznámkách k verzi.

Pokročilé zabezpečení GitHubu pro Azure DevOps

Azure Boards

Azure Pipelines

Pokročilé zabezpečení GitHubu pro Azure DevOps

Vlastní dotazy CodeQL se teď podporují v GitHub Advanced Security pro Azure DevOps.

S radostí oznamujeme zavedení podpory vlastních dotazů CodeQL ve skenování kódu. Díky tomu můžete vytvářet vlastní dotazy přizpůsobené k identifikaci problémů specifických pro váš základ kódu. Teď můžete vytvářet a publikovat balíčky obsahující vlastní dotazy, spouštět tyto dotazy v kanálech a přizpůsobovat detekci ohrožení zabezpečení, která jsou relevantní pro vaši organizaci.

Další informace o využití vlastních dotazů pro kontrolu kódu v GitHub Advanced Security pro Azure DevOps najdete v tématu Code scan alerts for GitHub Advanced Security for Azure DevOps.

Vážíme si vašeho vstupu. Pokud máte nějaké dotazy nebo zpětnou vazbu, doporučujeme, abyste se zapojili do komunity vývojářů.

Azure Boards

Integrace GitHubu – Obecně je k dispozici vylepšené ověřování AB#.

Před několika sprinty jsme oznámili verzi Preview pro vylepšené ověřování AB# aplikací Azure Boards na GitHubu. Vylepšili jsme aplikaci, abychom uživatelům lépe upozornili na platnost odkazů na pracovní položky a pomohli jim odhalit a opravit případné problémy před sloučením žádosti o přijetí změn.

Po několika týdnech testování a zpětné vazby je teď tato funkce dostupná všem uživatelům s integrací GitHubu a Azure Boards.

Screenshots of improved validation.

Toto je první z několika funkcí, které vylepšujeme aktuální integraci. Nezapomeňte se podívat na další funkce integrace Azure Boards a GitHubu, které jsme naplánovali ve veřejném plánu.

Pravidla týmové automatizace jsou obecně dostupná

S radostí oznamujeme vydání této funkce všem zákazníkům služby Azure DevOps Service.

Poznámka:

Tato funkce se bude zavádět během následujících dvou až tří týdnů. Tato možnost nemusí být pro vaši organizaci k dispozici do začátku února 2024.

Teď můžete nakonfigurovat každou úroveň backlogu pro automatizaci otevírání a zavírání (nebo překladu) pracovních položek na základě stavu podřízených položek. Snažíme se vyřešit dva hlavní scénáře.

  • Když je aktivována jedna podřízená položka, aktivujte nadřazenou položku.
  • Po zavření všech podřízených položek zavřete nadřazenou položku (nebo ji přeložte).

Pokud chcete tato nastavení povolit, klikněte na konfiguraci na úrovni backlogu pro váš tým. Pak přejděte na kartu Pravidla automatizace > a zobrazte dvě různá pravidla, která můžete použít u backlogu. Jednotlivé úrovně backlogu (požadavky, funkce, náměty) se dají nakonfigurovat jinak v závislosti na tom, jak váš tým chce pracovat.

Screenshots of team settings.

Pokud je například jakákoli podřízená úloha nastavena na aktivní, nastaví nadřazený uživatelský scénář jako aktivní. Po dokončení všech úkolů nastavte uživatelský scénář na Uzavřeno.

Gif to demo closing user story.

Další informace o této funkci najdete v dokumentaci a tomto blogovém příspěvku.

Tato funkce byla stanovena prioritu na základě tohoto lístku návrhu komunity vývojářů.

Azure Pipelines

Aktualizace zastaralých úkolů před 31. lednem

31. ledna 2024 vyřazujeme vyřazené úkoly. Abychom vám pomohli identifikovat kanály, které tyto úlohy používají, zahrnuli jsme upozornění s navrženou alternativou. Doporučujeme aktualizovat kanály tak, aby používaly novější verzi úlohy nebo alternativu před 31. lednem 2024.

Screenshot of task-specific deprecation warnings.

Podívejte se na dřívější oznámení týkající se zastaralých úloh:

Agenti hostovaní Microsoftem používají PowerShell 7.4.

Všichni agenti hostovaní Microsoftem začnou od 28. ledna používat PowerShell 7.2 LTS k PowerShellu 7.4 LTS. Podívejte se na novinky v PowerShellu 7.4 a obecné dostupnosti PowerShellu 7.4.

Poznamenejte si zásadní změny a odpovídajícím způsobem aktualizujte skripty:

  • Zásadní změny mezi PowerShellem 7.3 a 7.4 LTS
  • Zásadní změny mezi PowerShellem 7.2 LTS a 7.3
  • Aktualizace chování analýzy argumentu řízeného pomocí $PSNativeCommandArgumentPassing. Následující ukázkový skript vynucuje stejné chování v systémech Linux, macOS a Windows explicitním nastavením$PSNativeCommandArgumentPassing.

Platnost nových tajných kódů připojení ke službě Azure vyprší za tři měsíce

Azure Service Připojení iony, kde Azure DevOps vytvoří tajný klíč, bude mít místo dvou let vypršení platnosti tajného kódu tři měsíce.

Pokud chcete eliminovat potřebu obměňovat tajné kódy, převeďte připojení služby tak, aby místo toho používalo federaci identit úloh. Pomocí následujícího ukázkového skriptu můžete rychle převést několik připojení služeb Azure na federaci identit úloh:

#!/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)'"
}

Další kroky

Poznámka:

Tyto funkce se budou zavádět během následujících dvou až tří týdnů.

Přejděte na Azure DevOps a podívejte se na ně.

Jak poskytnout zpětnou vazbu

Rádi bychom slyšeli, co si o těchto funkcích myslíte. Pomocí nabídky nápovědy můžete nahlásit problém nebo poskytnout návrh.

Make a suggestion

Můžete také získat rady a své otázky zodpovězené komunitou ve službě Stack Overflow.

Díky,

Dan Hellem