【问题标题】:How to run azure devops pipelines using RestAPi?如何使用 Rest APi 运行 azure devops 管道?
【发布时间】:2021-08-23 09:54:14
【问题描述】:

我尝试使用 azure devops 的 API 端点来运行我的管道。但是当我检查 azure devops 门户时,管道没有开始运行。我在这里分享我的代码。

personal_access_token='PAT',
organization_url='url'
authorization = str(base64.b64encode(bytes(':'+personal_access_token, 'ascii')), 'ascii')
headers={'Accept':'application/json', 'Authorization': 'Basic '+authorization}
credentials=BasicAuthentication('',personal_access_token)
connect=Connection(base_url=organization_url,creds=credentials)

现在我正在循环管道

response = requests.post(url_of_pipeline,headers=headers)

当我执行 request.post 时,它应该开始在 azure devops 上运行管道,但是当我检查 azure devops 门户时。管道未运行。如何解决这个问题?

【问题讨论】:

  • 你叫什么端点?
  • 我使用过端点 POST dev.azure.com{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=6.1-preview.1 我正在寻找如何运行使用 python 代码的管道。
  • 您是否可以选择使用 CLI? docs.microsoft.com/en-us/cli/azure/…
  • 不,我正在寻找 python 代码,直到现在我发现在请求正文中我必须传递运行参数。如何通过?当我发布请求时,我得到了这些值。 {'$id': '1', 'errorCode': 0, 'eventId': 0, 'innerException': None, 'message': '值不能为空。\r\n参数名称: runParameters', 'typeKey' :'ArgumentNullException','typeName':'System.ArgumentNullException,mscorlib'}

标签: azure azure-devops azure-devops-rest-api


【解决方案1】:

根据您的要求,您正在使用 python 运行其余 api 来运行管道。

您也可以尝试以下 Python 示例:

import requests
import json
import base64

pat = 'PAT'
authorization = str(base64.b64encode(bytes(':'+pat, 'ascii')), 'ascii')

print(authorization )

url = "https://dev.azure.com/{ORG}/{PROJECT}/_apis/pipelines/{pipelineid}/runs?api-version=6.1-preview.1"



payload = json.dumps({})
headers = {
  'Authorization': 'Basic '+authorization,
  'Content-Type': 'application/json',
  
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

【讨论】:

    【解决方案2】:

    这里有一个如何在 powershell 中完成的示例:

    $AzureDevOpsPAT = "ocd2rrtds7bj6mff6jcxjllmaaXXXXXXXXXXXXXXXXXXXXXXXX"
    $OrganizationName = "DEMOXXXXXXXXXXXXXXX"
    $ProjectName = "SOMEPROJECT"
    $buildId = 177
    
    $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
    
    $uri = "https://dev.azure.com/$($OrganizationName)/$($ProjectName)/_build?definitionId=$($buildId)" 
    
    Invoke-RestMethod -Uri $uri -Method post -Headers $AzureDevOpsAuthenicationHeader 
    

    但是,目前您有两个可用的端点 Builds - QueueRuns - Run Pipeline

    【讨论】:

    • 好的,所以我在浏览博客后得到了答案这是链接stackoverflow.com/questions/68171363/… 所以在这里我们必须将一个空字典传递给 api 的 http 请求,而不是使用我们必须使用的请求urllib3 并发布一个请求正文为空的 http 请求。它将触发将开始运行的管道。
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2020-04-02
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多