Gitlab 読み (5)

積み残しが以下らしい。

  • spinach
  • sidekiq の関係
  • gitlab を fork して travis-ci でなんちゃら

とりあえずスキマ時間で sidekiq 云々を確認するなど。
昨日確認した通り、sidekiq は rake task で start/stop できるようになっている模様。起動処理の記述は以下ですね。

bundle exec sidekiq -q post_receive,mailer,system_hook,common,default \
 -e #{Rails.env} -P #{pidfile}
  • q で queue を作ってるんですね。queue に突っ込む処理を探してみます。lib/hooks/post-receive というものがありますね。こちらも以前引用してますが再度一部をナニ。
env -i redis-cli rpush "resque:gitlab:queue:post_receive"

あ、この lib/hooks/post-receive ですが git な hook が置かれるディレクトリに導入時にコピィされる形となってますね。doc/install/installation.md の一部を以下に。

## Setup GitLab Hooks

    sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
    sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

で、今ごろになって Project#trigger_post_receive メソドを読みかけていたことを忘却の彼方から取り出してたりするんですが、どこまで云々したんだったか (ぇ

途中まで掘ってスルーしてた

とりあえず以下を掘削してみます。

      # Execute web hooks
      self.execute_hooks(data.dup)

Project#execute_hooks の定義が以下。

  def execute_hooks(data)
    hooks.each { |hook| hook.execute(data) }
  end

hooks という属性は何か、というと

  has_many :hooks,          dependent: :destroy, class_name: "ProjectHook"

ProjectHook というクラスですね。app/models/project_hook.rb が以下。

class ProjectHook < WebHook
  belongs_to :project
end

app/models/web_hook.rb に execute なメソドの定義があります。どうも HTTParty という module を include すると云々できる模様。

class WebHook < ActiveRecord::Base
  include HTTParty

む、post の引数に以下な記述あり。

                   basic_auth: {username: parsed_url.user, password: parsed_url.password})

これって push 契機で jenkins にお知らせする時に gitlab な plugin 側で何らかの認証な処理をしていたりするのかどうか。別途確認入れます。