ようへいの日々精進XP

よかろうもん

雑多なメモ

はじめに

  • 整理出来てないけど
  • コピペの為とかに書いておく

Jenkins

JenkinsAPI を使って Web のコンソールを出来るだけ使わないようにする為のチートシート

Job をコピーして新規作成する

あらかじめコピー元の Job を作る必要があるけど。

JOB_NAME=
TEMPLATE=
curl -X POST -d "name=${JOB_NAME}&mode=copy&from=${TEMPLATE}" http://jenkins:8080/createItem

Job の最新のビルド結果を取得する

JSON で返ってくるのであとは jq 等使ってよしなに。

curl http://jenkins:8080/job/${JOB_NAME}/lastBuild/api/json?pretty=true

Jenkins に cron ジョブの結果を飛ばす場合

cron ジョブでスクリプト内で繰り返し処理をさせる場合、一回ごとの処理結果を先生*1に飛ばす場合には以下のようにする。

LOG=/tmp/xxx.log
JENKINS_URL="http://your_jenkins/jenkins"
JOB_NAME="your_job_name"
notify_jenkins(){
  RESULT=$?
  TEMP=$(mktemp -t notify_jenkins.XXXXXXXX)
  echo "<run><log encoding=\"hexBinary\">$(hexdump -v -e '1/1 "%02x"' $LOG)</log><result>${RESULT}</result><duration>${ELAPSED_MS}</duration></run>" > ${TEMP}
  wget -O /dev/null --quiet --post-file=${TEMP} \
  ${JENKINS_URL}/job/${JOB_NAME}/postBuildResult
  rm $TEMP
}

上の例はシェル関数。適当にシェルスクリプトに組み込んで使う。wget ではなくて curl を使った方が良いと思うけど。ポイントは...

echo "<run><log encoding=\"hexBinary\">$(hexdump -v -e '1/1 "%02x"' $LOG)</log><result>${RESULT}</result><duration>${ELAPSED_MS}</duration></run>" > ${TEMP}

ここの <log encoding=\"hexBinary\">$(hexdump -v -e '1/1 "%02x"' $LOG)</log><duration>${ELAPSED_MS}</duration>。ちゃんと書いておかないといつまでたっても先生*2は許してくれない*3

とりあえず、以下は curl ヴァージョン。

LOG=/tmp/job.log
JENKINS_URL="http://your_jenkins/jenkins"
JOB_NAME="your_job_name"

notify_jenkins(){
  RESULT=$?
  TEMP=$(mktemp -t notify_jenkins.XXXXXXXX)
  echo "<run><log encoding=\"hexBinary\">$(hexdump -v -e '1/1 "%02x"' $LOG)</log><result>${RESULT}</result><duration>${ELAPSED_MS}</duration></run>" > ${TEMP}
  curl -X POST -d @${TEMP} ${JENKINS_URL}/job/${JOB_NAME}/postBuildResult
  rm $TEMP
}

お手軽に Subversion と Jenkins の連携する方法

  • 正攻法*4でやると設定が面倒に感じる
  • hook-script でビルドの api を叩く
  • 制御は hook-script で頑張る
  • 後で詳細書く

シェルスクリプト

拡張子を取り除くワンライナー

ls -l * | awk '{print $9}' | sed -e 's/\.[^.]*$//g' | uniq

sensu

真実はログの中に...。

証明書がオカシイ時のログ

140032001316520:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE
140032001316520:error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib:ssl_rsa.c:729:
ruby: ssl.cpp:192: SslContext_t::SslContext_t(bool, const std::string&, const std::string&): Assertion `e > 0' failed.

対処は証明書を改めて作りなおす。

クライアントの名前が適切ではない

{"timestamp":"2014-01-24T22:49:44.441770+0000","level":"warn","message":"config file applied chan
ges","config_file":"/etc/sensu/conf.d/client.json","changes":{"client":[null,{"subscriptions":["s
ensu-test"],"name":null,"address":"xxx.xxx.xxx.xxx","safe_mode":false}]}}
{"timestamp":"2014-01-24T22:49:44.442125+0000","level":"fatal","message":"invalid settings","reas
on":"client must have a name and it cannot contain spaces or special characters"}

対処は puppet で設定を行っている場合には以下のように manifest を書き直す。

--- site.pp.original    2014-01-24 23:04:11.365495252 +0000
+++ site.pp     2014-01-24 23:04:16.805494991 +0000
@@ -7,6 +7,7 @@
     rabbitmq_ssl_cert_chain => "puppet:///mount_point/sensu/cert.pem",
     rabbitmq_host => '172.17.0.73',
     subscriptions => 'sensu-test',
+    client_name => 'test01'
   }
   package { 'nagios-plugins-basic': ensure => latest }
     sensu::check { "cron":

kibana

Lucene の検索クエリ

個人的に謎な Lucene の検索クエリを整理した。

記号(オペレータ※) 検索式の例 意味(挙動)
AND a AND b a と b どちらも含む
OR a OR b a 又は b どちらか又は両方含む
NOT a NOT b a を含むもののうち b を含まない
+ +a +b a と b どちらも含む
- a -b a を含むもののうち b を含まない
[ TO ] date:[20131201 TO 20131231] date フィールドが 2013/12/01 から 2013/12/31(開始と終了を含む)
{ TO } date:[20131201 TO 20131231] date フィールドが 2013/12/02 から 2013/12/30(開始と終了を含まない)
* 川* 「川原」、「河村龍一」、「川島昇」等を検索
? 川? 「川原」、「河村」、「川島」等を検索
~ ホゲ~ あいまい検索となり「ホゲフガ」等を検索
() (a NOT b) () 内を先に評価する
^ Apple0.5 Orange1.2 ^ 後に続けて数値を指定して検索ワードの重み付けを変える

検索クエリで path に含まれる id が N 又は M 又は X をマッチさせる

同じ結果でもいくつかのパターンで検索クエリが書けてしまったます...

path:("id\=N" OR "id\=M" OR "id\=X")

以下でもオケ。

path:("id\=N"|"id\=M"|"id\=X")

こっちでもオケ。

path:id\= AND ("N"|"M"|"X")

最後に

  • あまり偏らず...なんでも...

*1:Jenkins 先生のこと

*2:Jenkins 先生のこと

*3:fail する

*4:Subversion プラグインを使う