Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)

480 views

Published on

Python-Redmineを利用し、Redmine本家とunofficialcookingのコピー+投票サイトを作成した事例

Published in: Software
  • Be the first to comment

  • Be the first to like this

Redmine本家コピー+投票サイト作成(Python-Redmine利用事例)

  1. 1. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 1 Redmine本家コピー +投票サイト作成 (Python-Redmine利用事例) 2018/11/10 redmine.tokyo 第15回勉強会 @y503unavailable
  2. 2. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 2 Agenda • 自己紹介 1. 背景/目的 2. 作ってみた 3. レシピ(作成手順) 4. 何事も思い通りにはいかない 5. まとめ
  3. 3. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 3 自己紹介 名前:奈良 裕記 ( y503unavailable <- httpエラーコード503) • 製造業で製品開発部門のadminやってます。 – 部門サーバ、LAN、PC、全般の構築/運用/子守 (全社単位の情報システムとは別、部門所属) • Redmine歴 – 2009年から利用 – 部内SaaSの積りで各種運用中 – Redmine.Tokyoには第4回から参加、現在スタッフ – サーバ統合事例@第7回勉強会 Redmineカスタムフィールド表示改善@第10回勉強会 UnofficlaRedmineCookingの紹介@第11回勉強会 UnofficlaRedmineCookingの紹介とRedmine本家への貢献@第12回勉強会 UnofficialCookingの1年-闇鍋とデモサイトへの発展@第13回勉強会
  4. 4. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 4 1.背景/要求レベルは高度化する • 利用範囲増加→要求レベル上昇、複雑化 – Redmine内のデータの活用、作業の効率化 – 例:複数Redmineサーバのデータを集計/連携 • 標準画面/Pluginでは実現困難に (固有ロジック組込み困難) →結果的にExcelなどの途中処理/作業手間が発生。 • 導入当初:通常の作業は Redmine本体/Pluginで十分可能
  5. 5. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 5 各自の機能追加変更への立場 • Redmine管理者 – 対応負荷増→管理者がボトルネック化も – 部門間の重要度判断差異、他人事 – (SEC/動作リスク面)Redmine内触らせたくない • エンドユーザ – 管理者にいちいち頼む必要 →利用モチベーション低下 →結果的に非効率な対応実施も ※各現場の業務組織/Redmine運用体制/人間関係に強く依存
  6. 6. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 6 必要なこと • Redmine自体に手を入れず、ユーザ自身が外から データを効率的に処理可能にする。 • 汎用言語で業務ロジックを利用可能にする。 • RESTAPIでどこまで出来るか、実際にやってみる。 • 必要なことは、最終的な利用価値を上げること – ユーザを巻き込み、適切な環境を作り維持する – 管理者に依存する作業を減らす。 (管理者のボトルネック回避、ユーザのオーナシップ) ※各現場の業務組織/Redmine運用体制/人間関係に強く依存
  7. 7. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 7 2.作ってみた • Python-Redmineを利用し、 複数Redmineからデータコピー (Redmine本家とUnofficialCooking(RedmineTokyo内情報蓄積サイト)) • Python以外に追加した機能 – Vote Pluginを導入 • ユーザのVoteで順位変動 – Tag Pluginを導入 • カテゴリと違い、複数項目選択可 – カテゴリのサブプロジェクト継承機能 • 複数PJのデータを、単独/集約し、単一カテゴリ分類可
  8. 8. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 8 できたもの • 画面紹介 – チケット画面、一覧画面、タグ選択表示 • 詳細はデモサイト参照 (百聞は一見に如かず) – http://150.95.132.208/redmine – ConnpassのID/受付番号でログイン可能 # 開催直近1週間に登録した人は未登録、 # id= redmine pass=tokyo でもログイン可能 – 11月中は稼働予定 • ソースはコメント含み200行未満
  9. 9. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 9 チケット画面(投票/タグ)
  10. 10. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 10 Redmineチケット一覧画面(親PJ)
  11. 11. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 11 タグ選択時の表示
  12. 12. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 12 3.レシピ(作成手順) 1. Redmine本体、Plugin導入 2. トラッカー、PJ階層、Ver/カテゴリ定義 3. Python-Redmine環境、スクリプト作成、 実行 4. 参加者登録、アクセス権設定、カスタム クエリ作成、カテゴリ/タグ設定 (UnofficialCooking分)
  13. 13. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 13 Redmineサイト作成、事前準備-1 • RedmineをVPS上にAnsibleでインストール – https://github.com/y503unavailable/redmine-centos-ansible – https://github.com/y503unavailable/redmine – サブプロジェクトのカテゴリ継承機能(標準 外)利用のため、改造版3.4利用(本家5358) • Vote pluginとTag pluginの導入 – https://github.com/ojde/redmine-vote_on_issues-plugin – https://github.com/ixti/redmine_tags
  14. 14. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 14 Redmineサイト作成、事前準備-2 • Voteトラッカーの準備 – 各項目をカスタムフィールドとして定義 – トラッカー作成、Role設定 • プロジェクト階層作成 – Redmine本家分とUnofficial分のサブPJ作成 • versionとissue_categoriesを設定 – Redmine本家とID合わせるため、今回はRESTではな くExcelでSQL作成し設定
  15. 15. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 15 Python-Redmine実行環境 • Redmineとは別のVPSに入れた • Python-Redmineをインストール – https://python-redmine.com/ • 転送用スクリプトを作成し実行 – 開発元と下記参考ページのコピペで開始。 https://qiita.com/mima_ita/items/1a939db423d8ee295c85 – 合計200行未満、 Pythonは実質初めて。 Rubyより楽に馴染めた。(主観)
  16. 16. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 16 Redmineサイト,Python転送後 • 勉強会参加者のID登録、グループ定義、PJメンバ 設定 – ユーザID/PASSは、connpassのID/受付番号利用 – ユーザ登録とグループ一括設定はツール利用 • https://yoshinorin.net/2017/04/16/create-redmine-user-import-from-csv/ • https://github.com/two-pack/redmine_auto_assign_group/wiki/Usage • カスタムクエリ作成 – vote,本家plus1,comment数,カテゴリ,タグ • UnofficialCooking部分のカテゴリとタグ設定 – カテゴリ分類は、Redmine本家に合わせた。 – 表示内容デモのため、一部を手動設定(結構大変)
  17. 17. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 17 4.何事も思い通りには行かないもの • チケット転送時のトラブル – 通信エラー対応 – 優先度の内部ID範囲変更 – AWS(Lightsail)のCPU性能制限 – 対象バージョン は一覧にありません • 多少は苦労しないと身に付かない。 • (初めてのPythonなので、デバッグは略)
  18. 18. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 18 通信エラー対応 • 数千件転送で通信エラー発生 • チケット情報読込中に発生。 • 定期的にSleep入れたが改善されず • 対策 • RESTで転送済最終チケット番号+1を指定し再開-不可 – 失敗例 http://www.redmine.org/issues.xml?status_id=*&sort=id&id=>%3D100 • 転送済件数+1から再実行処理を入れて対応 – 途中チケットの増減あると、重複/取りこぼし可能性有 – エラー処理が本筋だが、性能問題もあるので raise exceptions.ServerError redminelib.exceptions.ServerError: Redmine returned internal error, check Redmine logs for details
  19. 19. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 19 優先度の内部ID範囲変更 • Redmine2.1にて、優先度の内部IDが変更 された(3~7 → 1~5) – http://blog.redmine.jp/articles/issue-priority-css-class-changed/ – 旧IDの6(urgent)を転送した時に、有効範囲外 としてエラー発生する。 • 対策 issue.priority_id = issue_org.priority.id -2
  20. 20. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 20 AWS(Lightsail)のCPU性能制限 • 今回はPython実行環境用にVPS(AWS LightSail)を利用した。 • LightSail(1GB) は、高負荷状態が長時間継 続するとCPU性能を制限される(仕様) – 今回の連続転送処理では、1時間半の連続実 行で、25件/分→5件/分に落とされた。 • 対策→1時間半でインスタンス再作成 – 行儀悪いが数回なのでご勘弁。。でもCLIで自動化したいところ • CPU性能制限参考→ https://ryuzoji.com/archives/1450
  21. 21. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 21 「対象バージョン は一覧にありません」 • Redmine内部の整合性チェック違反 – チケットの対象バージョンに、既に完了した バージョンを設定するのはおかしい (画面上では選択肢に出てこない) • 対策:バージョンを未完了に戻す。 – sqlで versionのstatusをopenに変更 raise exceptions.ValidationError(', '.join(': '.join(e) if isinstance(e, list) else e for e in errors)) redminelib.exceptions.ValidationError: 対象バージョン は一覧にありません
  22. 22. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 22 5.まとめ python-redmineによりできたこと • Redmine外からPythonでRedmineを操作可能 – Redmine内部の変更不要(plugin,DB,Rails,Patch) – 落とし穴はもちろんある。 • 複雑な処理をユーザ側で容易に実行できる。 – 例:複数Redmine環境の集計、データ連携 – Redmine管理者の手間削減、ユーザ満足度向上、迅速 • Python以外にも多数言語用Redmineライブラリ – https://redmine.tokyo/issues/699 • 道具と事例を増やして楽しましょう
  23. 23. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 23 参考情報 • Python-redmine関連 – https://python-redmine.com/ – https://qiita.com/mima_ita/items/1a939db423d8ee295c85 • Unofficial Redmine Cooking (カスタマイズ情報用PJ) – Unofficial Redmine Cookingの紹介 – https://redmine.tokyo/projects/unofficialcooking – Redmine以外でのデータ表示/操作例 – カテゴリをサブプロジェクトで継承利用 – タグ機能を追加 – チケットの投票機能 • Redmine,Ansible カスタマイズ関連コード – https://github.com/y503unavailable/redmine-centos-ansible – https://github.com/histudy/ansible-role-redmine – https://github.com/y503unavailable/redmine • Redmine.Tokyo 過去講演一覧-プラグイン・カスタマイズ • Redmine Advent Calendar2018 (旬の情報として) – https://adventar.org/calendars/3352
  24. 24. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 24 御清聴ありがとうございました • 各自のRedmine運用に、多少なりとも役に立てば幸いで す。 • Redmineはオープンソースソフトです。 – 協力して育成&利用していきましょう。 ユーザ会はそのための場所です。 • ご意見、内容指摘の連絡先 redmine.Tokyo UnofficialCooking y503unavailable@ twitter, discord • ところで、ソース要りましたっけ..
  25. 25. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 25 UnofficialCookingのご紹介 • 第12回勉強会発表内容を抜粋し添付します。 – (本発表内容に関連し、利用者に有用と判断し たため) • https://www.slideshare.net/y503unavailable/unofficialcookingredmine • https://redmine.tokyo/projects/unofficialcooking
  26. 26. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 26 1.Redmineは単に無料で使えるソフト? 無料で使える、だけじゃない OSS(OpenSourceSoftware)だから ・改造して利用する自由 (ソース改造、プラグイン利用、、) ・パッチ提案する自由 (取り込まれれば将来のVerUp追随不要) ・共同で育てて利用していくソフトウェア Redmine本家とユーザ会はそのための場所 ・リーマンの第3法則 システムの進化はフィードバックプロセスにより決まる http://forza.cocolog-nifty.com/blog/2012/08/post-9619.html
  27. 27. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 27 2.標準機能から変更したい 同じ悩みを持つのは、 自分だけじゃない。 ・本家の残チケット検索-4500件、Groonga無し ・用途もニーズもユーザレベルも千差万別 ・改造にはスキルと内部構造の知識が必要 ユーザ会で情報共有! もっと効率的に利用
  28. 28. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 28 情報共有場所を作成し運用中 Unofficial Redmine Cooking https://redmine.tokyo/projects/unofficialcooking ・Redmine.TokyoのサブPJ ・チケットベースで情報共有 ・Since 2016/11 名前:多少のアングラ感と親しみ を持って貰えれば。 UndocumentedとかCracking のレベルではありません。 ・1年でチケット100件超えた。 ・参加者もっと増やしたい。 ・未解決案件有-識者アドバイス願
  29. 29. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 29 Unofficial Redmine Cooking守備範囲 オープンソースだから可能なこと 29 下記対応により出来ること ・Redmineソース改造 ・Redmine本家未取込パッチ ・プラグイン活用 ・DB直接操作 ・他ツールとの連携 機能要望(解決方法不明) 要は 標準外
  30. 30. 2018/11/10 第15回redmine.tokyo 勉強会 Redmine本家コピー+投票サイト作成(RedminePython利用事例) @y503unavailable 30 運用補足 ・記入内容は、概要紹介+リンクで可 項目:現象/要望、解決策、対応状況、補足 ・記入手順 https://redmine.tokyo/projects/unofficialcooking/wiki テンプレ埋めてください。 ・要望/質問の回答保証はありません。 ・正確性の保証もありません。 ・Redmine.Tokyoのユーザ登録要 名前は実名で無くとも可 手動登録なので登録完了までお待ちください。

×