reference:
jira
$ jiraName='jira.sample.com'
$ jiraID='STORY-1'
[!NOTE]
- Special headers
X-Atlassian-Token
X-Force-Accept-Language
X-AAccountId
check fields
$ curl -s \
-k \
-X GET https://${jiraName}/rest/api/2/issue/${jiraID} |
jq --raw-output
check attachment
check attachment ID
$ curl -s \ -k \ -X GET https://${jiraName}/rest/api/2/issue/${jiraID}?fields=attachment | jq --raw-output .fields.attachment[].id
get attachments download url
$ curl -s \ -k \ -X GET https://${jiraName}/rest/api/2/issue/${jiraID}?fields=attachment | jq --raw-output .fields.attachment[].content
download all attachments in Jira
-I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from standard in- put. Also, unquoted blanks do not terminate input items; instead the separator is the new- line character. Implies -x and -L 1.
$ curl -s \ -k \ -X GET https://${jiraName}/rest/api/2/issue/${jiraID}?fields=attachment | jq --raw-output .fields.attachment[].content | xargs -I '{}' curl -sgOJL '{}'
list all projects
$ curl -fsSL -XGET https://jira.sample.com/rest/api/2/project |
jq -r '.[] | [.key, .name] | join(" | ")' |
column -s '|' -t
search issue by JQL
[!TIP]
- Search for issues using JQL (GET)
- JQL: What is advanced search in Jira Cloud?
- How to get all issues by project key and issue type using REST api
- JQL pattern rule:
- remove all space
%3D
instead of=
project=abc
->project%3Dabc
%20CONDITION%20
instead ofCONDITION
AND
->%20AND%20
OR
->%20OR%20
- * JQL operators
- REST API - 'order by' param is ignored
- What is advanced search in Jira Cloud?
format JQL
[!TIP]
$ jql='project = abc AND issuetype = release order by updated desc' $ jql=$(printf %s "${jql}" | jq -sRr @uri)
$ jql="$(sed 's/ //g;s/AND/ AND /g;s/OR/ OR /g;s/IN/ IN /g;s/IS/ IS /g' <<< "${jql}")" $ jql="$(printf %s "${jql}" | jq -sRr @uri)" # i.e.: $ jql='project = abc AND issuetype = release' $ jql="$(sed 's/ //g;s/AND/ AND /g;s/OR/ OR /g;s/IN/ IN /g;s/IS/ IS /g' <<< "${jql}")" $ echo $jql project=abc AND issuetype=release $ jql="$(printf %s "${jql}" | jq -sRr @uri)" $ echo $jql project%3Dabc%20AND%20issuetype%3Drelease
api
[!NOTE]
- * iMarslo : bin/jira
- query parameters:
maxResults
:integer
startAt
:integer
validateQuery
:string
fields
:array<string>
expand
:string
properties
:array<string>
fieldsByKeys
:boolean
- sample:
search?jql=${jql}&maxResults=100&startAt=0
$ curl --silent \ --insecure \ --globoff \ --netrc-file ~/.netrc \ -XGET \ "https://jira.sample.com/rest/api/2/search?jql=${jql}" | jq -r ${jqOpt} # i.e.: $ curlOpt='--silent --insecure --globoff --netrc-file ~/.netrc' $ url='https://jira.sample.com/rest/api/2' $ queryParams="startAt=0&maxResults=10" $ jql='project = ABC AND issuetype = Release ORDER BY updated ASC' # copy from Jira website $ jql="$(printf %s "${jql}" | jq -sRr @uri)" $ curl "${curlOpt}" "${url}/search?jql=${jql}&${queryParams}" | jq -r '.issues[]' | jq -r '. | [.key, .fields.summary, .fields.status.name, .fields.issuetype.name, .fields.updated, .fields.created] | join("|")' | while IFS='|' read -r _key _summary _status _issuetype _updated _created; do echo "- [${_key}] - ${_summary}" echo " - status : ${_status}" echo " - issuetype : ${_issuetype}" echo " - created : ${_created}" echo " - updated : ${_updated}" done
$ curl --silent \ --insecure \ --globoff \ --netrc-file ~/.netrc \ -XGET \ "https://jira.sample.com/rest/api/2/search?jql=${jql}" | jq -r ${jqOpt} # i.e.: $ curlOpt='--silent --insecure --globoff --netrc-file ~/.netrc' $ url='https://jira.sample.com/rest/api/2' $ queryParams="startAt=0&maxResults=10" $ jql='project = abc AND issuetype = release' # copy from Jira website $ jql="$(sed 's/ //g;s/AND/ AND /g;s/OR/ OR /g;s/IN/ IN /g;s/IS/ IS /g' <<< "${jql}")" $ jql="$(printf %s "${jql}" | jq -sRr @uri)" $ curl "${curlOpt}" "${url}/search?jql=${jql}&${queryParams}" | jq -r '.issues[]' | jq -r '. | [.key, .fields.summary, .fields.status.name, .fields.issuetype.name, .fields.updated, .fields.created] | join("|")' | while IFS='|' read -r _key _summary _status _issuetype _updated _created; do echo "- [${_key}] - ${_summary}" echo " - status : ${_status}" echo " - issuetype : ${_issuetype}" echo " - created : ${_created}" echo " - updated : ${_updated}" done
generate OAuth consumer
$ openssl genrsa -out jira_privatekey.pem 1024
$ openssl req -newkey rsa:1024 -x509 -key jira_privatekey.pem -out jira_publickey.cer -days 365
$ openssl pkcs8 -topk8 -nocrypt -in jira_privatekey.pem -out jira_privatekey.pcks8
$ openssl x509 -pubkey -noout -in jira_publickey.cer > jira_publickey.pem
icons
priority
[!NOTE|label:references:]
$ for _i in "blocker.png" "blocker.svg" "critical.png" "critical.svg" "high.png" "high.svg" "highest.png" "highest.svg" "low.png" "low.svg" "lowest.png" "lowest.svg" "major.png" "major.svg" "medium.png" "medium.svg" "minor.png" "minor.svg" "trivial.png" "trivial.svg"; do
echo "--> ${_i}"
curl -O https://jira-trigger-plugin.atlassian.net/images/icons/priorities/${_i}
done
confluence
$ confluenceName='my.confluence.com'
$ pageID='143765713'
get page id:
get info
$ curl -s -X GET https://${confluenceName}/rest/api/content/${pageID} | jq --raw-output
- get space
$ curl -s -X GET https://${confluenceName}/rest/api/content/${pageID} | jq .space.key
- get title
$ curl -s -X GET https://${confluenceName}/rest/api/content/${pageID} | jq .title
get page history
$ curl -s -X GET https://${confluenceName}/rest/api/content/${pageID} | jq .version.number
- get next version
currentVer=$(curl -s -X GET https://${confluenceName}/rest/api/content/${pageID} | jq .version.number) newVer=$((currentVer+1))
- get next version
publish to confluence
$ url="https://${confluenceName}/rest/api/content/${pageID}"
$ page=$(curl -s ${url})
$ space=$(echo "${page}" | jq .space.key)
$ title=$(echo "${page}" | jq .title)
$ currentVer=$(echo "${page}" | jq .version.number)
$ newVer=$((currentVer+1))
$ cat > a.json << EOF
{
"id": "${pageID}",
"type": "page",
"title": ${title},
"space": {"key": ${space}},
"body": {
"storage": {
"value": "<h1>Hi confluence</h1>",
"representation": "storage"
}
},
"version": {"number":${newVer}}
}
EOF
$ curl -s \
-i \
-X PUT \
-H 'Content-Type: application/json' \
--data "$(cat a.json)" \
https://${confluenceName}/rest/api/content/${pageID}
- result
plugins
Multiexcerpt
create excerpt
include excerpt
result