使用rest和powershell创建atlassian stash repo

时间:2014-07-09 13:59:57

标签: git powershell bitbucket-server bitbucket-api

我试图使用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,那么你们中的一个天才能指出我正确的方向会更加重要。

谢谢, 迈克尔

2 个答案:

答案 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以查看失败的实际原因。