我试图使用PowerShell自动创建新的git存储库。
据我所知,使用网址上的POST方法创建新的回购
/rest/api/1.0/projects/$ProjectKey/repos
https://developer.atlassian.com/static/rest/stash/3.0.1/stash-rest.html#idp1178320
因为您必须是管理员才能修改内容我向webrequest添加了一个授权标题字段。
$ByteArr = [System.Text.Encoding]::UTF8.GetBytes('admin:pwd')
$Base64Creds = [Convert]::ToBase64String($ByteArr)
$ProjectKey = 'SBOX'
$CreateRepoUri = "$BaseUri/rest/api/1.0/projects/$ProjectKey/repos/"
Invoke-RestMethod -Method Post `
-Headers @{ Authorization="Basic $Base64Creds" } `
-Uri $CreateRepoUri `
-ContentType 'application/json' `
-Body @{ slug='test'; name='RestCreatedRepo';}
但在执行时我收到内部服务器错误(500)。没有更多细节或InnerExceptions为什么确切。
使用GET检索存储库列表,以便进行身份验证(至少对于Get请求)
根据这一点,它应该是一个正确的声明:
这个slu or或scmId究竟是什么(有人听说过)?
如果你刚才开始使用webservises,那么你们中的一个天才能指出我正确的方向会更加重要。
谢谢, 迈克尔
答案 0 :(得分:2)
REST API documentation围绕它有点模糊,但我认为你不能根据this section设置存储库slug。没有具体说明你可以或不可以更改slug,但是使用名称和暗示如果名称改变,slug可能会改变。
存储库的slug源自其名称。如果名称改变,slug也可能会改变。
在示例中,创建了一个名为“My Repo”的repo,导致slug为“my-repo”。因此,我认为slug基本上是存储库名称的“标准化”版本。 ScmId标识要用于存储库的源控制管理类型(例如“git”)。
对于您的请求正文,我也不确定Invoke-RestMethod
会自动将其转换为JSON。您可以使用ConvertTo-Json
Cmdlet,或者在较小的情况下只需手动创建JSON字符串。这对我有用:
$baseUrl = 'http://example.com'
$usernamePwd = 'admin:passwd'
$project = 'SBOX'
$repoName = 'RestCreatedRepo'
$headers = @{}
$headers.Add('Accept', 'application/json')
$bytes = [System.Text.Encoding]::UTF8.GetBytes($usernamePwd)
$creds = 'Basic ' + [Convert]::ToBase64String($bytes)
$headers.Add('Authorization', $creds)
$data = '{"name": "{0}","scmId": "git","forkable": true}' -f $repoName
$url = '{0}/rest/api/1.0/projects/{1}/repos' -f $baseUrl,$project
$response = try {
Invoke-RestMethod -Method Post `
-Uri $url `
-Headers $headers `
-ContentType 'application/json' `
-Body $data
} catch {
$_.Exception.Response
}
答案 1 :(得分:1)
我的2美分。
这不是您关于atlassian问题的答案的答案,而是关于如何从答复中查看更多详细信息的一般指导。
$response = try {
Invoke-RestMethod -Method Post `
-Headers @{ Authorization="Basic $Base64Creds" } `
-Uri $CreateRepoUri `
-ContentType 'application/json' `
-Body @{ slug='test'; name='RestCreatedRepo';}
} catch {
$_.Exception.Response
}
您可以检查$response
以查看失败的实际原因。