気づき #902
Updated by 奈良 裕記 almost 5 years ago
Redmine本家チケットのコピー/VoteCount集計 アドベントカレンダーの21日目です。 h1. 作成方法 h2. 事前準備 ・Redmine本家のアカウント作成(ID/PASSでログイン) ・転送先のサーバインスタンス作成(新規Redmineを強く推奨) ・以下は転送先サーバ上作業 ・Redmineをインストール。 ・管理者権限の作業用アカウント作成、REST-API有効化、APIキー作成 RESTによるWebサービスを有効にする ・Python-redmineをインストール(参考サイト) ・Python-redmineでRedmineにアクセスできることを確認 ・本チケット添付のファイルを展開 (redmineorg_copy.py , redmineorg_copy_sub.py , authinfo.py , presetting.py) (custom_fields.sql , custom_fields_trackers.sql,trackers.sql) --- h2. 認証情報の設定 authinfo.pyに、下記情報を設定して保存してください。 redmine_copy_urlは、IPアドレスではなく、逆引き可能なURLを記入してください <pre><code class="python"> redmine_org_id='redmine.orgのID' redmine_org_pass='redmine.orgのPASS' redmine_copy_key='転送先RedmineのAPI-KEY' redmine_copy_url='転送先RedmineのURL' </code></pre> --- h2. カスタムフィールド定義の設定 現在のRedmine REST-APIに追加機能はありません。 カスタムフィールド定義の手動作成は面倒だし、決め打ちにした方が転送作業も楽です。 →カスタムフィールド、トラッカー定義については、作成済サーバの定義内容をSQLで直接設定します。 注意! 下記登録を行うと、既存のカスタムフィールドとトラッカーの定義が上書きされます。 mysqlのログインID=redmine,PASS= pass-word1の場合の実行例 <pre><code class="sql"> mysql -u redmine -ppass-word1 redmine < custom_fields_trackers.sql mysql -u redmine -ppass-word1 redmine < custom_fields.sql mysql -u redmine -ppass-word1 redmine < trackers.sql mysql -u redmine -ppass-word1 redmine -e "ALTER TABLE custom_fields set is_for_all=1;" </code></pre> Redmineの管理画面から、カスタムフィールド、トラッカーが作成されていることを確認してください。 上のALTER TABLEの行はsql定義内容のパッチ修正です。気にせずまとめて実行してくださいw。 h2. カスタムフィールド定義のLONGTEXT設定 カスタムフィールドのテキスト定義はTEXT(len=2byte)であり、本家の一部チケットでオーバフローします。 下記手順によりLONGTEXTに変更してください。 (Description.Journalsは3.4.0で対応 #20217 ) <pre><code class="sql"> mysql -u redmine -ppass-word1 redmine -e "ALTER TABLE custom_values MODIFY value LONGTEXT;" </code></pre> 参考 Long text custom fields don't accept values longer than 64KB if backend database is MySQL http://www.redmine.org/issues/29209 オーバフロー発生するチケット https://www.redmine.org/issues/337 --- h2. Redmine本家のversion,issue_categoriesの転送 REST-APIで実施します。 ・転送先Redmineにプロジェクト作成(identifier=redmineorg-copy) ・Redmine本家のバージョン定義内容を読み出して、転送先Redmineに設定。 ・Redmine本家のカテゴリ定義内容を読み出して、転送先Redmineに設定。 注意! 下記登録を行うと、既存のバージョンととカテゴリ定義内容が上書きされます。 <pre><code class="python"> python ./presetting.py </code></pre> 転送先Redmineプロジェクトに、バージョンとカテゴリ定義が追加されていることを確認 補足 Redmine本家の定義番号と合わせるため下記実施。 ・最大の番号を取得し、ダミー定義作成。 ・Redmine本家の定義内容を参照し上書き。 (手抜きモードです。未定義分エラー回避のため、不要な項目をコメントアウト。本家削除済分ID残り) --- h2. Redmine本家のチケット転送 上記が成功している前提で実行 <pre><code class="python"> python ./redmine_org_copy.py </code></pre> 数千件実行するとException発生します。 上記を再度実行してください。 補足 再実行は、転送済チケット数を確認し、その番号から転送再開します。 途中のチケット削除/アクセス禁止があれば、ずれます。 (Redmine本家では実質的に問題ありませんが、普通の環境の場合にはチケット番号の確認必要です)