loading...
Cover image for Super-simple Jira API wrapper for bash/zsh

Super-simple Jira API wrapper for bash/zsh

turbobasic profile image andriy melnyk ╔╬═╚╗╠ ╠╣╔╦╣╚╗ ╔╬╗╚╗╚╝ ・2 min read

Often I need some very simple bits of automation of Jira-related tasks without heavy external dependencies like Python version & packages, Groovy classes or even more exotic stuff. Scripts provided below depend only on Bash v4+ or Zsh v5+ (or even earlier versions which I didn't test).

(Ups... on curl as well. jq is used for fancy output only)

Examples

$ echo '{
    "fields": {
      "project": { "key": "BOOM" }, 
      "summary": "Foo", 
      "description": "Bar", 
      "labels": ["test"], 
      "issuetype": { "name": "Issue" } 
    }
  }' | jiraPost issue
{"id":"3162226", "key":"BOOM-666", "self":"https://example.com/jira/rest/api/2/issue/3162226"}


$ jiraGet issue/BOOM-666 | jq
{
  "id": "3162226",
  "self": "https://example.com/jira/rest/api/2/issue/3162226",
  "key": "BOOM-666",
  "fields": {
    "summary": "Foo",
    ...
}


$ jiraPut issue/BOOM-666 '{"fields": {"summary": "Bar"}}'

Script jira.sh

this should be sourced into your shell profile

function jiraApi() {
    DATA_PARAM='-'

    if [[ PUT == ${1} || POST == ${1} ]]
    then
        DATA_PARAM='@-'
    fi

    if [[ -z ${3} ]]
    then
        curl  --user "${JIRA}" \
              --cert "${JIRA_CERT}" \
              --key "${JIRA_KEY}" \
              --cacert "${JIRA_CA}" \
              --header 'Content-Type: application/json' \
              --request "${1}" \
              --data "${DATA_PARAM}" \
              --silent \
              "${JIRA_API}/${2}"
    else
        echo "${3}" |
        curl  --user "${JIRA}" \
              --cert "${JIRA_CERT}" \
              --key "${JIRA_KEY}" \
              --cacert "${JIRA_CA}" \
              --header 'Content-Type: application/json' \
              --request "${1}" \
              --data "${DATA_PARAM}" \
              --silent \
              "${JIRA_API}/${2}"
    fi
}

function jiraGet() {
    jiraApi GET "${@}"
}

function jiraPost() {
    jiraApi POST "${@}"
}

function jiraPut() {
    jiraApi PUT "${@}"
}

Environment variables

If you ask ‘What are all those JIRA_* variables?’ — you get the point: this is where all sensitive access details are kept. Source them into your shell profile as well:

export JIRA='login:password'
export JIRA_API=https://example.com/jira/rest/api/2
export JIRA_CERT=/full/path/to/certificate/file
export JIRA_KEY=/full/path/to/private/key/file
export JIRA_CA=/full/path/to/certificate/authority/file

Discussion

pic
Editor guide