Udostępnij za pośrednictwem


Ogólna dostępność reguł automatyzacji zespołu i ulepszona weryfikacja ab#

Z przyjemnością ogłaszamy, że ulepszona weryfikacja ab# przez aplikację usługi Azure Boards w usłudze GitHub i regułach usługi Team Automation jest ogólnie dostępna! Ulepszyliśmy walidację ab#, dzięki czemu można otrzymywać powiadomienia, gdy link do elementu roboczego jest nieprawidłowy. W regułach usługi Team Automation można teraz skonfigurować każdy poziom listy prac, aby zautomatyzować otwieranie i zamykanie/rozwiązywanie elementów roboczych na podstawie stanów elementu podrzędnego.

Dzięki tej aktualizacji wprowadzamy również obsługę niestandardowych zapytań CodeQL w skanowaniu kodu! Umożliwi to tworzenie własnych zapytań dostosowanych do identyfikowania problemów specyficznych dla bazy kodu.

Zapoznaj się z informacjami o wersji, aby uzyskać szczegółowe informacje.

Usługa GitHub Advanced Security dla usługi Azure DevOps

Azure Boards

Azure Pipelines

Usługa GitHub Advanced Security dla usługi Azure DevOps

Niestandardowe zapytania CodeQL są teraz obsługiwane w usłudze GitHub Advanced Security dla usługi Azure DevOps

Z radością ogłaszamy wprowadzenie obsługi niestandardowych zapytań CodeQL w skanowaniu kodu! Dzięki temu można tworzyć własne zapytania dostosowane do identyfikowania problemów specyficznych dla bazy kodu. Teraz możesz tworzyć i publikować pakiety zawierające zapytania niestandardowe, wykonywać te zapytania w potokach i dostosowywać wykrywanie luk w zabezpieczeniach, które są istotne dla organizacji.

Aby uzyskać więcej informacji na temat używania niestandardowych zapytań do skanowania kodu w usłudze GitHub Advanced Security dla usługi Azure DevOps, zobacz Artykuł Code scanning alerts for GitHub Advanced Security for Azure DevOps (Skanowanie kodu dla usługi GitHub Advanced Security dla usługi Azure DevOps).

Cenimy twoje dane wejściowe. Jeśli masz jakiekolwiek pytania lub opinie, zachęcamy do zaangażowania się z naszą społecznością w społeczności deweloperów.

Azure Boards

Integracja z usługą GitHub — ulepszona weryfikacja ab# jest ogólnie dostępna

Kilka przebiegów temu ogłosiliśmy wersję zapoznawcza ulepszonej weryfikacji ab# przez aplikację usługi Azure Boards w usłudze GitHub. Ulepszyliśmy aplikację, aby lepiej powiadamiać użytkowników o ważności linków elementów roboczych, pomagając im wykrywać i rozwiązywać wszelkie problemy przed scaleniem żądania ściągnięcia.

Po kilku tygodniach testowania i przekazywania opinii ta funkcja jest teraz dostępna dla wszystkich użytkowników korzystających z integracji z usługą GitHub i usługą Azure Boards.

Screenshots of improved validation.

Jest to pierwsza z kilku funkcji, które wprowadzamy w celu ulepszenia bieżącej integracji. Pamiętaj, aby zapoznać się z innymi funkcjami integracji usługi Azure Boards i GitHub, które zaplanowaliśmy w planie publicznym.

Reguły usługi Team Automation są ogólnie dostępne

Z przyjemnością ogłaszamy wydanie tej funkcji wszystkim klientom usługi Azure DevOps Service.

Uwaga

Ta funkcja będzie wdrażana w ciągu najbliższych dwóch do trzech tygodni. Być może nie będzie dostępna dla Twojej organizacji dopiero na początku lutego 2024 r.

Teraz można skonfigurować każdy poziom listy prac, aby zautomatyzować otwieranie i zamykanie (lub rozwiązywanie) elementów roboczych na podstawie stanu elementów podrzędnych. Istnieją dwa główne scenariusze, które próbujemy rozwiązać.

  • Po aktywowaniu pojedynczego elementu podrzędnego aktywuj element nadrzędny.
  • Gdy wszystkie elementy podrzędne są zamknięte, zamknij element nadrzędny (lub rozwiąż go).

Aby włączyć te ustawienia, kliknij konfigurację na poziomie listy prac dla zespołu. Następnie przejdź do karty Reguły automatyzacji>, aby wyświetlić dwie różne reguły, które można zastosować do listy prac. Każdy poziom listy prac (wymagania, funkcje, epiki) można skonfigurować inaczej w zależności od tego, jak zespół chce pracować.

Screenshots of team settings.

Na przykład gdy dowolne podrzędne zadanie jest ustawione na Aktywne, ustaw jako aktywny nadrzędny scenariusz użytkownika. Następnie po zakończeniu wszystkich zadań ustaw opcję Historia użytkownika na Zamknięto.

Gif to demo closing user story.

Aby dowiedzieć się więcej na temat tej funkcji, zapoznaj się z dokumentacją i tym wpisem w blogu.

Ta funkcja została o priorytyzowana na podstawie tego biletu sugestii społeczności deweloperów.

Azure Pipelines

Aktualizowanie przestarzałych zadań przed 31 stycznia

Wycofaliśmy przestarzałe zadania 31 stycznia 2024 r. Aby ułatwić zidentyfikowanie potoków korzystających z tych zadań, dołączyliśmy komunikat ostrzegawczy z sugerowaną alternatywą. Zachęcamy do zaktualizowania potoków, aby korzystały z nowszej wersji zadania lub alternatywy przed 31 stycznia 2024 r.

Screenshot of task-specific deprecation warnings.

Zobacz wcześniejsze ogłoszenia związane z przestarzałymi zadaniami:

Agenci hostowani przez firmę Microsoft używają programu PowerShell 7.4

Wszyscy agenci hostowani przez firmę Microsoft zaczną używać programu PowerShell 7.2 LTS do programu PowerShell 7.4 LTS od 28 stycznia. Zobacz Co nowego w programie PowerShell 7.4 i programie PowerShell 7.4 — ogólna dostępność.

Zanotuj zmiany powodujące niezgodność i odpowiednio zaktualizuj skrypty:

Nowe wpisy tajne połączenia usługi platformy Azure wygasają za trzy miesiące

Azure Service Połączenie ions, w których usługa Azure DevOps tworzy wpis tajny, będzie miała tajne wygaśnięcie trzech miesięcy zamiast dwóch lat.

Aby wyeliminować konieczność rotacji wpisów tajnych, przekonwertuj połączenie usługi, aby zamiast tego użyć federacji tożsamości obciążenia. Poniższy przykładowy skrypt umożliwia szybkie konwertowanie wielu połączeń usługi platformy Azure z federacją tożsamości obciążenia:

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

Następne kroki

Uwaga

Te funkcje będą wdrażane w ciągu najbliższych dwóch do trzech tygodni.

Przejdź do usługi Azure DevOps i przyjrzyj się.

Jak przekazać opinię

Chcielibyśmy usłyszeć, co myślisz o tych funkcjach. Użyj menu Pomocy, aby zgłosić problem lub podać sugestię.

Make a suggestion

Możesz również uzyskać porady i odpowiedzi na pytania społeczności w witrynie Stack Overflow.

Dzięki,

Dan Hellem