CentOS7のPostgreSQL9.2で全文検索

PostgreSQLの全文検索でLudia, textsearch_sennaを使っていたのですが、9.2ではどちらも使えないので、代替となりそうなものを探した結果、pg_trgm, pg_bigm, textsearch_jaの三つが使えそうでした。
ただpg_trgmは日本語を使うにはソースからのコンパイルが必要で、しかも二文字以下は使えないのでパスしました。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

何故 git rebase は駄目で git pull –rebase はいいのか

git pull –rebase は便利ですが、rebase と言えば git rebase、これが割と敬遠されがちな声を聞くので –rebase オプションなんて本当に使っていいのか心配になることもあるかと思います。

私も普段は便利に git pull –rebase していますが、ふと git rebase の解説記事をみかけると毎度不安になりこの二つの仕組みを調べてしまうので、いっそのことまとめてしまうことにしました。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

実行されたJenkinsFileはReplayから確認できる

muraveです。

なうなやんぐなのでPipelineでJenkinsFileを使ってビルドについてもソースコード管理したいわけですが、他チームのJenkinsFileを参考にしたいときにJenkins上から内容が確認できないと、お願いしてJenkinsfileを送ってもらうという悲しいことになったり(実際に発生)。

Jenkins上から確認できるように出来ないものかとプラグインを探したり、ファイルは残っていたのでそれを参照できるようにできないかいろいろ試したりしていました。

しかし、そんな事をしなくても内容をみることができる方法がみつかったのでした。

まぁ、答えはタイトルに書いちゃってますが、こんなん予想できませんわー。

一部マスクしますが、キャプチャを貼っておきますね。

cursor_%e3%81%a8_replay__26__jenkins_

スクリプトを参照する場合は間違ってRunしないように注意ですね。

Facebooktwitterlinkedintumblrmail

JenkinsのwithCredentialsでユーザー名とパスワードを扱えるのかを確認したいだけだった

muraveです。

なうなやんぐはPipelineでJenkinsFileを使ってビルドについてもソースコード管理ですよねー、ということで試してみているんですが、ユーザー名やパスワードをJenkinsFile内に書くわけにはいかないわけで。

方法を探してみたところ withCredentials でどうにか出来そうでした。

Fetch a userid and password from a Credential object in a Pipeline job.

ここを見ながらザックリと Pipeline script なジョブを作成して動作を確認しようとしたところ、少々ハマリました。

テスト用にユーザー名test、パスワードpassword、credentialsIdがtestの認証情報を作成しています。

