Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASでJIRAからバージョンの一覧を取得する方法

Posted at

JIRAでバージョンを管理しているけれど、どのバージョンがいつリリース予定なのかを別のシステム(例えばスプレッドシートやSlack)で確認したいことってありますよね。
そんなとき、GASを使ってJIRAのREST APIを叩いて定期的にバージョン一覧を取ってこれると便利です。
ということで、GASでJIRAからバージョン一覧を取得するためのプログラムを書いてみました。

手順

  1. GASプロジェクトを作成する
  2. /rest/auth/1/sessionでログインする
  3. /rest/api/2/project/{projectIdOrKey}/versionsでバージョン一覧を取得する

GASプロジェクトを作成する

  • Googleドライブの新規作成をクリック
スクリーンショット 2020-06-20 14.05.24.png
  • その他をクリック
スクリーンショット 2020-06-20 14.05.17.png
  • Google Apps Scriptをクリック
スクリーンショット 2020-06-20 14.05.45.png

まずは、上記手順で Google Apps Script プロジェクトを作成します。

/rest/auth/1/sessionでログインする

作成したプロジェクトのgsファイルの中に、以下の関数を作成します。

/**
 * ログインしてセッションIDを取得する関数
 *
 * @param username ログインするユーザ名
 * @param password パスワード
 * @param host アクセスするJIRAのURL(https://jira-host.co.jp的な感じ)
 * @return 取得したセッションID
 */
function getJIRASessionID(username, password, host) {
  const body = {
    username: username,
    password: password
  };
  const headers = {
    Accept: "application/json"
  };
  const options = {
    payload: JSON.stringify(body),
    muteHttpExceptions: true,
    contentType: "application/json",
    headers: headers,
    method: "post"
  };
  const response = UrlFetchApp.fetch(
    host + "/rest/auth/1/session",
    options
  );
  const responseHeaders = response.getAllHeaders();
  let cookies = [];
  if (typeof responseHeaders["Set-Cookie"] !== "undefined") {
    cookies =
      typeof responseHeaders["Set-Cookie"] == "string"
        ? [responseHeaders["Set-Cookie"]]
        : responseHeaders["Set-Cookie"];
    for (var i = 0; i < cookies.length; i++) {
      cookies[i] = cookies[i].split(";")[0];
    }
  }
  return cookies[0];
}

この関数はJira Server platform REST API referenceにおけるsession-loginの項目にあるAPIを叩き、返ってきたヘッダーのクッキーを返す関数です。
この関数の返り値を次のリクエストのヘッダーに入れることで、ログイン状態を引き継いでくれます。

  1. /rest/api/2/project/{projectIdOrKey}/versionsでバージョン一覧を取得する

続いて、同じく作成したプロジェクトのgsファイルの中に、以下の関数を作成します。

/**
 * バージョン一覧を取得する関数
 *
 * @param projectIdOrKey プロジェクトIDまたはプロジェクトKey
 * @param cookie getJIRASessionIDで取得した値を入れる
 * @param host アクセスするJIRAのURL(https://jira-host.co.jp的な感じ)
 * @return 取得したバージョン一覧
 */
function getVersions(projectIdOrKey, cookie, host) {
  const options = {
    headers: { cookie: cookie }
  };
  const response = UrlFetchApp.fetch(
    host + "/rest/api/2/project/" + projectIdOrKey + "/versions",
    options
  );
  const parse = JSON.parse(response);
  return parse;
}

この関数はJira Server platform REST API referenceにおけるproject-getProjectVersionsの項目にあるAPIを叩き、返ってきたJSONをパースしてから返す関数です。
例えばこの関数の返り値をスプレッドシートに展開したりすることで、JIRAでできない色んなことができるようになります。

使い方

自分はJIRAのURLやユーザ名/パスワードを固定で入れ、プロジェクトKeyを外から入れられるようにして、このプロジェクトをライブラリとして別のGASからインポートして使用しています。
ライブラリにする方法は別の記事にもあると思うので詳細は省きますが、ファイル>版を管理>Save new versionをクリックして、バージョンをつけておくと別プロジェクトのリソース>ライブラリからインポートが可能です。
JIRAを使うのはおそらく個人ではなく会社だと思うので、ユーザ名/パスワードをシステム用で作ったアカウントで指定するとより良いでしょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?