Git で Jenkins のバックアップをしてみる

先日突然会社で使ってる Jenkins が起動しなくなってしまいました。さすがにもう二度とそんな思いはしたくないので、バックアップを取ることにしました。
Backup Plugin - Jenkins - Jenkins Wiki を使ってもいいんですが、git 使えば差分バックアップになるし、好きな時点に戻せて素敵なんじゃないかと思って git を使ってバックアップを取ることにしてみました。

この記事はその時のメモみたいなものです。

リポジトリの作成

まずは git のリポジトリを作ります。せっかくなのでスクリプトコンソールを使ってみます。スクリプトコンソールを開いて、以下を実行します。

dir = System.properties["JENKINS_HOME"]
def git = { Object[] cmd ->
  println new ProcessBuilder(["git"] + cmd.toList() as String[]).directory(new File(dir)).start().text
}
git "init"
git "config", "user.name", "Jenkins Backup"
git "config", "user.email", "jenkins@${InetAddress.localHost.hostName}"
new File("${dir}/.gitignore").text = """\
*.log
*.log.?
*.log.??
jobs/*/workspace
jobs/*/builds
"""
git "add", "--all"
git "commit", "-m", "Initial commit"

これで /var/lib/jenkins に git のリポジトリができます。除外対象は workspace, builds とログファイルにしました。

バックアップの設定

次に Hudson環境のバックアップ - ふぞろいのGENGOたち を参考にして、Exclusive Execution Plugin を入れて backup job を作ります。job は以下のように設定します。

  • ビルドトリガ: 定期的に実行
    • スケジュール: @daily
  • ビルド環境:
    • ビルドを排他的に実行: ON
#!/bin/sh
cd $JENKINS_HOME
git add --all && git commit -m "$BUILD_TAG"
git gc

以上で準備完了です。あとはためしにビルド実行をしてみて、青くなればめでたしめでたしです。

直接 git を操作するとき

Jenkins をパッケージで入れている場合、多分Jenkins は jenkins ユーザのものになっていると思います。スクリプトコンソールで作ったリポジトリも jenkins ユーザーで作られているので、以下のように、sudo でユーザを指定してあげれば大丈夫だと思います。

sudo -u jenkins git ...

最後に

登録も自動化したければ jenkins-cli を使って groovy, install-plugin, create-job コマンドあたりを使えばできるはずです。
commit するだけではなくて、どこか別のサーバに push とかすれば、ミラーリングもできて完璧ですね。

Emacs23 の VC で svn1.7 を使えるようにしてみた

svn1.7 が去年の暮れくらいに出ました。多分目玉は WC-NG です。svn status とかがこれのおかげでかなり速くなりました。

そんな svn1.7 なんですが、Emacs23 の vc-svn が対応してません。Working Copy が別ものになってしまったので、うまく動いてくれないのです。Emacs24 なら対応してるんですが、まだメインで使ってるのは Emacs23 です。

というわけで Emacs23 の vc-svn を svn1.7 に対応させる vc-svn17.el を作ってみました。Emacs24 で使っても影響がないようになってます。

使い方は https://raw.github.com/buzztaiki/vc-svn17-el/master/vc-svn17.el から vc-svn17.el をインストールして、require するだけです。

svn1.7 を使っている奇特な人は使ってみてください。

Emacsをちょっとだけ自分色に染める (Emacs Advent Calendar jp: 2011)


この記事は Emacs Advent Calendar jp: 2011 : ATND の9日目です。遅くなってごめんなさい!
去年にひき続いて標準で少しEmacsを便利にする小技を。

Emacsを使ってて普段使ってるmodeにちょっとだけ色を足したいとか思うことはないですか?そんなときは font-lock-add-keywords を使えば好きな色を足すことができちゃいます。

使い方は簡単。例えばこんな風にすると

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)))

c-modeで「!」が赤くなります。数字にも色を付けて、hogeをキーワードの色にしたければこんな風に。

(font-lock-add-keywords
 'c-mode
 '(("!" . font-lock-warning-face)
   ("hoge" . font-lock-keyword-face)
   ("[0-9]+" . font-lock-constant-face)))

そうするとこうなります。

ただこの font-lock-add-keywords には弱点があって。間違った設定とかにしてしまうと、ハイライトを壊して元に戻せなくなってしまうのです。

というわけで、font-lock-user-keywords というものを作って使ってます。この子なら壊したときにも簡単に戻すことができるから安心です。

(defun font-lock-user-keywords (mode &optional keywords)
  "Add user highlighting to KEYWORDS to MODE.
See `font-lock-add-keywords' and `font-lock-defaults'."
  (unless mode
    (error "mode should be non-nil "))
  (font-lock-remove-keywords mode (get mode 'font-lock-user-keywords))
  (font-lock-add-keywords mode keywords)
  (put mode 'font-lock-user-keywords keywords))

設定するときは font-lock-add-keywords と同じように使うだけ。リセットするときは (font-lock-user-keywords 'c-mode) として呼んであげれば元に戻ってくれます。ただ、font-lock-add-keywords で足したものは戻らないのでそこは注意して使ってくださいね。

明日は [twitter:@ta2_o2p] さんです。それでは。

ArielとAmazon

「Ariel Advent Calendar 2011」2日目です。昨日は [twitter:@kiris] の 「ありえるえりあ勉強会の開き方 | ありえるえりあ」 でした。Emacs番長とか書いてあったけど、よく意味がわからないです。

最近すごいことに気づきました。
ArielとAmazonのロゴってそっくりです。

これがAriel

これがAmazon

ならべてみます。そっくりですね!

このへんがそっくりです!

入れ替えても全然違和感ないですね。

両方ともAの字が入ってるのもポイント高いと思います。
あとNikeあたりとも似てるきがしてます。NikeとはEの字が一致してるのもいいですね。けどまだ試してません。だれか試してください。

明日ははてなの [twitter:@nitro_idiot] が何か書いてくれるそうです。

anythingで正規表現のかわりにglobを使えるようにする

anything便利ですよね。でもマッチさせるパターンが正規表現って使いにくくないですか?僕は使ってたたまにイラっとします。".java"っていれたら"/java"がひっかかるとか。

この手のツールでマッチさせるときはやっぱり正規表現じゃなくてglobの方が便利だと思うんですよ。というわけでglobに対応させるamp-glob.elを書いてみました。要 anytyhing-match-plugin です。

導入は簡単。まずは「M-x auto-install-from-gist 792217」で amp-glob.el をインストールします。そしたら以下を .emacs.el に書いておきます。

(require 'amp-glob)
(amp-glob-mode 1)

あとは普通に anything を使うだけです。特に何も考えなくても、大体思ったとおりにマッチさせられるんじゃないかと思います。