syg_hira's tech-work memo

某人材サービス会社の情報共有インフラ担当のおぼえがきです。MicrosoftのEnterprise製品多め。

Usine Redmine REST API with PowerShell

RedminePowerShell から REST API で操作する方法のメモです。
「してみた」系の、Issueを大雑把なフィルタ指定で取得するゆるい記事ではちょっと物足りないので、試行錯誤しました。
普段の運用業務で MicrosoftWindows や Office365 などを相手にする PowerShell ヘビーユーザのため、PowerShellInvoke-RestMethod を使用します。

必要なもの

このほかに、ちょっとしたテストのため

も適宜使用しています。

実行環境

  • PowerShell Ver5.1
  • Redmine Ver2.3.1
  • 実行ユーザは、'システム管理者'ロールを割り当てています

Get issue by issue ID

Redmine APIリファレンスにある id,issue_id のフィルタは、Redmine ver.3.3 から実装されているようです。私の環境の Redmine は Ver2.3.1 のため、id のフィルタを指定しても機能せず、最新から limit=25 件のチケットを取得するだけでした。私の環境でIDを指定してIssueを取得するには、サンプルような .../Issues/ID.xml 形式のURLで取得する必要がありました。

# Web APIURI
$URL = 'http://urlofredmine'

# 取得した API Key
$ApiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# Request Header
$headers = @{
    'X-Redmine-API-Key' = $ApiKey
}

# Request Body
$body = @{
    limit = 1
    page = 0
}

#Issue IDを使用したURIを生成する
$issue_id = '735997'
$AppUri = $URL + '/issues/' + $issue_id + '.xml'

# GET API を叩く
$Issues = Invoke-RestMethod -Method Get -Uri $AppUri -Body $body -Headers $headers
$Issues.Issue
$Issues.Issue.Project
$Issues.Issue.tracker
$Issues.Issue.status
$Issues.Issue.priority
$Issues.Issue.author
$Issues.Issue.assigned_to
$Issues.Issue.custom_fields.custom_field

Create issue

Project_id を指定して、Issue を作成します。
サンプルは最低限。このほかのプロパティ名や、custom_field のセット方法は、Redmine API リファレンスを見ながら実装する必要があります。
なぜか配列で指定するとどうやっても「題名を指定してください」エラーを消せななったので、RequestBody を JSON で記述しています。
Issueの作成に成功すると、作成した Issue が返されるので、作成された Issue の検査などに使用します。

# Web APIURI
$URL = 'http://urlofredmine'
$URI = '/issues.json'
$AppUri = $URL + $URI

# 取得した API Key
$ApiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# Request Header
$headers = @{
    'X-Redmine-API-Key' = $ApiKey
 'Content-Type'='application/json'
}

# Request Body - json
# クォーティングに注意
$body = '
{"issue":
 {"project_id":25,
  "subject":"Redmine issue for with REST API"
 }
}'
# GET API を叩く
$Issue = Invoke-RestMethod -Method POST -Uri $AppUri -Body $body -Headers $headers