ウェブサービスを作っています。

git push されたら Jenkins でビルドする

まず、Jenkins を叩くスクリプトを ~/git/jenkins.rb などに置きます。

require 'net/http'
require 'uri'
Net::HTTP.version_1_2

unless ARGV[0]
  puts 'usage: ruby jenkins.rb [JOB_NAME]'
  exit 1
end

user = "(Jenkins ユーザーID)"
api_token = "(ユーザの API トークン。Jenkins の、ユーザ設定ページに載っています)"
uri = URI("http://JENKINS_HOST/job/#{ ARGV[0] }/build")  # ARGV[0] に job 名が渡ってきます

Net::HTTP.start(uri.host, uri.port) do |http|
  req = Net::HTTP::Get.new(uri.request_uri)
  req.basic_auth user, api_token
  res = http.request(req)
  raise "response code was #{ res.code }" if res.code.to_i >= 400
end


次に、push される git リポジトリの hooks/post-receive ファイルに以下を追記します。

# rbenv 使っている前提で、PATH を通す
PATH=$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH
ruby ~/git/jenkins.rb (Jenkins ジョブ名)


最後に、hooks/post-receive に実行権限を付与します。

chmod +x hooks/post-receive


以上で、git push すると自動で Jenkins が働くようになります。