Dela via


Allmän tillgänglighet för teamautomatiseringsregler och förbättrad AB#-validering

Vi är glada över att kunna meddela att förbättrad AB#-validering av Azure Boards-appen i GitHub och Team Automation-reglerna är allmänt tillgängliga! Vi har förbättrat AB#-valideringen så att du kan få ett meddelande när en länk till ett arbetsobjekt inte är giltig. I Team Automation-regler kan du nu konfigurera varje kvarvarande nivå för att automatisera öppning och stängning/matchning av arbetsobjekt baserat på tillståndet för det underordnade objektet.

Med den här uppdateringen introducerar vi även stöd för anpassade CodeQL-frågor i kodgenomsökning! På så sätt kan du skapa egna frågor som är skräddarsydda för att identifiera problem som är specifika för din kodbas.

Mer information finns i viktig information.

GitHub Advanced Security för Azure DevOps

Azure-tavlor

Azure-pipelines

GitHub Advanced Security för Azure DevOps

Anpassade CodeQL-frågor stöds nu i GitHub Advanced Security för Azure DevOps

Vi är glada över att kunna presentera införandet av stöd för anpassade CodeQL-frågor i kodgenomsökning! På så sätt kan du skapa egna frågor som är skräddarsydda för att identifiera problem som är specifika för din kodbas. Nu kan du skapa och publicera paket som innehåller anpassade frågor, köra dessa frågor i dina pipelines och anpassa identifieringen av säkerhetsrisker som är relevanta för din organisation.

Mer information om hur du använder anpassade frågor för kodgenomsökning i GitHub Advanced Security för Azure DevOps finns i Kodgenomsökningsaviseringar för GitHub Advanced Security för Azure DevOps.

Vi värdesätter dina indata. Om du har frågor eller feedback rekommenderar vi att du engagerar dig i vår community på Utvecklarcommunityn.

Azure-tavlor

GitHub-integrering – Förbättrad AB#-validering är allmänt tillgänglig

För några sprintar sedan tillkännagav vi förhandsversionen för förbättrad AB#-validering av Azure Boards-appen i GitHub. Vi har förbättrat appen för att bättre meddela användarna om giltigheten för arbetsobjektlänkar, vilket hjälper dem att upptäcka och åtgärda eventuella problem innan de sammanfogar en pull-begäran.

Efter flera veckors testning och feedback är den här funktionen nu tillgänglig för alla användare som använder GitHub + Azure Boards-integreringen.

Skärmbilder av förbättrad validering.

Detta är den första av flera funktioner som vi gör för att förbättra den aktuella integreringen. Se till att kolla in de andra Azure Boards + GitHub-integreringsfunktionerna som vi har planerat i den offentliga översikten.

Viktigt!

Från och med 2024-08-06 validerar Inte längre Azure Boards-appen i GitHub AB#-länkarna. Du kan fortfarande använda syntaxen AB# för att länka arbetsobjekt i dina GitHub-pull-begäranden, incheckningar och problem som du kunde före den här ändringen.

Team Automation-regler är allmänt tillgängliga

Vi är glada att kunna meddela lanseringen av den här funktionen till alla kunder i Azure DevOps Service.

Kommentar

Den här funktionen kommer att lanseras under de kommande två till tre veckorna. Den kanske inte är tillgänglig för din organisation förrän i början av februari 2024.

Du kan nu konfigurera varje kvarvarande nivå för att automatisera öppning och stängning (eller matchning) av arbetsobjekt baserat på status för underordnade objekt. Det finns två huvudsakliga scenarier som vi försöker lösa.

  • När ett enskilt underordnat objekt aktiveras aktiverar du sedan det överordnade objektet.
  • När alla underordnade objekt stängs stänger du sedan det överordnade objektet (eller löser det).

Om du vill aktivera de här inställningarna klickar du på konfigurationen för kvarvarande uppgifter för ditt team. Gå sedan till fliken Automation-regler > för att se de två olika regler som du kan tillämpa på dina kvarvarande uppgifter. Varje kvarvarande nivå (krav, funktioner, epos) kan konfigureras på olika sätt beroende på hur ditt team vill arbeta.

Skärmbilder av teaminställningar.

När en underordnad aktivitet till exempel har angetts till Aktiv gör du den överordnade användarberättelsen aktiv. När alla uppgifter har slutförts ställer du sedan in användarberättelsen på Stängd.

Gif till demo som stänger användarberättelsen.

Du kan läsa mer om den här funktionen genom att läsa dokumentationen och det här blogginlägget.

Den här funktionen har prioriterats baserat på det här förslagsärendet för utvecklarcommunityn.

Azure-pipelines

Uppdatera inaktuella aktiviteter före den 31 januari

Vi drar tillbaka inaktuella uppgifter den 31 januari 2024. För att hjälpa dig att identifiera de pipelines som använder dessa uppgifter har vi inkluderat ett varningsmeddelande med ett föreslaget alternativ. Vi rekommenderar att du uppdaterar dina pipelines för att använda en nyare uppgiftsversion eller ett alternativ före den 31 januari 2024.

Skärmbild av aktivitetsspecifika utfasningsvarningar.

Se tidigare meddelanden som rör inaktuella uppgifter:

Microsofts värdbaserade agenter använder PowerShell 7.4

Alla Microsoft-värdbaserade agenter börjar använda PowerShell 7.2 LTS till PowerShell 7.4 LTS från och med den 28 januari. Se Nyheter i PowerShell 7.4 och PowerShell 7.4 Allmän tillgänglighet.

Notera icke-bakåtkompatibla ändringar och uppdatera skripten i enlighet med detta:

Nya Azure-tjänstanslutningshemligheter upphör att gälla om tre månader

Azure Service-anslutningar där Azure DevOps skapar hemligheten kommer att ha en hemlig utgång på tre månader i stället för två år.

Om du vill eliminera behovet av att rotera hemligheter konverterar du tjänstanslutningen till att använda arbetsbelastningsidentitetsfederation i stället. Du kan använda exempelskriptet nedan för att snabbt konvertera flera Azure-tjänstanslutningar till arbetsbelastningsidentitetsfederation:

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

Nästa steg

Kommentar

Dessa funktioner kommer att distribueras under de kommande två till tre veckorna.

Gå över till Azure DevOps och ta en titt.

Så här ger du feedback

Vi vill gärna höra vad du tycker om de här funktionerna. Använd hjälpmenyn för att rapportera ett problem eller ge ett förslag.

Ge ett förslag

Du kan också få råd och dina frågor som besvaras av communityn på Stack Overflow.

Tack,

Dan Hellem