総数:15 今日:1 昨日:0

もくじ

準備

参考URL proxy設定(ubuntu:16.04)

curl proxy設定

echo 'proxy = "http://[address]:[port]"' >> ~/.curlrc

参考URL Rest_api

システム依存の変数定義

ファイル名redmine_system_oriented_variables.sh
$ cat redmine_system_oriented_variables.sh 
#!/bin/bash

# redmine_system_oriented_variables.sh
# システムに依存した変数の定義

readonly REDMINE_URL="http://192.168.3.26/redmine"
readonly REDMINE_API_KEY="1fe9fda5bc2df59705e556bb5a4eb6b2c90e1767"

定数定義

ファイル名redmine_const_variables.sh
$ cat redmine_const_variables.sh 
#!/bin/bash

# redmine_const_variables.sh
# 定数の定義

readonly DIR_TEMP="temp"
if [ ! -d ${DIR_TEMP} ] ; then
	mkdir ${DIR_TEMP}
fi
readonly FILE_HTTP_RESPONSE_HEADER="http_response_header.txt"
readonly PATH_HTTP_RESPONSE_HEADER="${DIR_TEMP}/${FILE_HTTP_RESPONSE_HEADER}"
readonly FILE_HTTP_RESPONSE_BODY="http_response_body.xml"
readonly PATH_HTTP_RESPONSE_BODY="${DIR_TEMP}/${FILE_HTTP_RESPONSE_BODY}"

readonly HEADER_CONTENT_TYPE_TEXT_XML="Content-type: text/xml"

readonly REGEX_HTTP_STATUS_LINE="^HTTP\/1\.[0-9] \([0-9]\+\) .*"
readonly REGEX_HTTP_STATUS_SUCCESS="2[0-9][0-9]"

Listing projects

ファイル名redmine_list_project.sh
機能プロジェクトの一覧を取得する
使用方法redmine_list_project.sh <redmine_url> <redmine_api_key>
使用例./redmine_list_projects.sh http://192.168.3.26/redmine 1fe9fda5bc2df59705e556bb5a4eb6b2c90e1767
$ cat redmine_list_projects.sh 
#!/bin/bash

# redmine_list_project.sh
# プロジェクトの一覧を取得する

source redmine_system_oriented_variables.sh
source redmine_const_variables.sh

declare -i rval=0

HTTP_REQ_METHOD="GET"
HTTP_REQ_URL="projects.xml"

#USAGE=`cat << EOS
#usage: $0 <redmine_url> <redmine_api_key>
#  example:
#  <redmine_url>    : http://192.168.3.26/redmine
#  <redmine_api_key>: 1fe9fda5bc2df59705e556bb5a4eb6b2c90e1767
#EOS
#`
#if [ $# -lt 2 ]; then
#	echo "${USAGE}"
#	exit 1
#fi

echo "curl --dump-header ${PATH_HTTP_RESPONSE_HEADER} -o ${PATH_HTTP_RESPONSE_BODY} -H \"${HEADER_CONTENT_TYPE_TEXT_XML}\" -X ${HTTP_REQ_METHOD} \"${REDMINE_URL}/${HTTP_REQ_URL}?key=${REDMINE_API_KEY}\""

curl --dump-header ${PATH_HTTP_RESPONSE_HEADER} -o ${PATH_HTTP_RESPONSE_BODY} -H "${HEADER_CONTENT_TYPE_TEXT_XML}" -X ${HTTP_REQ_METHOD} "${REDMINE_URL}/${HTTP_REQ_URL}?key=${REDMINE_API_KEY}"

rval=$?
echo "result of curl: ${rval}"
if [ ${rval} -ne 0 ] ; then
	echo "error: curl command failed."
	exit 1
fi

echo "*********************"
echo " http_response_header.txt"
echo "*********************"
cat ${PATH_HTTP_RESPONSE_HEADER}
echo "*********************"

cat ${PATH_HTTP_RESPONSE_HEADER} | grep -e "${REGEX_HTTP_STATUS_LINE}"
rval=$?
if [ ${rval} -ne 0 ] ; then
	echo "error: no http status codes found."
	exit 1
fi
http_status_code=`cat ${PATH_HTTP_RESPONSE_HEADER} | grep -e "${REGEX_HTTP_STATUS_LINE}" | sed -e "s/${REGEX_HTTP_STATUS_LINE}/\1/"`
echo "http_status_code: ${http_status_code}"

echo "*********************"
echo " http_response_body.xml"
echo "*********************"
cat ${PATH_HTTP_RESPONSE_BODY}
echo "*********************"

echo "${http_status_code}" | grep -e "${REGEX_HTTP_STATUS_SUCCESS}" 
rval=$?
if [ ${rval} -eq 0 ] ; then
	echo "success: http_status_code is ${http_status_code}"
	rval=0
else
	echo "error: http_status_code is not 2XX"
	rval=1
fi

exit ${rval}

Create issue

ファイル名redmine_create_issue.sh
機能チケットの作成
使用方法redmine_create_issue.sh
使用例./redmine_create_issue.sh

まだ編集中!!

