"Trigger builds remotely"を選んで適当なTOKENを設定する。
Githubの"Post-Recieve URLs"にそのURLを設定する。
http://example.com/job/PROJECT_NAME/build?token=TOKEN
追記:
Github Pluginを0.5にアップしたらチェックボックスが出現してもっと簡単になりました!
追記2:
と思ったら上手くいってませんでした。何がどう動いてるのが理解出来てない感じ・・・
verifyと出るけどgithubにpushしてもbuildされない状態。以前のやり方に戻そうかな?
DTermからGUIアプリを立ち上げるには$ open -a /Applications/Safari.appとかする必要があって面倒なので~/.macappにそれぞれのアプリをopenするスクリプトを作るスクリプトを書いてみた。
#!/usr/bin/env ruby
require 'fileutils'
def e(path) path.gsub(/[ ()]/) {|s| "\\#{s}"} end
FileUtils.rm_rf("#{ENV['HOME']}/.macapp")
FileUtils.mkdir("#{ENV['HOME']}/.macapp")
Dir.glob('/Applications/{,Utilities/}*.app') do |path|
script = "#{ENV['HOME']}/.macapp/#{path.split('/').last}"
open(script, 'w') {|f| f.write(<<-EOS) }
#!/bin/sh
open -a #{e(path)}
EOS
FileUtils.chmod(0755, script)
end
Make symlink from Mac GUI Apps. — Gist
~/.macappにPATHを通せば$ Safari.appみたいな感じで立ち上がるようになる。(DTerm等のGUIの場合は/etc/launchd.confに書く必要がある)
理想のランチャー道は遠いな・・・。
ちゃんと書く場合はleiningenでproject作った方が楽だけど、手元で手軽にclojureしたい場合の為にsystem-wideにインストールする。
$ brew install clojure-contrib
# ~/.zshrc
export CLASSPATH=$CLASSPATH:/Users/komagata/homebrew/Cellar/clojure-contrib/1.2.0/clojure-contrib.jar
clojureも依存で入る。バージョンは2011/06/25現在だと1.2.0。ついでにちょっとした起動スクリプトもcljって名前で入れてくれる。
% clj
Clojure 1.2.0
user=> (+ 1 2 3)
6
引数無しだとreplが立ち上がる。
;; unk.clj
(println "unk")
% clj unk.clj
unk
スクリプトを渡せば実行される。
clojure.mainが標準入力からスクリプトを受け取れれば
#!clj
(println "unk")
って書けそうだけど、無理。
;; project.clj
(defproject bar "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]]
:main bar.core)
:mainでnamespaceを指定しておくと$ lein run -m bar.coreみたいにイチイチ指定しなくていい。
;; src/bar/core.clj
(ns bar.core
(:gen-class))
(defn -main []
(println "unk"))
スタンドアローンで実行できるjarを作るには:gen-classの指定と-main関数が必要。
まずそのまま実行してみる。
% lein run
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
unk
(このJAVAのOPTIONがイチイチ表示されるの何とかならないかな・・・)
% lein uberjar
ドイツ人の@mreinschさんによるとuberとはbeyondとかaboveの意味だそうです。(それでもよく分からないけど)
bar-1.0.0-SNAPSHOT-standalone.jarとbar-1.0.0-SNAPSHOT.jarが出来ていました。jar tvfで中身を見てみると、無印の方はこのプロジェクトのモノだけ。-standaloneの方は依存jar(clojure自身を含む)が全部入ったやつみたいです。
% java -jar bar-1.0.0-SNAPSHOT-standalone.jar
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
unk
OMG!
Windows XPに持って行って実行してみると・・・
(^q^)
HerokuのCedar StackはClojureに対応してる。要はLeiningenに対応してる。(RubyのBundlerに対応してるのと同じようなもん)
project.cljを見て必要なもんをpush時にインストールしてくれる。
;; lib/unk/core.clj
(ns unk.core
(:use compojure.core
ring.adapter.jetty))
(defroutes app
(GET "/" _ "unk"))
(defn -main []
(let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))]
(run-jetty app {:port port})))
;; project.clj
(defproject unk "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]
[compojure "0.6.3"]
[ring/ring-jetty-adapter "0.3.8"]])
# Procfile:
web: lein run -m unk.core
$ heroku apps:create --stack cedar
$ git push heroku master
$ heroku apps:open
OMG!
環境変数$PORTを使う必要がある部分でちょっと躓きました。
Herokuの新しいCedar Stackを使う。
今までと大きく違うのはforemanを使ったprocess modelが導入されたこと。要はwebアプリもcronジョブもバックグラウンドタスクもみんな宇宙船UNIX号の仲間たち、foremanで平等に扱おうよということ。具体的にはProcfileにprocessの設定を書いてforeman経由で動かす。
# Gemfile:
source :rubygems
gem 'rack'
# config.ru:
require 'rubygems'
require 'rack'
class App
def call(env)
[200, {'Content-Type' => 'text/plain'}, ['hello']]
end
end
run App.new
# Procfile:
web: bundle exec rackup -p $PORT
こんな感じ。
$ gem install foreman
$ foreman start
ローカルでもforemanで試せる。
$ heroku apps:create --stack cedar
$ git push heroku master
$ heroku apps:open
いいね!
process typeを自分で定義する
unixのprocessなら何でもありなので適当に定義できる。
# Procfile:
web: bundle exec rackup -p $PORT
unk: echo unk; sleep 1000
% foreman start
02:23:42 web.1 | started with pid 77070
02:23:42 unk.1 | started with pid 77071
02:23:42 unk.1 | unk
02:23:43 web.1 | [2011-06-23 02:23:43] INFO WEBrick 1.3.1
02:23:43 web.1 | [2011-06-23 02:23:43] INFO ruby 1.8.7 (2011-02-18) [i686-darwin10.7.0]
02:23:43 web.1 | [2011-06-23 02:23:43] INFO WEBrick::HTTPServer#start: pid=77072 port=5000
こいつは自由だぜ。
clojureのweb framework。
(ns foo.core
(:use compojure.core))
(defroutes app
(GET "/" _ "foo"))
(defproject foo "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]
[compojure "0.6.3"]]
:dev-dependencies [[lein-ring "0.4.3"]]
:ring {:handler foo.core/app})
$ lein ring server
lein-ringで前回書いてた問題は解決。
ringはrubyでいえばrack。
(ns unk.core
(:use ring.adapter.jetty))
(defn app [req]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "unk"})
(defn -main []
(run-jetty app {:port 3000}))
$ lein run -m unk.core
2011-06-19 14:43:10.189:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2011-06-19 14:43:10.191:INFO::jetty-6.1.26
2011-06-19 14:43:10.265:INFO::Started SocketConnector@0.0.0.0:3000
OMG!
ring.util.responseを使えばもうちょっと楽に書ける。
(ns unk.core
(:use ring.util.response
ring.adapter.jetty))
(defn app [req]
(response "unk"))
(defn -main []
(run-jetty app {:port 3000}))
run-jettyの部分がserver依存なので切り離す必要があると思う。どうやるのが普通なんだろう?
clojars.orgを検索した感じだとring server(紛らわしい名前だな)としてadapterがあって使えるそうなのはjetty, mongrel2, httpcoreぐらい。
$ sudo apt-get install ethtool
$ sudo ethtool -K eth0 tso off
永続的に使いたい場合は/etc/network/interfaceの末尾に下記を追記。
post-up /sbin/ethtool -K eth0 tso off
参照:[001388]さくらのVPSで「Debian」を利用していますが、回線速度が遅くアクセスに時間がかかります。 | FAQ Search - さくらインターネット

![Lokka Config [Jenkins]](http://farm6.static.flickr.com/5305/5884791918_ea7d705312.jpg)
![Lokka Config [Jenkins]](http://farm7.static.flickr.com/6049/5893140531_7972e37655.jpg)
![Configure System [Jenkins]](http://farm6.static.flickr.com/5196/5893853169_fb885ef250.jpg)

![windows_xp_ie6 [Running]](http://farm6.static.flickr.com/5120/5865779995_2f2c7ffd68.jpg)



