GitHub と Jenkins の連携でハマった

社内的に GitHub に移行することになったので、 GitHubリポジトリに pull request が merge されたタイミングで Jenkins のプロジェクトが実行されるように設定しました。設定手順は GitHub Plugin - Jenkins - Jenkins WikiTrigger Jenkins builds by pushing to Github | Four Kitchens が参考になります。 1 点ハマったのが GitHubPost-Receive Hooks の所で、 Basic 認証に対応している と書いてあったのですが、なぜか手前の Apache で 401 の認証エラーとなりました。結論は Apache の設定ファイルで Basic 認証ではなく Digest 認証にしていたことが原因でした。。既存の設定は HTTP のみだったのですが、そこは Digest 認証の設定があり、ちゃんと内容を読まずにコピーして HTTPS の設定を書いたことが原因でしたorz

  • Jenkins は GitHub Plugin を利用した。
  • Jenkins の手前に Apache があり、そこでは HTTPS で Basic 認証の設定を行った。
  • GitHub 側の Post-Receive Hooks は WebHook URLs でも Jenkins (GitHub plugin) でも問題なかった。
    • 意味的に分かりやすいので Jenkins (GitHub plugin) を利用する設定にした。
    • どちらも設定後にテスト実行のボタンがあるので、実際にリポジトリに push しなくても疎通テストが出来て便利だった。
    • 設定する URL は https://ユーザー名:パスワード@Jenkinsのホスト名/github-webhook/ という URL になるんですが、 Jenkins の Github Plugin は GitHub が POST する JSON の中からリポジトリの URL を取得して、 Jenkins の個々のプロジェクトに設定されているリポジトリの URL とマッチングを掛けるという実装のようです。