通过调用JIRA Rest web api实现统计自动化,首先进行登录模拟:
$content = @{username=‘用户名‘;password=‘密码‘} $JSON=$content|convertto-JSON -Compress $res = Invoke-WebRequest -Uri "http://jira地址/rest/auth/1/session" -Method Post -Body $JSON -ContentType application/json $webClient = new-object net.webclient #Set encoding style here. $webClient.Encoding=[System.Text.Encoding]::GetEncoding("utf-8")<# Note that the response contains the Set-Cookie HTTP headers that must be honoured by the caller. If you are using a cookie-aware HTTP client then it will handle all Set-Cookie headers automatically. This is important because setting the JSESSIONID cookie alone may not be sufficient for the authentication to work. #> $webClient.Headers.add("Cookie", $res.Headers["Set-Cookie"]) #Write-Host "调用获取登录状态接口" -ForegroundColor Green #$webClient.DownloadString("http://jira地址/rest/auth/1/session") #Write-Host "调用退出登录接口" -ForegroundColor Green #$webClient.UploadString("http://jira地址/rest/auth/1/session","DELETE","") #Write-Host "调用获取登录状态接口" -ForegroundColor Green #$webClient.DownloadString("http://jira地址/rest/auth/1/session")
然后查询所有分派给我的任务,并遍历每个任务取出想要的信息(例如:报告人、开发、前端、Jira创建时间等信息):
$jiraUri = "jira地址" #查询所有分派给天外归云的任务 #Search using search request.通过查找接口用jql语句来进行查找(首先要创建一个JSON对象做为查找时post的body) #在PowerShell中创建JSON对象. $JSON = @" { "jql": "分派给 = 天外归云", "startAt": 0, "maxResults": 1000, "fields": [ "summary", "status", "assignee" ] } "@ $apiUri = "/rest/api/2/search" $uri = $jiraUri+$apiUri #Post json必须加的header. $webClient.Headers.Add("Content-Type", "application/json"); $searchResult = $webClient.UploadString($uri,$JSON) #获取所有的issues(分派给天外归云的) $issues = ($searchResult|ConvertFrom-Json).issues #判断有没有这种field function NullOrNot($field){ if(($field -ne $null) -and ($field -ne "")) { $field }else{ $field="displayName : Null" } } #提取人员名单 function GetDisplayName($oName){ $displayNames = $oName|findstr "displayName" if($displayNames.count -ne 1){ foreach($displayName in $displayNames){ $newDisplayName += $displayName.split(":")[1] $newDisplayName += " " } $newDisplayName }else{ $displayNames.split(":")[1] } } #遍历jira issue foreach($issue in $issues){ $apiUri = $jiraUri+"/rest/api/2/issue/"+$issue.key $issueInfo = $webClient.DownloadString($apiUri) $issueInfo = $issueInfo|ConvertFrom-Json #$issueInfo.fields $reporter = GetDisplayName(NullOrNot($issueInfo.fields.reporter)) Write-Host "报告人:"$reporter $productor = GetDisplayName(NullOrNot($issueInfo.fields.customfield_10206)) Write-Host "产品人员:"$productor $qianDuan = GetDisplayName(NullOrNot($issueInfo.fields.customfield_10207)) Write-Host "前端:"$qianDuan $developer = GetDisplayName(NullOrNot($issueInfo.fields.customfield_10208)) Write-Host "开发:"$developer $fenPai = GetDisplayName(NullOrNot($issueInfo.fields.customfield_10002)) Write-Host "分派给:"$fenPai $tiCeTime = $issueInfo.fields.created Write-Host "提测时间:"$tiCeTime Write-Host "用例数据:"$issueInfo.fields.customfield_11402 $issueInfo.fields.customfield_10400 Write-Host "bug数:"$issueInfo.fields.customfield_10202 Read-Host }
时间: 2024-10-25 22:02:04