通过API触发Azure流水线构建

14
我已经制作了一个可工作的Azure Pipeline来构建我的代码库。
我正在寻找一种通过API触发Azure Pipelines构建的方法,最好是REST。如果REST不可行,也许我可以尝试使用一种资源ID通过Azure Functions调用构建。 当满足我的条件时,我希望我的自己的仓库监视器发出API请求以触发构建。 另外一个问题 - 是否可以通过API设置"pipeline variables" - 例如,我进行API调用并传递值来用作我的管道变量的值,然后触发构建。
谢谢
3个回答

27
你可以使用 VSTS REST API 或者DevOps REST API通过提供ID来排队构建。 VSTS POST:
https://account.visualstudio.com/project/_apis/build/builds?api-version=4.1

DevOps文章:

https://dev.azure.com/account/project/_apis/build/builds?api-version=6.1-preview.6

正文

{ 
        "definition": {
            "id": number
        } 
}

请参考这个解决方案

对于您的第二个问题, 是的,这也是可能的,只需在请求主体中提供参数即可

DevOps请求主体

{
    "parameters":  "{\"Parameter1\":  \"a value\"}",
    "definition":  {
                       "id":  2
                   }
}

参考链接

注意:对于这些API调用,请确保使用基本身份验证,并将个人访问令牌作为值传递。


你好Jayendran。我正在尝试创建发布管道,但是我遇到了页面未找到的问题。你能帮忙吗? https://stackoverflow.com/questions/53225115/release-pipeline-api-is-not-working-in-azure-devops - Bala
@bkr 很高兴你自己找到了答案。 - Jayendran
5
重要提示:在最新版本的API中,“parameters”是一个字符串,不再是JSON对象。但该字符串应包含JSON。因此,您需要转义一个JSON对象,如下所示:"parameters": "{ "param1": "value1" }" - D.R.
我在使用以下两种方法方面遇到了困难:https://dev59.com/grzpa4cB1Zd3GeqPVv_5请帮忙。 - Yahya Uddin
这对我来说根本不起作用,没有开始构建,也没有任何响应。 - Dan

0

使用Azure DevOps REST API 7.1(仍处于预览阶段),使用cURL,使用PAT(个人访问令牌)身份验证和自定义参数排队构建的完整答案:

YOUR_PAT_TOKEN_ENCODED_IN_BASE64=...
AZURE_ORGANIZATION=...
AZURE_PROJECT=...
PIPELINE_ID=...
FULL_GIT_SHA=... # Optional, see usage below

curl --location \
  --request POST 'https://dev.azure.com/$AZURE_ORGANIZATION/$AZURE_PROJECT/_apis/build/builds?api-version=7.1-preview.7' \
  --header 'Authorization: Basic $YOUR_PAT_TOKEN_ENCODED_IN_BASE64' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "definition": {
      "id": "$PIPELINE_ID"
    },
    "sourceVersion" : "$FULL_GIT_SHA", # Optional: only if you want to override the default sourceVersion
    "parameters": "{\"your.parameter\": \"your value\"}" # Yes this is a stringified JSON inside a stringified JSON...
  }'

不知道你的PIPELINE_ID是什么? 前往Azure Pipeline网站,点击你的流水线并查看URL: https://dev.azure.com/yourorganization/yourproject/_build?definitionId=42 -> definitionId就是你想要的。

0
我在尝试使用PAT和cURL触发发布管道时进入了这里,并且我有一些略有不同的输入,可能对其他遇到相同问题的人有帮助。
有一个构建API、运行API和发布API,对于这种情况(触发发布管道),应该使用发布API的创建方法。
https://learn.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-7.1&tabs=HTTP

此外,通过反复试验,我发现这种方法行不通。
--header 'Authorization: Basic $PAT_TOKEN_ENCODED_IN_BASE64'

根据基本身份验证方案,我们有以下模式:
base64(user:password)

对于PAT身份验证,即使用户为空,冒号也是必需的,以便在Microsoft的API端正确解析信息。
这就是我在bash中最终做的事情。
AZURE_ORGANIZATION=...
AZURE_PROJECT=...
PIPELINE_ID=...
MY_PARAMETER=...
PAT=...

# IMPORTANT: mind the colon before PAT
PAT_TOKEN_ENCODED_IN_BASE64_WITH_COLON=$(echo -n ":$PAT" | base64)

curl \
  --request POST "https://vsrm.dev.azure.com/$AZURE_ORGANIZATION/$AZURE_PROJECT/_apis/release/releases?api-version=7.1-preview.8" \
  --header "Authorization: Basic $PAT_TOKEN_ENCODED_IN_BASE64_WITH_COLON" \
  --header 'Content-Type: application/json' \
  --data-raw '{
      "definitionId": "'$PIPELINE_ID'",
      "variables": {
        "MY_VAR": {
          "value": "'$MY_PARAMETER'"
        }
      }
    }'

最后但并非最不重要的是,关于变量,对于发布管道来说,变量必须在管道的变量选项卡中声明,并标记为“可在发布时设置”。
希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接