mallowlabsの備忘録 このページをアンテナに追加 RSSフィード

2016-03-10

Maven 3 + cobertura-maven-plugin 2.7 で mvn site すると jar/war が壊れる件

環境

現象

Maven 3 と cobertura-maven-plugin 2.7 の組み合わせで mvn site をすると、生成される jar/war に Cobertura の instrument が混入したままパッケージが作られてしまう。
mvn package だけすると問題がないが、一つのコマンドラインで mvn package site のように同時にやってしまうと jar/war が壊れる。
Maven 2 を使っている場合には問題が無い。

原因

cobertura-maven-plugin 2.7 から integration-test フェーズでも実行されるように変更された。
この結果、mvn site でも package フェーズが実行されてしまうようになった。
Maven2 は integration-test フェーズが無いため問題がない。

対策

Mojo’s Maven plugin for Cobertura – Usage に書いてある通り。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>cobertura-maven-plugin</artifactId>
  <version>2.7</version>
  <reportSets>
    <reportSet>
      <reports>
        <report>cobertura</report>
      </reports>
    </reportSet>
  </reportSets>
  <configuration>
    <inputEncoding>UTF-8</inputEncoding>
    <outputEncoding>UTF-8</outputEncoding>
    <formats>
      <format>xml</format>
      <format>html</format>
    </formats>
  </configuration>
</plugin>

のように reportSets を書くこと。これで site ゴールで Cobertura が走らなくなって、jar/war に instrument が混入することはなくなる。

まとめ

cobertura-maven-plugin 2.7 最高!

2015-08-29

Ruboty でカレンダーの予定をアラートするプラグイン「ruboty-calendar_alert」作った

ruboty-cron を使って、チャットに予定をアラートしてたんだけど、予定の登録がダルくなったので作った。

GitHub - mallowlabs/ruboty-calendar_alert: Mount alerting system to Ruboty to notify calendar schedules with iCal urls.

iCal (.ics) の URL を Ruboty に教えてあげると、定期的にフェッチして、予定の10分前になったら教えてくれるようになった。

使い方

Gemfile に以下のように記述する

# Gemfile
gem 'ruboty-calendar_alert', github: 'mallowlabs/ruboty-calendar_alert'

あとは Ruboty に iCalURL を教えてあげる。

@ruboty add calendar <ics_url>

そうすると予定の10分前にチャットに通知される。
フェッチは

  • 02:23
  • 08:23
  • 14:23
  • 20:23

に実行されるので、あんまり最近に登録された予定についてはアラートされないかもしれない。

f:id:mallowlabs:20150829210304p:image

こんな感じで仕事中でもアニメの一挙放送の開始に気づけて本当に便利です。

まとめ

キルラキル最高!

2015-08-28

h2o + supervisord で Munin を HTTP/2 でサーブさせてみた

YAPC::Asia Tokyo 2015HTTP/2 の話を聞いて意識が高まったので Munin を h2o でサーブするようにしてみた記録。
リバースプロキシではなく、h2o 自身にサーブさせている。

環境

  • CentOS release 6.5 (Final)
  • h2o Rev.af7413a0ec
  • Supervisord 2.1

h2o

インストール
yum install cmake
yum downgrade libyaml
yum install libyaml-devel

cd /usr/local/src
git clone https://github.com/kazuho/h2o.git
cd h2o
git submodule update --init --recursive
cmake .
make h2o

make install
設定
# cat /usr/local/share/h2o/h2o.conf
hosts:
  "munin.example.com":
    listen:
      port: 443
      ssl:
        certificate-file: /etc/httpd/certs/your.crt
        key-file:         /etc/httpd/certs/your.pem
      host: 0.0.0.0
    paths:
      "/":
        file.dir: /var/www/html/munin

access-log: /var/log/h2o-access.log
error-log: /var/log/h2o-error.log

Supervisord

インストール
yum --enablerepo=epel install -y supervisor
設定
# cat /etc/supervisord.conf
[supervisord]

[program:h2o]
command=/usr/local/bin/h2o -c /usr/local/share/h2o/h2o.conf
autorestart=true

所感

めっちゃ表示速くなった。
画像が一気に表示されるので非常に気持ちいい。

Chromeネットワークタブを見るとこんな感じ。
f:id:mallowlabs:20150828213001p:image

ただ、IE11 でページが表示されないことがあったので、今すぐ本番導入という感じではないかも?

