And*_*dyV 5 yaml azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-yaml
我正在尝试为 10 个实例上的 140 多个数据库创建一个数据库部署管道。我们的 IT 团队提到,在某些情况下,数据库会从一个实例移动到另一个实例以实现负载平衡。所以我不能相信每个版本的数据库都会保留在同一个实例上。我们还可以在我们的团队没有听到任何消息的情况下加入新客户。这意味着我必须编写一个可以动态部署到给定实例上的数据库的管道。每个实例都有一个单独的代理。
我现在计划的工作流程。
现在,我将数据库列表作为变量从 powershell 传递回 YAML 管道的部分遇到了问题。理想情况下,我可以返回一个列表,然后使用 YAML 循环功能创建具有给定数据库名称的 SQL Server 部署任务。是否可以从 Powershell 返回列表并使用循环功能循环遍历它们?下面是我使用的 YAML 示例,减去了我不想在那里共享的内容。
/*Pipeline Being Called*/
variables:
- name: BuildConfiguration
value: release
- name: BuildPlatform
value: any cpu
- name: system.debug
value: true
- name: datamode
value: 0
- name: APIMode
value: 0
- name: Instance
value: "[ServerInstance]"
- name: var01
trigger:
- FixingDRDeployments
stages:
- stage: Powershell
pool: [Agent Pool Name]
jobs:
- job: Powershell
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$ServerInstance = "$(Instance)"
$Databases = Get-DbaDatabase -SqlInstance $ServerInstance
$ReturnValues = @()
$query = "
Query to validate database is one we want to deploy against.
"
foreach ( $db in $Databases) {
$Results = Invoke-DbaQuery -SqlInstance $serverInstance -Database $db.name -Query $query
if ($Results.Valid -eq 1) {
$ReturnValues += $db.Name
}
}
Write-Host $ReturnValues
#stages:
- template: deploytemplates/BuildTemplate.yml
- template: template.yml
parameters:
param: ["TestDatabase1","TestDatabase2"]
**^ Instead of having a defined set of static databases, I'd like to be able to pass an array of databases from the powershell script above.**
/*deploytemplates/BUildTemplate.yml*/
stages:
- stage: Build
jobs:
- job: build
pool:
name: mn-vs2017
demands:
- msbuild
- visualstudio
steps:
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
solution: '**\*.sln'
vsVersion: "15.0"
msbuildArgs: '/p:OutDir=$(build.artifactstagingdirectory) /p:CmdLineInMemoryStorage=True'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
maximumCpuCount: true
msbuildArchitecture: x64
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: MasterDacPac'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
ArtifactName: DacPac
/*template.yml*/
parameters:
param : []
stages:
- stage: ApprovalGate1
displayName: ApprovalGate1
dependsOn: Build
jobs:
- deployment:
displayName: ApprovalGate1
pool: [Pool Name Here]
environment: Databases
strategy:
runOnce:
deploy:
steps:
- task: DownloadSecureFile@1
name: PublishProfile
displayName: 'Download secure file'
inputs:
secureFile: Production.publish.xml
- ${{ each p in parameters.param }}:
- task: SqlDacpacDeploymentOnMachineGroup@0
displayName: ${{ p }}
inputs:
DacpacFile: '$(Pipeline.Workspace)\DacPac\DacPacName.dacpac'
ServerName: $(Instance)
DatabaseName: ${{ p }}
PublishProfile: '$(PublishProfile.secureFilePath)'
continueOnError: true
condition: succeededOrFailed()
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的。如果您在 powershell 中创建变量,您将创建字符串类型的变量。更糟糕的是:
Yaml 变量始终是 string: string 映射。
我们准备在不久的将来发布一个功能,让您可以通过更复杂的结构。敬请关注!
您可以使用数组作为参数,但这只是静态的,您已经知道了:
steps:
- template: template.yaml
parameters:
instances:
- test1
- test2
server: someServer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |