チーム自動化ルールの一般提供と AB# 検証の改善

GitHub の Azure Boards アプリによる AB# 検証と Team Automation ルールの改善が一般公開されたことをお知らせします。 作業項目へのリンクが無効な場合に通知を受け取ることができるように、AB# 検証が改善されました。 Team Automation ルールでは、子項目の状態に基づいて作業項目の開始と終了/解決を自動化するように各バックログ レベルを構成できるようになりました。

この更新プログラムでは、コード スキャンでのカスタム CodeQL クエリのサポートも導入されています。 これにより、コードベースに固有の問題を特定するために調整された独自のクエリを作成できます。

詳細については、リリース ノートを参照してください。

Azure DevOps 用の GitHub Advanced Security

Azure Boards

Azure Pipelines

Azure DevOps 用の GitHub Advanced Security

Azure DevOps 用の GitHub Advanced Security でカスタム CodeQL クエリがサポートされるようになりました

コード スキャンでのカスタム CodeQL クエリのサポートが導入されたことをお知らせします。 これにより、コードベースに固有の問題を特定するために調整された独自のクエリを作成できます。 これで、カスタム クエリを含むパックを作成して発行し、パイプラインでこれらのクエリを実行し、組織に関連する脆弱性の検出をカスタマイズできるようになりました。

Azure DevOps 用の GitHub Advanced Security でのコード スキャンにカスタム クエリを使用する方法の詳細については、Azure DevOps 用の GitHub Advanced Security のコード スキャン アラートを参照してください

私たちはあなたの入力を大切にしています。 ご質問やフィードバックがある場合は、Developer Communityコミュニティに参加することをお勧めします。

Azure Boards

GitHub 統合 - AB# 検証の強化が一般公開されました

少し前に、GitHub の Azure Boards アプリによる AB# 検証を改善するためのプレビューを発表しました。 作業項目のリンクの有効性についてユーザーに通知し、プル要求をマージする前に問題を特定して修正できるように、アプリを強化しました。

数週間のテストとフィードバックの後、GitHub と Azure Boards の統合を使用するすべてのユーザーがこの機能を利用できるようになりました。

Screenshots of improved validation.

これは、現在の統合を改善するために作成しているいくつかの機能の最初です。 パブリック ロードマップで計画した他の Azure Boards + GitHub 統合機能を必ずチェックしてください。

Team Automation ルールの一般提供

Azure DevOps Service のすべてのお客様に、この機能のリリースをお知らせします。

Note

この機能は、今後 2 ~ 3 週間にわたってロールアウトされます。 2024 年 2 月上旬まで、組織で使用できない場合があります。

これで、各バックログ レベルを構成して、子項目の状態に基づいて作業項目の開始と終了 (または解決) を自動化できるようになりました。 解決しようとしているメインシナリオは 2 つあります。

  • 1 つの子項目がアクティブ化されたら、親をアクティブにします。
  • すべての子項目が閉じられたら、親を閉じます (または解決します)。

これらの設定を有効にするには、チームのバックログ レベルの構成をクリックします。 次に、[Automation > Rules] タブに移動して、バックログに適用できる 2 つの異なるルールを確認します。 各バックログ レベル (要件、機能、エピック) は、チームの作業方法に応じて異なる方法で構成できます。

Screenshots of team settings.

たとえば、子タスクがアクティブに設定されている場合は、親ユーザー ストーリーをアクティブにします。 次に、すべてのタスクが完了したら、[ユーザー ストーリー] を [終了] に設定します。

Gif to demo closing user story.

この機能の詳細については、ドキュメントこのブログ記事を参照してください。

この機能は、この開発者コミュニティの提案チケット基づいて優先されました。

Azure Pipelines

1 月 31 日より前に非推奨のタスクを更新する

非推奨のタスクは、2024 年 1 月 31 日に廃止されます。 これらのタスクを使用しているパイプラインを特定するために、推奨される代替手段を含む警告メッセージが含まれています。 2024 年 1 月 31 日より前に、新しいタスク バージョンまたは代替手段を使用するようにパイプラインを更新することをお勧めします。

Screenshot of task-specific deprecation warnings.

非推奨のタスクに関連する以前のお知らせを参照してください。

Microsoft ホステッド エージェントで PowerShell 7.4 を使用する

Microsoft がホストするすべての エージェント は、1 月 28 日から PowerShell 7.2 LTS から PowerShell 7.4 LTS への使用を開始します。 PowerShell 7.4 と PowerShell 7.4 の一般提供の新機能を参照してください

重大な変更をメモし、それに応じてスクリプトを更新します。

新しい Azure サービス接続シークレットは 3 か月で期限切れになります

Azure DevOps によってシークレットが作成 される Azure サービス接続では、シークレットの有効期限は 2 年ではなく 3 か月になります。

シークレットをローテーションする必要をなくすには、代わりにワークロード ID フェデレーションを使用するようにサービス接続を変換します。 次のサンプル スクリプトを使用して、複数の Azure サービス接続をワークロード ID フェデレーションにすばやく変換できます。

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

次のステップ

Note

これらの機能は、今後 2 ~ 3 週間にわたってロールアウトされます。

Azure DevOps に向かい、見てみましょう。

フィードバックの提供方法

これらの機能に関するご意見をお聞かせください。 ヘルプ メニューを使用して、問題を報告したり、提案を提供したりします。

Make a suggestion

Stack Overflow のコミュニティからアドバイスや質問に回答してもらうこともできます。

よろしくお願いします。

Dan Hellem