まとめ

HTTP/2 と h2o 最高!

2015-07-29

Kibana4 + Elasticsearch で not_analyzed 指定を忘れた時にやったこと

Elasticsearch をそのまま使うと string フィールドがトークナイズされてしまうので、ユーザーエージェント等スペースを含むフィールドのグラフが意図通り出ない問題に対処した。

真面目にやるなら elasticsearchでダウンタイムなしでインデックスのマッピングを切り替える - Qiita の方法がいいんだけど、Ruby が必要だったり、エイリアスを作ったりしなければならないので、もっと不真面目にやった時の記録。

環境

やったこと

まずは、今後作成される全ての string のフィールドを not_analyzed にする。

curl -XPOST localhost:9200/_template/strig_not_analyzed_template -d '{
  "template": "*",
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "string_template": {
            "mapping": {
              "index": "not_analyzed",
              "type": "string"
            },
            "match_mapping_type": "string",
            "match": "*"
          }
        }
      ]
    }
  }
}'

この後、9:00 JST まで待って次の日のインデックスが作成されるのを待つ。

Elasticsearch Reindexingインストールする。

$ES_HOME/bin/plugin --install org.codelibs/elasticsearch-reindexing/1.4.2
service elasticsearch restart

Elasticsearch Reindexing 1.4.2 は Elasticsearch 1.6.0 でも動いた。

あとは、古いインデックスを一旦新しいインデックスに reindex して、また元に戻すというのを繰り返す。
最新のインデックスは、ログの流し込みが行われているはずなので、除外しておく。
雑なスクリプトでも動けばいいじゃない。

for index_name in access-2015.06.27 access-2015.06.28 access-2015.06.29 access-2015.06.30 access-2015.07.01; do
  curl -XPOST localhost:9200/${index_name}/_reindex/${index_name}_new/?wait_for_completion=true
  curl -XDELETE localhost:9200/${index_name}
  curl -XPOST localhost:9200/${index_name}_new/_reindex/${index_name}/?wait_for_completion=true
  curl -XDELETE localhost:9200/${index_name}_new
done

これで、全てのインデックスの string フィールドは not_analyzed になる。

まとめ

Elasticsearch Reindexing 最高!

2015-06-09

Jenkins でのブランチの自動ビルドに Multi-Branch Project Plugin が便利

環境

Multi-Branch Project Plugin

GitHub を使っていないプロジェクトで、ブランチが増えたり減ったりする場合に、
そのブランチを自動で Jenkins のビルドジョブにしたい。
そのような場合に Multi-Branch Project Plugin が便利だったので紹介。

Multi-Branch Project Plugin をインストールすると新規ジョブの画面に「Freestyle multi-branch project」というジョブタイプが追加される。
このジョブタイプを選択すると、それぞれのブランチがサブジョブとして追加される。

f:id:mallowlabs:20150609201520p:image

メインのジョブは /job/my-project/ という URL になり、ブランチのジョブは /job/my-project/branch/my-branch/ というような URL にそれぞれ割り当てられる。
当然、通常のプロジェクトにできる操作は、ブランチジョブに対してもできる。

f:id:mallowlabs:20150609201747p:image

また、メインジョブでビルド設定を変更すると、サブジョブのビルド設定も変更される。
一応、サブジョブ単位でもビルド設定が変更できるが、わかりにくくなるため変更しない方が良い。

プッシュのタイミングでブランチを同期する

プッシュと同時にブランチを同期するために、Git リポジトリの post-recieve に以下のような設定をする。

curl -XPOST -u jenkins:apikey "https://your.jenkins.host/job/my-project/syncBranches" > /dev/null 2>&1
while read oldrev newrev refname; do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    curl -XPOST -u jenkins:apikey "https://your.jenkins.host/job/my-project/branch/${branch}/build" > /dev/null 2>&1
done

また、メインジョブの設定で以下のように設定する。

  • Sync Branches Schedule を 空 にする
  • Git の「高度な設定」から Exclude branches にビルドしないブランチの命名規則を指定する。指定方法は ワイルドカードのスペース区切り らしい。

f:id:mallowlabs:20150609201953p:image

これで、新しいブランチをプッシュすると、Jenkins にビルドジョブが追加されてビルドされる。

まとめ

Jenkins Multi-Branch Project Plugin 最高!