Redmine のバージョンが放置プレイ。リリースされてるのかされてないのか分からないチケット群。
通常はリリース時に状況確認するのだけど、最近はリリース作業から離れていたので Redmine との関わりが薄くなっていた。お任せ状態にしてメンテは特にせず。気がついたら荒れ放題。うるさい Redmine おじさんは必要で、こまめにフォローとメンテをしないとダメだなと再認識。
自分が居なくなったらどうなるんだろこれ・・・みんな便利さは感じているようなのだけど・・・まあいいや。
実際にはちょっと違うけど (固有の処理が入っているので)、以下のようなスクリプトを jenkins で定期的に実行することにした。
# スクリプトと同じディレクトリに config.yaml を置いておくこと # # 例) # url: http://xxx.xxx.xxx.xxx/redmine # api_key: abcedfgabcedfgabcedfgabcedfgabcedfgabcedfg # smtp: smtp.dummy.org # from: [email protected] # to: [email protected] # subject: "Redmine から出荷状況のお知らせ" # message: "直近 2 週間と過去の完了していないバージョンをお知らせします。" # require 'open-uri' require 'json' require 'uri' require 'date' require 'net/http' require 'net/smtp' require 'yaml' def issue_id(issue) issue['id'].to_s.ljust(5) end def status_name(issue) issue['status']['name'].ljust(6) end def author_name(issue) issue['assigned_to']['name'].ljust(11) end config_path = File.join(File.expand_path(File.dirname(__FILE__)), 'config.yaml') config = YAML.load(open(config_path, &:read)) src_url = config['url'] api_key = config['api_key'] url = URI.parse(src_url + '/projects/1/versions.json?key=' + api_key) json = JSON.parse(open(url, proxy: false).read) limit = (Time.now + 60 * 60 * 24 * 14).strftime("%Y-%m-%d") buf = [] for version in json['versions'].select{|v| v['due_date'] != nil}.sort_by {|v| v['due_date'] } next if version['status'] == 'closed' next if version['due_date'] == nil next if version['due_date'] > limit buf << '' buf << sprintf("■ %s - %s〆 : %s", version['name'], version['due_date'], version['description']) buf << '' url_format = "%s/issues.json?fixed_version_id=%s&status_id=*&key=" url = URI.parse(sprintf(url_format, src_url, version['id'], api_key)) json = JSON.parse(open(url, proxy: false).read) # 終了(5)が下に行くようにソート issues = json['issues'].sort do |a, b| if a['status']['id'] == 5 1 elsif b['status']['id'] == 5 -1 else a['status']['id'] <=> b['status']['id'] end end closed = false for issue in issues if issue['status']['id'] == 5 && !closed buf << " ---" closed = true end buf << sprintf(" #%s %s %s %s", issue_id(issue), status_name(issue), author_name(issue), issue['subject'] ) end end Net::SMTP.start(config['smtp'], 25) {|smtp| smtp.send_message(<<-EndOfMail, config['from'], config['to']) From: #{config['from']} To: #{config['to']} Subject: #{config['subject']} #{config['message']} #{buf.join("\n")} EndOfMail }
メールが飛んで来ると Redmine おじさん作業を始め、メンテしろよコメントを入れていく。2 週間程度でようやくスッキリ。満足した。