从 api 向 devops 构建管道传递参数
pass parameters to devops build pipeline from api
我无法理解我需要做什么...但是
我有一个构建管道...下面是我用于测试的基本脚本。
我希望能够通过 api 和 powershell add/update 参数。我不确定这是否是实现此目的的最佳方法,但当我手动添加参数时它似乎运行良好。当我传递一个参数时,它不会粘住。任何帮助将不胜感激......即使我应该 post 我的查询在其他地方。
谢谢
管道脚本
variables:
patchgroup: test
jobs:
- template: patch-template.yml
parameters:
patchgroup: $(patchgroup)
sqlservers:
- sqlserver: name: ""
补丁模板文件
parameters:
sqlservers: {}
patchgroup: ''
jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
- template: patch-tasks.yml
parameters:
sqlserver: ${{ sqlserver.name }}
patchgroup: ${{ parameters.patchgroup }}
补丁任务
参数:
数据库服务器:''
补丁组:''
jobs:
- job:
displayName: '${{ parameters.sqlserver }}--set-up-stuff'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
Write-Host "sqlserver '${{ parameters.sqlserver }}'"
powershell 脚本
$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
$json = '{"variables": "{\"patchgroup\": \"xyxyxyxyx\"}","definition": {"id": "194"}}'
#$json = '{"parameters":"{\"sqlservers\": \"\"{\"sqlserver\": \"servername\"}\"\"}","definition":{"id":"194"}}'
$updatedef = Invoke-RestMethod -Uri $defurl -Method POST -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
根据你的代码,我做了一些测试。
我注意到你的参数值在你 运行 管道时没有设置,而是需要直接硬编码到 Yaml 文件中。
所以当你运行 管道时,你不能通过 Rest API.
将参数传递给 yaml 源代码
解决这个问题,你可以尝试使用parameter来传递参数值。
更新:
你可以看看我的新例子:
补丁-tasks.yml
jobs:
- job:
displayName: '${{ parameters.sqlserver }}--set-up-stuff'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
Write-Host "sqlserver '${{ parameters.sqlserver }}'"
补丁-template.yml
parameters:
- name: sqlservers
type: object
default: []
- name: patchgroup
type: string
default: ''
jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
- template: patch-tasks.yml
parameters:
sqlserver: ${{ sqlserver }}
patchgroup: ${{ parameters.patchgroup }}
流水线脚本
trigger: none
parameters:
- name: InstanceArgs
type: object
default: []
variables:
patchgroup: test
jobs:
- template: patch-template.yml
parameters:
patchgroup: $(patchgroup)
sqlservers: ${{ parameters.InstanceArgs }}
当你运行管道时,你可以看到输入框。
在这种情况下,您可以在运行连接管道时使用Rest api 传入参数值。您可以更改为使用此 Rest API: Runs - Run Pipeline
PowerShell 脚本示例:
$token = "PAT"
$url="https://dev.azure.com/{OrganizationNmae}/{ProjectName}/_apis/pipelines/{PipelineId}/runs?api-version=5.1-preview"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/BranchName"
}
}
},
"templateParameters": {
"InstanceArgs":"[1,2,3]"
},
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
我无法理解我需要做什么...但是
我有一个构建管道...下面是我用于测试的基本脚本。
我希望能够通过 api 和 powershell add/update 参数。我不确定这是否是实现此目的的最佳方法,但当我手动添加参数时它似乎运行良好。当我传递一个参数时,它不会粘住。任何帮助将不胜感激......即使我应该 post 我的查询在其他地方。
谢谢
管道脚本
variables: patchgroup: test jobs: - template: patch-template.yml parameters: patchgroup: $(patchgroup) sqlservers: - sqlserver: name: ""
补丁模板文件
parameters: sqlservers: {} patchgroup: '' jobs: - ${{ each sqlserver in parameters.sqlservers }}: - template: patch-tasks.yml parameters: sqlserver: ${{ sqlserver.name }} patchgroup: ${{ parameters.patchgroup }}
补丁任务 参数: 数据库服务器:'' 补丁组:''
jobs: - job: displayName: '${{ parameters.sqlserver }}--set-up-stuff' steps: - task: PowerShell@2 inputs: targetType: 'inline' script: | Write-Host "Patchgroup '${{ parameters.patchgroup }}'" Write-Host "sqlserver '${{ parameters.sqlserver }}'"
powershell 脚本
$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0" $json = '{"variables": "{\"patchgroup\": \"xyxyxyxyx\"}","definition": {"id": "194"}}' #$json = '{"parameters":"{\"sqlservers\": \"\"{\"sqlserver\": \"servername\"}\"\"}","definition":{"id":"194"}}' $updatedef = Invoke-RestMethod -Uri $defurl -Method POST -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
根据你的代码,我做了一些测试。
我注意到你的参数值在你 运行 管道时没有设置,而是需要直接硬编码到 Yaml 文件中。
所以当你运行 管道时,你不能通过 Rest API.
将参数传递给 yaml 源代码解决这个问题,你可以尝试使用parameter来传递参数值。
更新:
你可以看看我的新例子:
补丁-tasks.yml
jobs:
- job:
displayName: '${{ parameters.sqlserver }}--set-up-stuff'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
Write-Host "sqlserver '${{ parameters.sqlserver }}'"
补丁-template.yml
parameters:
- name: sqlservers
type: object
default: []
- name: patchgroup
type: string
default: ''
jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
- template: patch-tasks.yml
parameters:
sqlserver: ${{ sqlserver }}
patchgroup: ${{ parameters.patchgroup }}
流水线脚本
trigger: none
parameters:
- name: InstanceArgs
type: object
default: []
variables:
patchgroup: test
jobs:
- template: patch-template.yml
parameters:
patchgroup: $(patchgroup)
sqlservers: ${{ parameters.InstanceArgs }}
当你运行管道时,你可以看到输入框。
在这种情况下,您可以在运行连接管道时使用Rest api 传入参数值。您可以更改为使用此 Rest API: Runs - Run Pipeline
PowerShell 脚本示例:
$token = "PAT"
$url="https://dev.azure.com/{OrganizationNmae}/{ProjectName}/_apis/pipelines/{PipelineId}/runs?api-version=5.1-preview"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/BranchName"
}
}
},
"templateParameters": {
"InstanceArgs":"[1,2,3]"
},
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json