node {
    stage 'withCredentials Test'
    withCredentials([[$class: 'UsernamePasswordMultiBinding', 
            credentialsId: 'test',
            usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {

        sh 'echo uname=$USERNAME pwd=$PASSWORD'
    }
}

これを実行したログを確認すると

[credential_****] Running shell script
+ echo uname=**** pwd=****

みたいな表示。うーん。何か権限的に引っかかってるのか、表示が潰されているだけなのかがわかりません。

結論を先に言うとユーザー名、パスワードについて表示を****で潰すようになっているようです。
あとで気づいたのですが[credential_****]のところもジョブ名がcredential_testなのでユーザー名であるtestが潰されているのでした。

ではユーザー名、パスワードが本当に取れているのかをどのように確認したのか?ですが次のような Pipeline script を作成しました。

node {
    stage 'withCredentials Test'
    def uname   //withCredentials外にUSERNAMEを持ち出す為に使用
    withCredentials([[$class: 'UsernamePasswordMultiBinding', 
            credentialsId: 'test',
            usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {

        sh 'echo uname=$USERNAME pwd=$PASSWORD > idpw.txt'
        sh 'pwd'    //ワークスペースの位置確認をしたかったのだが、しかし

        println(env.USERNAME)   //groovyでの扱い
        uname = env.USERNAME    //withCredentials外にUSERNAMEを持ち出す
    }

    stage 'withCredentialsの外で出力'
    println(uname)

    stage 'ワークスペースの位置確認'
    sh 'pwd'
}

実際に行ったのはidpw.txtファイルにリダイレクトして内容を確認でしたが、その際の謎動作の説明のための処理や、その後にログ上で確認できないかな?と思ってやってみたことも混ぜてあります。

ログから抜粋してまとめると以下のようになります。

Entering stage withCredentials Test
Proceeding

[credential_****] Running shell script
+ echo uname=**** pwd=****

[credential_****] Running shell script
+ pwd
/var/jenkins_home/workspace/credential_****

****


Entering stage withCredentialsの外で出力
Proceeding
test


Entering stage ワークスペースの位置確認
Proceeding
[credential_test] Running shell script
+ pwd
/var/jenkins_home/workspace/credential_test

idpw.txtの位置が知りたくてpwdしているのですがwithCredentialsのブロック内で実行すると

[credential_****] Running shell script
+ pwd
/var/jenkins_home/workspace/credential_****

と、ユーザー名のtestと同じだったために一部マスキングされてしまっています。まぁ、大体の位置は予想がついたのでidpw.txtを探して内容確認はできたわけですが(ちゃんとユーザー名、パスワードが出力されていました)。

最後にブロック外でpwdしてみるとちゃんと

Entering stage ワークスペースの位置確認
Proceeding
[credential_test] Running shell script
+ pwd
/var/jenkins_home/workspace/credential_test

と出力されているのがわかります。

ログだけでの動作確認ですがブロック外ならマスキングされないのがわかったのでuname変数を定義して外に持ちだしてやればいいかな〜と

Entering stage withCredentialsの外で出力
Proceeding
test

やはりマスキングされずに出力されました。動作の確認はできましたが、これは通常はやってはいけないパターンですね。

以上です。

Facebooktwitterlinkedintumblrmail

Dockerのデータボリュームをバックアップ・リストア

現状試しているのはローカルストレージドライバでのデータボリュームの場合ですが、コンテナでバインドして扱うのが常道な感じです。

データ・ボリュームのバックアップ・修復・移行
http://docs.docker.jp/engine/userguide/dockervolumes.html#id9

に書いてあるやり方ですね。

jenkins-masterというコンテナの /var/jenkins_home をバックアップ・リストアする例をあげます。

バックアップ

$ docker run --rm -u root --volumes-from jenkins-master -v $(pwd):/backup alpine tar czvf /backup/alp.tar.gz -C /var jenkins_home

リストア

$ docker run --rm -u root --volumes-from jenkins-master -v $(pwd):/backup alpine sh -c "rm -rf /var/jenkins_home/* && cd /var && tar xzvf /backup/alp.tar.gz"

念のためユーザーにrootを指定し、Alpine Linuxで実行しています。バックアップ時、相対ディレクトリ指定のためtarの-Cオプションを使用しています。展開時はゴミファイルが残るのが嫌だったのでリストア対象ディレクトリ内を全て削除してから展開していますが、削除はしないほうが安全かもしれません。

以上です。

データボリュームコンテナについての蛇足
データ永続化のために別途データボリュームコンテナを作成している場合でもローカルストレージなデータボリュームを使用していれば同じこと、docker save や docker export でバックアップというわけにはいかないようです。残念。

Facebooktwitterlinkedintumblrmail

DockerのJenkinsコンテナでアクセスログについて悩んでいた

muraveです。

今年の4月にリリースされたJenkins 2系をDocker公式イメージ

OFFICIAL REPOSITORY jenkins

で試していたのですが、Webフックからキックしてのビルドを試していて大変ハマリました。Webフックからのアクセス状況とかどうなってんだ?などなどtcpdumpとか使って調べてたんですけど、アクセスログもあったほうがいいよね、と思ったのでした。

公式イメージのJenkinsさんってそのまま立ち上げたらアクセスログ出してくれないんですよね。

調べまして、JENKINS_OPTSに

--accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=ログファイルのパス

てな感じで設定すれば良いことはわかりました。分かりましたが、コンテナ内やボリュームにログファイルを出すのは違う気がします。docker logs で見ることができるログはどういう扱いなんでしょう?

デフォルト設定のロギング・ドライバのログ(JSON形式)はホストの

/var/lib/docker/containers/(コンテナID)/(コンテナID)-json.log

にあって、これが docker logs の表示元になっています。

問題はどうやったらここに出力されるのか?ですが、標準出力、標準エラー出力へ出力すれば良いそうです。例えば、Nginx公式イメージのDockerfileでは

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

と、/dev/stdout と /dev/stderr へのシンボリックリンクを作成することで対応しているようです。

Jenkinsさんの場合は先ほどのJENKINS_OPTSでログファイルのパス指定が可能でしたので

--accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/dev/stdout

と設定すると標準出力に出力されるようになり、コンテナのログにJenkinsさんへのアクセスログが記録されるようになりました。

これでDockerのロギング・ドライバでアクセスログも統一的にあつかえますね。
例えばFluentdロギング・ドライバに切り替えてログ集約するようにしたりする場合にも安心です。

Facebooktwitterlinkedintumblrmail

Docker for Mac の使用されていないデータボリュームを削除

murave@ファイルの権限絡みで -v オプションの事を調べていたら今日という日が終わりそう、です。

やりたいことは別にあったんですが、せっかく調べたのでメモを残しておきます。今回、結論は最後に書くので経緯とか読みたくない方は最後まで飛ばして下さい。

データボリュームっていうのは例えば、

$ docker run -v コンテナ上のディレクトリ名 busybox
$ docker volume create --name test-volume

などとすると、

$ docker volume ls                       
DRIVER              VOLUME NAME
local               17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414
local               test-volume

と言った感じでデータボリュームがホスト上に出来ます。
ランダム文字列な名前のほうは前記docker runのように名前未指定な場合によろしくやってくれてるわけです。問題なのが、コンテナを削除しても基本的にこれが残るってこと。

「開発用RDBをゲットだぜ」シリーズの調査中

$ docker rm -f $(docker ps -aq)

でバンバン動作しているコンテナを含めて全部削除しまくっていたのですが、datastoreのデータボリュームが残りまくっているってわけです。

消さねばならぬ。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

宿泊業向けセミナー「自社及び顧客理解に基づくマーケテイングの展開」を聞きました

どうも、ランカードコム(宿泊業支援機関IT系)のmuraveです。

こちら、長崎県内で宿泊業を営む事業者及び支援機関向け「長崎県宿泊業生産性向上促進セミナー」

http://www.pref.nagasaki.jp/object/event-koza/event/249247.html

のセミナーとしてはラストでマーケティングに関するセミナーです。
マーケティングといえば、以前のセミナーについての私の感想は

セミナー「宿泊業における顧客満足と効率性を両立させる方法」を聞きました
宿泊業生産性向上促進個別テーマセミナー(人材育成・IT)に参加しました

に書いたのですが、人材育成・ITセミナーレポートの最後に宿泊業のお手伝いをできそうな弊社サービスの紹介もありますのでよろしくお願いします(自然な流れでダイレクトマーケティングの再利用)。

今回もいいセミナーでした。
この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

Docker公式イメージで開発用RDBをゲットだぜ(MariaDB、Percona Server編)

まえがき

Docker公式イメージで開発用RDBをゲットだぜ(PostgreSQL編)
Docker公式イメージで開発用RDBをゲットだぜ(MySQL編)

に続き予定どおりMariaDB編をお送りします。一言で済むので結論を書くと

「公式イメージのページを読み比べたらMySQLと同じでした。ありがとうございます」

という内容です。ついでに

というわけでPercona Serverの公式イメージのページも見てみたらこれもMySQLの場合と同じ扱いでしたので含めてみましたよ。

Docker for Macを使用しております。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail

Docker公式イメージで開発用RDBをゲットだぜ(MySQL編)

まえがき

Docker公式イメージで開発用RDBをゲットだぜ(PostgreSQL編)

に続きMySQL編です。Docker for Macを使用しております。はじめるよ〜。

この投稿の続きを読む »

Facebooktwitterlinkedintumblrmail