はじめに

以前に勉強のつもりで作った…

qiita.com

だったけど地味に外国の方が使って下さっていて、以下のようなメールを貰ったので SSL 対応してリリースした。

Looks like your code does not support https… to support it we need to add the following:

http://ruby-doc.org/stdlib-2.2.1/libdoc/net/http/rdoc/Net/HTTP.html

HTTPS is enabled for an HTTP connection by #use_ssl=.
uri = URI(‘https://secure.example.com/some_path?query=string’)

Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == ‘https’) do |http|
request = Net::HTTP::Get.new uri

response = http.request request # Net::HTTPResponse object
end

pull request が欲しいところだったけど…サンキューベリマッチ。

リンク

  • Ruby – chef-handler-slack を使ってみたのと Jenkins に通知を飛ばすハンドラを作って gem で公開してみた – Qiita
  • chef-handler-jenkins_notifier → 汚いコードですいません。

改めて

何するものか?
  • Chef の実行結果を Jenkins の外部ジョブに通知する(だけ)
使い方
chef-handler-jenkins_notifier の設定

以下のようにレシピを書いておく。

chef_gem "chef-handler-jenkins_notifier" do
  action :upgrade
end

require 'chef/handler/jenkins_notifier'

chef_handler 'Chef::Handler::Jenkins_Notifier' do
  source 'chef/handler/jenkins_notifier'
  arguments [
    :host => 'jenkins_host',
    :port => 443,
    :path => '/jenkins/job/chef-test/postBuildResult',
    :user => 'user_name',
    :pass => 'password',
    :ssl => 'true',
  ]
  action :nothing

end.run_action(:enable)

0.0.4 からは SSL にも対応しているの HTTPS 経由で Jenkins にアクセスする環境でも大丈夫(なはず)

レシピの用意

include_recipe で通知用のレシピを読み込んでおく。

include_recipe "hoge::jenkins_notification"

cookbook_file "/tmp/hoge" do
  source "ahoaho"
  action :create
end
収束させる
knife solo cook kappa-chef_client01 -o 'hoge' -F
例えばコケる

例えば cookbook_file なのにファイルを置き忘れたりすると…

以下のように Jenkins 先生に告げ口される。

Jenkins 先生も寂しそう。

成功する

成功すると…

Jenkins 先生も嬉しそう。

ということで…

お礼
  • メール下さった Ebrahim さん、本当に有難うございました
気になること
  • こういう gem の場合にデバッグってどうするんだろう… gem 作ってアップして動作確認はありえないんだけどな…→今回は gem 作ってから動作確認した

元記事はこちら

Chef の実行結果を Jenkins に通知する chef-handler-jenkins_notifier を SSL 対応した