Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8882

JIRA REST APIで任意の課題(JQLで指定)にグループメンバーをウォッチャーとして割り当てる。

$
0
0

はじめに

  • JIRAの一括変更でグループメンバーへのウォッチャー割り当てができなかったためREST APIで実装してみました。

実施環境

作業の流れ

  1. getUsersInGroup関数を使ってメンバーのaccount_idの抽出
  2. searchJira関数を使って未ウォッチタスクの抽出
  3. addWatcher関数を使ってウォッチャーの割り当て
  4. mainでそれぞれの関数をasync/awaitで同期処理。

getUsersInGroup

  • グループ内のaccount_idの抽出
  • 同期処理をするためにPromiseを用意しておく。
index.js
// グループメンバーの抽出functiongetUsersInGroup(groupName){returnnewPromise((resolve,reject)=>{varwatcher=[];jira.getUsersInGroup(groupName)//getUsersInGroup(groupname: string, startAt: integer, maxResults: integer).then(function(issue){console.log("getUsersInGroup:")for(vari=0;i<issue.users.items.length;i++){if(issue.users.items[i].accountType=="atlassian"){watcher.push({id:issue.users.items[i].accountId,name:issue.users.items[i].displayName});}}console.log(watcher)returnresolve(watcher);}).catch(function(err){console.error(err);});});}

searchJira

  • 未ウォッチタスクの抽出
  • wwatcher not in (" + user_id + ")だけではウォッチャーなしのタスクを抽出できなかったためorで watcher is EMPTYも接続しました。
index.js
// 未ウォッチタスクの検索functionsearchNotWatch(issueKey,user_id){returnnewPromise((resolve,reject)=>{varjql_notWatch=jql+" and (watcher is EMPTY OR watcher not in ("+user_id+")) "jira.searchJira(jql_notWatch,{maxResults:1000})//searchJira(searchString: string, optional: object): .then(function(issue){for(vari=0;i<issue.issues.length;i++){issueKey[i]=issue.issues[i].keyconsole.dir(issueKey[i])}returnresolve(issueKey);})});}

addWatcher

  • ウォッチャーの割り当て
index.js
// ウォッチャー割り当てfunctionaddWatcher(issueKey,user_id){returnnewPromise((resolve,reject)=>{jira.addWatcher(issueKey,user_id).then(function(issue){console.dir(issueKey+"にウォッチャー割り当て")returnresolve();})});}

main

  • 各関数を同期処理
index.js
// mainasyncfunctionmain(){varwatcher=[];console.log('start');watcher=awaitgetUsersInGroup(group_name)console.log(watcher.length);for(vari=0;i<watcher.length;i++){varissue_key=[];console.log(watcher[i].name+"さんの未ウォッチタスクは")issue_key=awaitsearchNotWatch(issue_key,watcher[i].id);console.log(watcher[i].name+"さんにウォッチャー割り当て実行")for(varj=0;j<issue_key.length;j++){awaitaddWatcher(issue_key[j],watcher[i].id)}}console.log('done');}

つなげると

  • 一連の流れをつなげるとこんな感じになります。
index.js
//任意の課題(JQLで指定)にグループメンバーをウォッチャーとして割り当てる。constJiraApi=require('jira-client');constconfig=require('config');constjql="project = TEST_project";//任意のフィルターをJQLで指定。constgroup_name="TEST_group";//割り当てたいグループを指定// Settingconstjira=newJiraApi({protocol:config.protocol,host:config.host,username:config.username,password:config.password,apiVersion:config.apiVersion,strictSSL:config.strictSSL})// グループメンバーの抽出functiongetUsersInGroup(groupName){returnnewPromise((resolve,reject)=>{varwatcher=[];jira.getUsersInGroup(groupName)//getUsersInGroup(groupname: string, startAt: integer, maxResults: integer).then(function(issue){console.log("getUsersInGroup:")for(vari=0;i<issue.users.items.length;i++){if(issue.users.items[i].accountType=="atlassian"){watcher.push({id:issue.users.items[i].accountId,name:issue.users.items[i].displayName});}}console.log(watcher)returnresolve(watcher);}).catch(function(err){console.error(err);});});}// 未ウォッチタスクの検索functionsearchNotWatch(issueKey,user_id){returnnewPromise((resolve,reject)=>{varjql_notWatch=jql+" and (watcher is EMPTY OR watcher not in ("+user_id+")) "jira.searchJira(jql_notWatch,{maxResults:1000})//searchJira(searchString: string, optional: object): .then(function(issue){for(vari=0;i<issue.issues.length;i++){issueKey[i]=issue.issues[i].keyconsole.dir(issueKey[i])}returnresolve(issueKey);})});}// ウォッチャー割り当てfunctionaddWatcher(issueKey,user_id){returnnewPromise((resolve,reject)=>{jira.addWatcher(issueKey,user_id).then(function(issue){console.dir(issueKey+"にウォッチャー割り当て")returnresolve();})});}// mainasyncfunctionmain(){varwatcher=[];console.log('start');watcher=awaitgetUsersInGroup(group_name)console.log(watcher.length);for(vari=0;i<watcher.length;i++){varissue_key=[];console.log(watcher[i].name+"さんの未ウォッチタスクは")issue_key=awaitsearchNotWatch(issue_key,watcher[i].id);console.log(watcher[i].name+"さんにウォッチャー割り当て実行")for(varj=0;j<issue_key.length;j++){awaitaddWatcher(issue_key[j],watcher[i].id)}}console.log('done');}main();

終わりに

  • これで、タスクの検索 → 内容の変更 を一連の作業として行えるので、応用すればその他の修正作業も行えるはず。

Viewing all articles
Browse latest Browse all 8882

Trending Articles