#author("2018-05-14T23:35:50+09:00","","") #author("2018-05-16T00:32:41+09:00","","") #nofollow #norelated 総数:&counter(total); 今日:&counter(today); 昨日:&counter(yesterday); * もくじ [#jdfbcb90] #contents *準備 [#yc687361] 参考URL [[proxy設定(ubuntu:16.04)>https://qiita.com/cad/items/a6c69ab34f9f0b39dcb4]] **curl proxy設定 [#md05c42f] echo 'proxy = "http://[address]:[port]"' >> ~/.curlrc 参考URL [[Rest_api>http://www.redmine.org/projects/redmine/wiki/Rest_api]] *システム依存の変数定義 [#ref1e68a] |ファイル名|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" *定数定義 [#u490bce7] |ファイル名|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_REQUEST_BODY="http_request_body.xml" readonly PATH_HTTP_REQUEST_BODY="${DIR_TEMP}/${FILE_HTTP_REQUEST_BODY}" 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]" readonly MAX_ISSUES="100" *Listing projects [#dd9613a7] |ファイル名|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}\"" 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}&limit=${MAX_ISSUES}\"" 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}&limit=${MAX_ISSUES}" 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 [#mbf1dd2d] |ファイル名|redmine_create_issue.sh| |機能|チケットの作成| |使用方法| redmine_create_issue.sh | |使用例| ./redmine_create_issue.sh| まだ編集中!! $ cat redmine_create_issue.sh #!/bin/sh # redmine_create_issue.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> <subject> <description_filename> example: <project_id>: 1 <tracker_id>: 2 <subject>: "QE91 Urban FOTA動作確認 SRCSW" <description_filename>: description.txt EOS ` if [ $# -ne 4 ]; then echo "${USAGE}" exit 1 fi project_id="$1" # project_id の文字列長がゼロか if [ ${#project_id} -eq 0 ] ; then echo "error: no project_id is given." exit 1 fi # project_id は数字か echo "${project_id}" | grep -e "[0-9]\+" rval=$? if [ ${rval} -ne 0 ] ; then echo "error: project_id MUST be digit(s)" exit 1 fi tracker_id="$2" # tracker_id の文字列長がゼロか if [ ${#tracker_id} -eq 0 ] ; then echo "error: no tracker_id is given." exit 1 fi # tracker_id は数字か echo "${tracker_id}" | grep -e "[0-9]\+" rval=$? if [ ${rval} -ne 0 ] ; then echo "error: tracker_id MUST be digit(s)" exit 1 fi subject="$3" description_filename="$4" # description_filename というファイルが存在するか if [ ! -f ${description_filename} ] ; then echo "error: specified description file \"${description_filename}\" is not found." exit 1 fi # description_filename というファイルが空か declare -i file_size=0 file_size=`wc -c < ${description_filename}` echo "${description_filename} file_size: ${file_size}" if [ ${file_size} -lt 1 ] ; then echo "error: specified description file is empty." fi echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" > ${PATH_HTTP_REQUEST_BODY} echo "<issue>" >> ${PATH_HTTP_REQUEST_BODY} echo "<project_id>${project_id}</project_id>" >> ${PATH_HTTP_REQUEST_BODY} echo "<tracker_id>${tracker_id}</tracker_id>" >> ${PATH_HTTP_REQUEST_BODY} echo "<subject>${subject}</subject>" >> ${PATH_HTTP_REQUEST_BODY} echo "<description>" >> ${PATH_HTTP_REQUEST_BODY} cat ${description_filename} >> ${PATH_HTTP_REQUEST_BODY} echo "</description>" >> ${PATH_HTTP_REQUEST_BODY} echo "</issue>" >> ${PATH_HTTP_REQUEST_BODY} echo "*********************" echo "content in ${PATH_HTTP_REQUEST_BODY}" echo "*********************" cat ${PATH_HTTP_REQUEST_BODY} echo "*********************" echo "curl -o ${PATH_HTTP_RESPONSE_BODY} -H \"${HEADER_CONTENT_TYPE_TEXT_XML}\" -X ${HTTP_REQ_METHOD} --data-binary \"@${PATH_HTTP_REQUEST_BODY}\" \"${REDMINE_URL}/${HTTP_REQ_URL}?key=${REDMINE_API_KEY}\"" curl -o ${PATH_HTTP_RESPONSE_BODY} -H "${HEADER_CONTENT_TYPE_TEXT_XML}" -X ${HTTP_REQ_METHOD} --data-binary "@${PATH_HTTP_REQUEST_BODY}" "${REDMINE_URL}/${HTTP_REQ_URL}?key=${REDMINE_API_KEY}" rval=$? echo "result of curl: ${rval}" echo "*********************" echo "HTTP response in ${PATH_HTTP_RESPONSE_BODY}" echo "*********************" cat ${PATH_HTTP_RESPONSE_BODY} echo "*********************" exit ${rval} *Showing a project [#a3980d97] |ファイル名|redmine_show_a_project.sh| |機能|idまたはidentifierで指定されたプロジェクトを取得する| |使用方法| | |使用例| | $ cat redmine_show_a_project.sh #!/bin/bash # redmine_show_a_project.sh # idまたはidentifierで指定されたプロジェクトを取得する source redmine_system_oriented_variables.sh source redmine_const_variables.sh declare -i rval=0 USAGE=`cat << EOS usage: $0 <project_id>|<project_identifier> example: <project_id> : 76 <project_identifier>: some-project EOS ` if [ $# -ne 1 ]; then echo "${USAGE}" exit 1 fi project_id="$1" HTTP_REQ_METHOD="GET" HTTP_REQ_URL="projects/${project_id}.xml" 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}&limit=${MAX_ISSUES}\"" 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}&limit=${MAX_ISSUES}" 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} * ここからつづき [#x5b97480]