我正在努力解决这个问题。我正在尝试用golang写一个程序来访问azure devops构建管道,寻找一个特定的管道并将其禁用。我创建了一个个人访问令牌,我能够进行身份验证,没有任何问题。但是当我运行我的代码时,我得到以下错误:
第一个月
我的代码看起来像这样:
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
)
type Pipeline struct {
ID int `json:"id"`
Name string `json:"name"`
// Include other relevant fields if needed
}
func main() {
organization := "myorg"
project := "project"
pipelineID := 524
email := "myemail"
pat := "mypat"
url := fmt.Sprintf("https://dev.azure.com/%s/%s/_apis/build/definitions/%d?api-version=6.1", organization, project, pipelineID)
client := &http.Client{}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println("Failed to create request:", err)
return
}
authString := fmt.Sprintf("%s:%s", email, pat)
encodedAuth := base64.StdEncoding.EncodeToString([]byte(authString))
req.Header.Set("Authorization", "Basic "+encodedAuth)
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failed to get pipeline:", err)
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
fmt.Println("Failed to get pipeline, status code:", resp.StatusCode)
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Failed to read response body:", err)
return
}
fmt.Println("Response body:", string(body))
// Parse the response body to check if the pipeline is already disabled
var pipeline Pipeline
err = json.Unmarshal(body, &pipeline)
if err != nil {
fmt.Println("Failed to parse response body:", err)
return
}
if pipeline.ID != pipelineID {
fmt.Println("Pipeline ID mismatch. Expected:", pipelineID, "Actual:", pipeline.ID)
return
}
// Disable the pipeline
req, err = http.NewRequest("PUT", url, strings.NewReader(`{
"enabled": false
}`))
if err != nil {
fmt.Println("Failed to create request:", err)
return
}
req.Header.Set("Authorization", "Basic "+encodedAuth)
req.Header.Set("Content-Type", "application/json")
resp, err = client.Do(req)
if err != nil {
fmt.Println("Failed to disable pipeline:", err)
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
fmt.Println("Failed to disable pipeline, status code:", resp.StatusCode)
return
}
fmt.Println("Pipeline disabled successfully.")
}
字符串
newRequest GET
返回管道的所有细节,响应体显示"id": 524
,但由于某种原因,API调用似乎没有找到它,而是返回0。
我一直在看我的代码一遍又一遍,但我不能看到我做错了什么。
在另一边,我试图在postman中执行相同的操作,即使在那里问题也是一样的。
请问有没有人可以帮助我理解我在这里做错了什么?
谢谢你能提供的任何帮助
1条答案
按热度按时间fwzugrvs1#
查看文档:Definitions - Update
建议您使用GET获取现有的构建定义,根据需要修改构建定义,然后使用PUT提交修改后的定义。
在这种情况下,您必须通过以下路径更新
json
:在这里您可以找到已启用的属性:BuildOption或者您可以尝试只发送这部分:
字符串