功能
- 使用 Microsoft Entra ID 驗證從管線存取 Azure 服務匯流排
- 管線和工作會填入變數,以自定義工作負載身分識別同盟驗證
- 重試伺服器工作
- 使用生命週期結束節點執行器版本來執行發出警告的工作
- DockerCompose0 在 v1 兼容性模式中使用 Docker Compose v2
使用 Microsoft Entra ID 驗證從管線存取 Azure 服務匯流排
您現在可以使用 Microsoft Entra ID 驗證,從 Azure Pipelines 存取 Azure 服務匯流排。 這可讓您利用工作負載身分識別同盟來移除秘密管理和 Azure RBAC,以進行更細緻的訪問控制。
存取 Azure 服務匯流排 的身分識別必須獲得存取 服務匯流排 上 Azure 服務匯流排 的其中一個 Azure 內建角色。
PublishToAzureServiceBus@2工作
您可以使用 Azure 服務連線來設定新的PublishToAzureServiceBus@2工作。 建立 Azure 服務連線 ,並填入 serviceBusQueueName 新工作的 和 serviceBusNamespace 屬性:
- task: PublishToAzureServiceBus@2
inputs:
azureSubscription: my-azure-service-connection
serviceBusQueueName: my-service-bus-queue
serviceBusNamespace: my-service-bus-namespace
useDataContractSerializer: false
messageBody: |
{
"foo": "bar"
}
伺服器工作
使用 ServiceBus 執行的自訂伺服器(無代理程式)工作可以將 Azure 服務連線指定為 EndpointId ,並省略 ConnectionString。 請參閱 伺服器工作撰寫。
管線和工作會填入變數,以自定義工作負載身分識別同盟驗證
用於要求 OIDC 令牌的 System.OidcRequestUri REST API 端點現在可在管線變數中使用。 工作開發人員可以利用此變數來產生idToken,以使用 Entra ID 進行驗證。
如果您使用 Marketplace 工作或自定義工作來部署至 Azure,請注意,這些工作可能尚未支援工作負載身分識別同盟。 我們建議工作開發人員啟用工作負載身分識別同盟,以改善安全性措施。
connectedService:AzureRM您可以遵循下列步驟,更新task.json中輸入的工作以支援工作負載身分識別同盟:
- 利用 Oidctoken REST API 來要求 idToken(上圖中的箭號 1)。
- 使用 OAuth API 的同盟認證流程交換 idToken 作為存取令牌,並將 idToken 指定為
client_assertion(上圖中的箭號 2 和 4):
or: - 對於做為執行驗證本身之工具包裝函式的工作,請使用工具的驗證方法來指定同盟令牌。
節點工作可以使用 azure-pipelines-tasks-artifacts-common npm 套件來取得 idToken。 如需實作詳細數據,請參閱程式 碼範例 。
要求全新的idToken
System.OidcRequestUri和 工作中公開的AZURESUBSCRIPTION_SERVICE_CONNECTION_IDAzureCLI@2管線變數和AzurePowerShell@5環境變數可讓管線作者從自己的腳本進行驗證:
PowerShell Az
- task: AzurePowerShell@5
inputs:
azureSubscription: 'my-azure-subscription'
scriptType: inlineScript
inline: |
# Request fresh idToken
Invoke-RestMethod -Headers @{
Authorization = "Bearer $(System.AccessToken)"
'Content-Type' = 'application/json'
} `
-Uri "${env:SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${env:AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}" `
-Method Post `
| Select-Object -ExpandProperty oidcToken
| Set-Variable idToken
# Fetch current context
$azContext = Get-AzContext
# Start new Az session
Connect-AzAccount -ApplicationId $azContext.Account.Id `
-TenantId $azContext.Tenant.Id `
-SubscriptionId $azContext.Subscription.Id `
-FederatedToken $idToken
Azure CLI
- task: AzureCLI@2
inputs:
addSpnToEnvironment: true
azureSubscription: 'my-azure-subscription'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# Request fresh idToken
OIDC_REQUEST_URL="${SYSTEM_OIDCREQUESTURI}?api-version=7.1&serviceConnectionId=${AZURESUBSCRIPTION_SERVICE_CONNECTION_ID}"
ARM_OIDC_TOKEN=$(curl -s -H "Content-Length: 0" -H "Content-Type: application/json" -H "Authorization: Bearer $(System.AccessToken)" -X POST $OIDC_REQUEST_URL | jq -r '.oidcToken')
# Save subscription context
ARM_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
# New az-cli session
az login --service-principal -u $servicePrincipalId --tenant $tenantId --allow-no-subscriptions --federated-token $ARM_OIDC_TOKEN
az account set --subscription $ARM_SUBSCRIPTION_ID
重試伺服器工作
呼叫 外部系統,例如 AzureFunction 或 InvokeRESTAPI的伺服器工作偶爾會因為計算資源耗盡等暫時性錯誤而失敗。 先前,這類失敗會導致整個作業,以及可能讓管線失敗。
為了改善暫時性錯誤的復原能力,我們引進了伺服器工作中 屬性的支援 retryCountOnTaskFailure 。 假設您在管線中有下列 YAML 程式代碼:
- stage: deploy
jobs:
- job:
pool: server
steps:
- task: AzureFunction@1
retryCountOnTaskFailure: 2
inputs:
function: 'https://api.fabrikamfiber.com'
key: $(functionKey)
method: 'POST'
waitForCompletion: 'false'
如果 https://api.fabrikamfiber.com 發生暫時性錯誤,Azure Pipelines 將重試要求最多三次(初始嘗試加上 指定的 retryCountOnTaskFailure兩次重試)。 每次重試都會包含增加的等候期間。 允許的重試次數上限為10。
retryCountOnTaskFailure不適用於ManualValidation工作和其他未涉及外部系統呼叫的工作。
使用生命週期結束節點執行器版本來執行發出警告的工作
不再 維護 依賴 Node 版本的管線工作將會開始收到警告:
工作
TaskName版本<version>相依於生命週期結束的節點版本 (10)。 請連絡延伸模組擁有者以取得工作的更新版本。 工作維護人員應檢閱節點升級指引: https://aka.ms/node-runner-guidance
若要隱藏這些警告,您可以在管線(作業)或工作層級設定環境或管線變數。 例如:
variables:
AZP_AGENT_CHECK_IF_TASK_NODE_RUNNER_IS_DEPRECATED: false
DockerCompose@0在 v1 相容性模式中使用 Docker Compose v2
Docker Compose v1 將達到其生命周期結束,並將於 2024 年 7 月 24 日從託管代理程式中移除。 我們已更新 DockerCompose@0 工作,以在 v1 相容性模式中使用 Docker Compose v2,如果代理程式上無法使用 Docker Compose v1。
不過,並非所有相容性問題都可以用相容性模式解決。 部分使用者需要更多時間才能更新 Docker Compose 專案來實現 Docker Compose v2 相容性。 在這些情況下,請依照這些指示搭配 docker-compose v1 使用 DockerComposeV0 工作。
注意:本指南是以 Install Compose 獨立 文件為基礎
在 Windows 上使用 docker-compose v1
將 powershell 步驟新增至您的管線,以下載 docker-Compose v1.29.2,並將其與 Windows 上的 DockerComposeV0 工作搭配使用:
variables:
dockerComposePath: C:\docker-compose
steps:
- powershell: |
mkdir -f $(dockerComposePath)
# GitHub now requires TLS1.2. In PowerShell, run the following
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-windows-x86_64.exe" -Destination $(dockerComposePath)\docker-compose.exe
displayName: Download docker-compose
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
dockerComposeFile: '**/docker-compose.yml'
action: 'Run a Docker Compose command'
dockerComposeCommand: 'run'
dockerComposePath: $(dockerComposePath)\docker-compose.exe
在 Linux 上使用 docker-compose v1
將 bash 步驟新增至管線以下載 Docker-Compose v1.29.2,並將其與 Linux 上的 DockerComposeV0 工作搭配使用:
variables:
dockerComposePath: /tmp/docker-compose
steps:
- bash: |
sudo mkdir $(dockerComposePath)
sudo curl -SL https://github.com/docker/compose/releases/download/1.29.2/docker-compose-linux-x86_64 -o $(dockerComposePath)/docker-compose
sudo chmod 755 $(dockerComposePath)/docker-compose
displayName: Download docker-compose
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
dockerComposeFile: $(Build.SourcesDirectory)/DockerComposeV0/docker-compose.yml
action: 'Run a Docker Compose command'
dockerComposeCommand: 'run'
dockerComposePath: $(dockerComposePath)/docker-compose
下一步
注意
這些功能將在未來兩到三周內推出。
前往 Azure DevOps 並查看。
如何提供意見反應
我們很樂意聽到您對於這些功能的看法。 使用說明功能表來回報問題或提供建議。
您也可以在 Stack Overflow 上的社群取得建議和您的問題。