Jenkins with IIS (URL Rewrite)

かなりの今更感ですが、書いておかないとたぶん(というか絶対)忘れるので、備忘録として書いておくことに。

2017/04/19追記: 備忘録として書いたはずが、既に1個完全に忘れてました。Application Request Routing (ARR)も必要です。

IISとJenkinsを連動させる、というか特定のURL以下をJenkinsに飛ばすやり方です。

環境とか

  • WebサーバOS: Windows Server 2012
    クライアントからのアクセスを最初に受けるWebサーバ。Hyper-V内で動作し、長らく “大破.net” をホストしているこいつを使用しました。
  • Webサーバソフト: Microsoft IIS 8.0
    Windows Server 2012に含まれる、Microsoft製でおなじみInternet Information Serviceのバージョン8.0。既にWindows Server 2016が登場し、IISもバージョンが上がっていっているものの、8.0もまだまだ使えます。
  • Jenkins側OS: Xubuntu 16.04
    Debian系のUbuntuファミリーの一つ、Xubuntuを使用。完全なCUIはまだまだ自分のスキル的に厳しい。
    Jenkins自体はWindowsにも導入できますが、今回はOpenWrt / LEDE-Projectのビルドに使用したかったため、Linux系OSを選択。
  • Jenkins Ver: 2.30
    前述の通り、実際に導入してからだいぶ経っているので導入時のバージョンは忘れかけてますが、たぶんこの辺り。2017年1月7日現在最新の2.39でもできるはずです。
  • URL Rewrite Ver: 2.0
    今回重要となる、IISのURL Rewrite(URL書き換え)。Apacheにおける “mod_rewrite” と同等の機能を提供します。たぶん(筆者自身はApacheまともに触れたことが無い)。
    URLのリダイレクト、書き換え、その他色々。
  • Microsoft Application Request Routing 3.0
    上記のURL Rewriteと連携し、受信したリクエストを指定されたホストへ転送します。こっちも何気に重要です。

Jenkinsをインストール

まず、何も考えずJenkinsをインストールします。手順については詳しく書かれているサイトが沢山あるので、ここでは割愛。
今回はUbuntuファミリーのXubuntuにインストールするので、私は以下を参考にしました。
[Jenkins][Ubuntu] UbuntuにJenkinsをインストール – Qiita

インストールが完了すると、もうローカルの8080ポートでJenkinsが動作しているはず。

Jenkinsを構成

IISへのアクセスをJenkinsに飛ばす下準備です。
まず、Jenkins稼働マシン上で

/etc/default/jenkins

を編集して、ポートやプレフィクスを任意のものに変更しておきます。Windowsでは、Jenkinsのインストール先フォルダにある “jenkins.xml” がその設定ファイルに該当する模様。
今回、設定は以下の通りにしました。

ポート: 8080    #競合するものが無かったのでそのまま
prefix: /jenkins     #なんとなく

ちなみに、URLについてはJenkinsのシステム設定にそれっぽい設定がありますが、これはあくまでビルド通知などに載せるために使用されるだけのURLであって、Jenkinsのシステム自体に関わるものでは無いんだそう。
設定ファイルを編集して保存したら、Jenkinsのサービスを再起動します。

$ service jenkins restart

すると、設定した通りのURLでJenkinsが動作するはずです。今回の場合、

http://localhost:8080/jenkins

になります。

続いて、セキュリティ絡みの設定。Jenkinsでは、不正なアクセスを防ぐため、乱数っぽいものを付加している模様。IISからURL Rewriteを使用してJenkinsに飛ばす場合、これに引っ掛かってしまい、多くのページでCrumbなんちゃらとエラーを吐かれて何もできなくなります。
これを回避するため、Jenkinsの管理ページにある “グローバルセキュリティの設定” で、下のほうの “CSRF対策” 内の “プロキシーとの互換性を有効化” にチェックを入れ、適用、もしくは保存して有効にします。

↓下の画像で赤線の部分

jenkins-crumbs

これでJenkins側の下準備は大体完了。

IISの設定

次はIIS側を設定します。Application Request Routing と URL Rewrite は、予めWebPIを利用してインストールしておきます。
とりあえず、Webサイトを適当に1個作ります。
IIS Manager でサーバーのホーム画面を表示して “Application Request Routing Cache” に入り、さらに右側のペインから “Server Proxy Settings” を選択して入ります。
画面一番上に “Enable Proxy” のチェックボックスがあるので、チェックを入れて右側のペインで適用します。
次に、作成したWebサイトのホーム画面へ移り、 “URL Rewrite” または “URL 書き換え” があるので、そこに入ります。
iis8-taiha-net_url-rewrite

そして右側の “操作” ペインから、”規則の追加…” を開き “空の規則” を選択してOKを押下、規則の編集に入ります。
今回は、

http://taiha.net/jenkins

というURLの “/jenkins” 以下を、Jenkinsが動作しているサーバ(IPアドレス: 192.168.88.254, ポート: 8080 )に飛ばします。

規則の名前は “url-rewrite_to_jenkins” とか適当に付けました。
その他の設定は以下の通り。

  • URLの一致
    • 要求されたURL: パターンに一致する
    • 使用: 正規表現
    • パターン: ^jenkins(.*)$
    • 大文字と小文字を区別しない: 未チェック
  • アクション
    • アクションの種類: 書き換え
    • URLの書き換え: http://192.168.88.254:8080/jenkins{R:1}
    • クエリ文字列の追加: チェック
    • 書き換えられたURLを記録する: 未チェック
    • 後続の規則の処理を停止する: チェック

iis8-taiha-net_url-rewrite_rule

とりあえずはこんな感じ。これで、

http://taiha.net/jenkins

以下がJenkins鯖に飛ばされ、アクセスできるようになりました。

ちなみに、大破.net(taiha.net含む)ではLet’s Encryptの証明書をIISが稼働しているWindows Server上で取得してHTTPSを有効にしていますが、この場合インターネット側とIIS間はHTTPS、IISとJenkins間はHTTPで接続されます。
この状態で上記の様なURL RewriteによってJenkinsに飛ばされるURLにアクセスした場合、大破.netのHTTPS接続が維持されます。

↓例。JenkinsもIIS側の証明書によってHTTPS扱いに。

jenkins-https

また、IISは外部へのポート開放は必要なものの、Jenkins側は完全にIISを経由してのアクセスとなるため、こちらは外部へのポート開放の必要は無さそう(未検証)。

ちなみに、この記事の方法でJenkinsに飛ばした場合、Jenkinsでワークスペース内のファイル横に表示される “参照” リンクは、IISのアプリケーションエラーが表示されてしまい機能しません。教えてえろい詳しい人。

というわけで、何かと忘れる自分のための備忘録でした。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中