# -*- coding: utf-8 -*- # redmine本家のチケット内容を、指定したRedmine上にコピーする。 # カスタムフィールド、 # +1,コメント数をカウントし、カスタムフィールドとして設定する。 # コメントはまとめて一つのカスタムフィールドに設定する。 # Python-Redmine ライブラリを利用している。 from redminelib import Redmine from redminelib.exceptions import ResourceNotFoundError from redminelib.exceptions import ServerError import datetime import time # 認証情報と共通定義は別ファイルから読み込む import authinfo redmine_org_url=authinfo.redmine_org_url redmine_copy_url=authinfo.redmine_copy_url # redmine_tokyo_url=authinfo.redmine_tokyo_url redmine_org_id =authinfo.redmine_org_id redmine_org_pass=authinfo.redmine_org_pass redmine_copy_key=authinfo.redmine_copy_key #redmine_tokyo_key=authinfo.redmine_tokyo_key redmine_org_pjname=authinfo.redmine_org_pjname redmine_copy_pjname=authinfo.redmine_copy_pjname vote_tracker_id=authinfo.vote_tracker_id # 関数を別ファイルに分けた import redmineorg_copy_sub # 一回で読込む最大チケット数 # コピー元サーバ負荷、処理中の削除/アクセス不可化も考慮し設定 limit_num=50 # 無限ループにならないようループ回数を設定した。 # 2018/12現在のredmineprgの件数からすれば十分(3万件、月200(即時削除多数)) max_loop_count=1000 offset_num=0 # 各redmineサーバに接続する redmine_org = Redmine(redmine_org_url, username=redmine_org_id, password=redmine_org_pass) redmine_copy = Redmine(redmine_copy_url , key=redmine_copy_key) # redmine_tokyo = Redmine(authinfo.redmine_tokyo_url, key=redmine_tokyo_key) # コピー先PJの現在のチケット数を確認し、offset=本PJのチケット数でコピー開始する。 # 再実行時は、この件数をオフセットとして処理を開始する。初回は0 # # 厳密に行う場合は、チケット削除時を考慮し、最終チケット番号のチェック必要 # redmine本家では、今から古いチケットの削除は行わないから、この処理で十分と思う。 issues= redmine_copy.issue.filter(project_id=redmine_copy_pjname,status_id='*') redmine_copy_issue_total=len(issues) print redmine_copy_issue_total offset_num=redmine_copy_issue_total for i in range(max_loop_count): issues= redmine_org.issue.filter(project_id=redmine_org_pjname,status_id='*',sort='id',offset=offset_num, limit=limit_num, include=['children', 'journals','watchers','relations']) # 読み込んだチケットの件数が0なら、コピー終了とみなして終了する。 issues_len=len(issues) if(issues_len==0): break for issue_org in issues: print issue_org.id redmineorg_copy_sub.issue_org_copy(issue_org,redmine_org,redmine_org_url,redmine_copy,redmine_copy_pjname,vote_tracker_id) # time.sleep(1) offset_num=offset_num+issues_len # コピー元サーバの負荷考慮しsleep time.sleep(10)