팀 자동화 규칙의 일반 공급 및 향상된 AB# 유효성 검사

GitHub 및 팀 자동화 규칙의 Azure Boards 앱에서 향상된 AB# 유효성 검사를 일반적으로 사용할 수 있음을 발표하게 되어 기쁩니다. 작업 항목에 대한 링크가 유효하지 않을 때 알림을 받을 수 있도록 AB# 유효성 검사를 개선했습니다. 이제 팀 자동화 규칙에서 자식 항목의 상태에 따라 작업 항목의 열기 및 닫기/해결을 자동화하도록 각 백로그 수준을 구성할 수 있습니다.

이 업데이트를 통해 코드 검색에서 사용자 지정 CodeQL 쿼리에 대한 지원도 소개합니다. 이렇게 하면 코드베이스와 관련된 문제를 식별하도록 맞춤화된 사용자 고유의 쿼리를 만들 수 있습니다.

자세한 내용은 릴리스 정보를 확인하세요.

Azure DevOps용 GitHub Advanced Security

Azure Boards

Azure Pipelines

Azure DevOps용 GitHub Advanced Security

이제 Azure DevOps용 GitHub 고급 보안에서 지원되는 사용자 지정 CodeQL 쿼리

코드 검색에서 사용자 지정 CodeQL 쿼리에 대한 지원의 도입을 발표하게 되어 기쁩니다! 이를 통해 코드베이스와 관련된 문제를 식별하도록 맞춤화된 사용자 고유의 쿼리를 만들 수 있습니다. 이제 사용자 지정 쿼리가 포함된 팩을 만들고 게시하고, 파이프라인에서 이러한 쿼리를 실행하고, 조직과 관련된 취약성 검색을 사용자 지정할 수 있습니다.

Azure DevOps용 GitHub Advanced Security에서 코드 검색을 위한 사용자 지정 쿼리를 활용하는 방법에 대한 자세한 내용은 Azure DevOps용 GitHub Advanced Security에 대한 코드 검색 경고를 참조 하세요.

입력을 소중히 여깁니다. 질문이나 피드백이 있는 경우 개발자 커뮤니티에서 커뮤니티에 참여하는 것이 좋습니다.

Azure Boards

GitHub 통합 - 향상된 AB# 유효성 검사가 일반 공급됨

몇 가지 스프린트 전에 GitHub의 Azure Boards 앱에서 향상된 AB# 유효성 검사를 위한 미리 보기를 발표했습니다. 사용자에게 작업 항목 링크의 유효성을 더 잘 알리도록 앱을 개선하여 끌어오기 요청을 병합하기 전에 문제를 발견하고 해결하는 데 도움을 주었습니다.

몇 주 동안의 테스트 및 피드백을 통해 이제 GitHub + Azure Boards 통합을 사용하는 모든 사용자가 이 기능을 사용할 수 있습니다.

Screenshots of improved validation.

현재 통합을 개선하기 위해 만드는 몇 가지 기능 중 첫 번째 기능입니다. 공개 로드맵에서 계획한 다른 Azure Boards + GitHub 통합 기능을 검사 합니다.

팀 자동화 규칙은 일반적으로 사용할 수 있습니다.

Azure DevOps Service의 모든 고객에게 이 기능의 릴리스를 발표하게 되어 기쁩니다.

참고 항목

이 기능은 향후 2~3주 동안 출시될 예정입니다. 2024년 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.4PowerShell 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)'"
}

다음 단계

참고 항목

이러한 기능은 향후 2~3주 동안 출시될 예정입니다.

Azure DevOps로 이동하여 살펴보세요.

피드백을 제공하는 방법

이러한 기능에 대해 어떻게 생각하는지 듣고 싶습니다. 도움말 메뉴를 사용하여 문제를 보고하거나 제안을 제공합니다.

Make a suggestion

Stack Overflow에서 커뮤니티에서 조언과 질문에 답변할 수도 있습니다.

감사합니다,

댄 헬렘