はじめに
- 整理出来てないけど
- コピペの為とかに書いておく
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")
最後に
- あまり偏らず...なんでも...