$ cat redmine_create_issue.sh 
#!/bin/sh

# redmine_list_project.sh
# プロジェクトの一覧を取得する

source redmine_system_oriented_variables.sh
source redmine_const_variables.sh

declare -i rval=0

HTTP_REQ_METHOD="POST"
HTTP_REQ_URL="issues.xml"

#USAGE=`cat << EOS
#usage: $0 <project_id> <tracker_id> "issue subject" "issue description"
#  example:
#  <project_id>: 1
#  <tracker_id>: 2
#  "issue subject": "ticket 3"
#EOS
#`
#if [ $# -lt 2 ]; then
#	echo "${USAGE}"
#	exit 1
#fi
USAGE="usage: $0 [-u|--url redmine_url] [-k|--key api_key] [-p|--project_id project_id] [-t|--tracker_id tracker_id] [-s|--subject \"issue subject\"] [-d|--description \"issue description\"]"


if [ $# -lt 6 ]; then
  echo >&2 $USAGE 
  exit 1
fi

OPT=`getopt -o u:k:p:t:s:d: -l url:,key:,project_id:,tracker_id:,subject:,description: -- $*`
if [ $? != 0 ]; then
  echo >&2 $USAGE 
  exit 1
fi
eval set -- $OPT
while [ -n "$1" ]; do
  case $1 in
    -u|--url) REDMINE_URL=$2 ; shift 2;;
    -k|--key) API_KEY=$2 ; shift 2;;
    -p|--project_id) PROJECT_ID=$2 ; shift 2;;
    -t|--tracker_id) TRACKER_ID=$2 ; shift 2;;
    -s|--subject) SUBJECT=$2 ; shift 2;;
    -d|--description) DESCRIPTION=$2 ; shift 2;;
    --) shift; break;;
    *) echo "Unknown option($1) used."; exit 1;;
  esac
done

if [ -z "$REDMINE_URL" ]; then
  echo >&2 $USAGE 
  exit 1
fi

if [ -z "$API_KEY" ]; then
  echo >&2 $USAGE 
  exit 1
fi

if [ -z "$PROJECT_ID" ]; then
  echo >&2 $USAGE
  exit 1
fi

if [ -z "$TRACKER_ID" ]; then
  echo >&2 $USAGE
  exit 1
fi

if [ -z "$SUBJECT" ]; then
  echo >&2 $USAGE
  exit 1
fi

if [ -z "$DESCRIPTION" ]; then
  echo >&2 $USAGE
  exit 1
fi


#OUTFILE=$(mktemp -t redmine_postIssue.XXXXXXXX)
OUTFILE="redmine_postIssue.txt"
echo "Temp file is:     $OUTFILE" >> $OUTFILE
echo "API Key is:     $API_KEY" >> $OUTFILE
echo "Redmine project name:  $PROJECT_ID" >> $OUTFILE
echo "Tracker id:  $TRACKER_ID" >> $OUTFILE
echo "Subject: $SUBJECT" >> $OUTFILE
echo "Description: $DESCRIPTION" >> $OUTFILE
echo "" >> $OUTFILE

echo "*********************"
echo "content in ${OUTFILE}"
echo "*********************"
cat ${OUTFILE}
echo "*********************"

#CURLTEMP=$(mktemp -t redmine_postIssue_curl.XXXXXXXX)
CURLTEMP="redmine_postIssue_curl.txt"

echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" >> $CURLTEMP
echo "<issue>" >> $CURLTEMP
echo "<project_id>${PROJECT_ID}</project_id>" >> $CURLTEMP
echo "<tracker_id>${TRACKER_ID}</tracker_id>" >> $CURLTEMP
echo "<subject>${SUBJECT}</subject>" >> $CURLTEMP
echo "<description>${DESCRIPTION}</description>" >> $CURLTEMP
echo "</issue>" >> $CURLTEMP

echo "*********************"
echo "content in ${CURLTEMP}"
echo "*********************"
cat ${CURLTEMP}
echo "*********************"

echo "curl -o result.xml -s -H \"Content-type: text/xml\" -X POST --data-binary \"@${CURLTEMP}\" \"${REDMINE_URL}/issues.xml?key=${API_KEY} > result\""

curl -o result.xml -s -H "Content-type: text/xml" -X POST --data-binary "@${CURLTEMP}" "${REDMINE_URL}/issues.xml?key=${API_KEY} > result"
rval=$?
echo "result of curl: ${rval}"

echo "*********************"
echo "content in result.xml"
echo "*********************"
cat result.xml
echo "*********************"


exit ${rval}

ISSUE_ID=`perl -ne 'if(/<issue><id>([0-9]+)<\/id>/) { print $1; } ' result.xml`

if [ -z "$ISSUE_ID" ]; then
  echo >&2 "Issue creation task was failed. Please refere Redmine's log file."
  exit 1
fi

echo "Issue Created / #$ISSUE_ID"
echo "Issue URL / $REDMINE_URL/issues/$ISSUE_ID"

### Clean up our temp files and we're done.

rm result.xml
rm $CURLTEMP
rm $OUTFILE

ここからつづき


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS