Azure 發布管道 (YAML) 中是否有 while 回圈這樣的東西?我的用例是我正在使用 runOnce 策略將工件部署到干凈的環境中,部署客戶端資料,在移動到下一個客戶端之前,我需要運行查詢以確保完成所有處理并完成健康檢查。所有檢查都可以通過 SQL 腳本在 Azure SQL 資料庫中完成,最終我需要將結果和任務時間與預期的集合進行比較。
即跨分支處理客戶資料是否產生預期的結果和時間。
如果有更簡單的方法,可能是一個方形釘圓孔,很高興使用不同的方法。
- deployment : Install
pool:
vmImage: ubuntu-latest
environment:
name: 'Test_Env'
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
# Remove and re-create blank database on the Elastic Pool.
- task: SqlAzureDacpacDeployment@1
displayName: Drop DB
inputs:
azureSubscription: 'Azure'
AuthenticationType: 'server'
ServerName: '$(DB_SERVER)'
DatabaseName: 'master'
SqlUsername: '$(DB_USERNAME)'
SqlPassword: '$(DB_PASSWORD)'
deployType: 'InlineSqlTask'
SqlInline: |
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'$(DB_DATABASE)') DROP DATABASE [$(DB_DATABASE)]
IpDetectionMethod: 'AutoDetect'
- task: SqlAzureDacpacDeployment@1
displayName: Create DB
inputs:
azureSubscription: 'Azure'
AuthenticationType: 'server'
ServerName: '$(DB_SERVER)'
DatabaseName: 'master'
SqlUsername: '$(DB_USERNAME)'
SqlPassword: '$(DB_PASSWORD)'
deployType: 'InlineSqlTask'
SqlInline: |
CREATE DATABASE $(DB_DATABASE) ( SERVICE_OBJECTIVE = ELASTIC_POOL (name = [SQL_ElasticPool] ));
IpDetectionMethod: 'AutoDetect'
- task: CmdLine@2
displayName: Install Product
inputs:
script: |
start /wait msiexec.exe /i "$(System.ArtifactsDirectory)\installer.msi" client_data= $(client_data) DB_USERNAME=$(DB_USERNAME) DB_PASSWORD=$(DB_PASSWORD)
workingDirectory: $(System.ArtifactsDirectory)
- task: CmdLine@2
displayName: Start Service
inputs:
script: |
sc start $(WIN_SERVICE)
# This is where I would want a while-loop
- task: SqlAzureDacpacDeployment@1
displayName: Check if processing finished
inputs:
azureSubscription: 'Azure'
AuthenticationType: 'server'
ServerName: '$(DB_SERVER)'
DatabaseName: '$(DB_DATABASE)'
SqlUsername: '$(DB_USERNAME)'
SqlPassword: '$(DB_PASSWORD)'
deployType: 'InlineSqlTask'
SqlInline: |
select 1 from eventlog if complete = 0
IpDetectionMethod: 'AutoDetect'
uj5u.com熱心網友回復:
Azure Devops YAML 管道 - While 回圈?
您可以創建一個包含一組Check if processing finished任務的模板,并在構建期間將回圈時間作為引數傳遞,例如:
- template: CheckProcessingFinished.yaml
parameters:
param: ["1","2","3"]
CheckProcessingFinished.yaml:
parameters:
param : []
steps:
- ${{each Looptimes in parameters.param}}:
- task: SqlAzureDacpacDeployment@1
displayName: Check if processing finished
inputs:
azureSubscription: 'Azure'
AuthenticationType: 'server'
ServerName: '$(DB_SERVER)'
DatabaseName: '$(DB_DATABASE)'
SqlUsername: '$(DB_USERNAME)'
SqlPassword: '$(DB_PASSWORD)'
deployType: 'InlineSqlTask'
SqlInline: |
select 1 from eventlog if complete = 0
IpDetectionMethod: 'AutoDetect'
- task: PowerShell@2
inputs:
targetType: 'Sleep 30 seconds'
script: |
Start-Sleep 30
您可以查看檔案解決 Azure DevOps Pipelines 中的回圈問題以獲取更多詳細資訊。
uj5u.com熱心網友回復:
- 在 YAML 中我們使用
each關鍵字,它相當于for loop. - 在滿足條件之前您無法運行任務,您可以通過一個一個地撰寫它們或使用
each等效于 for 回圈的陳述句來運行多個任務。 - 但是您可以使用
GATEwhich 來控制部署。它們主要用于基礎設施的健康檢查、部署的外部批準等。 - 閘門可以位于管道的起點或管道的末端。
- Gates 有多種型別,例如使用呼叫函式和 azure 監視器的型別,有些 Gates 也使用 rest api。您也可以創建自定義門。
- Gates 將繼續檢查用戶指定的條件,直到滿足。
- 因此,您可以使用 azure 函式門運行所需的腳本并在門中回傳結果以進行驗證。
參考:
Azure 管道門
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495262.html
標籤:天蓝色 天蓝色的devops 天蓝色管道
下一篇:使用多個大型CSV檔案訓練模型
