はじめに
- 整理出来てないけど
- コピペの為とかに書いておく
Jenkins
Jenkins
の API
を使って 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 の連携する方法
シェルスクリプト
拡張子を取り除くワンライナー
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")
最後に
- あまり偏らず...なんでも...