開発者ドキュメント

Nginxリバースプロキシを使用してSSLでJenkinsを構成する方法

序章

デフォルトでは、Jenkinsにはポート8080でリッスンする独自の組み込みWinstoneWebサーバーが付属しています。これは開始に便利です。 ただし、Jenkinsの使用に真剣に取り組むとすぐに、Webインターフェイスを介して送信されるパスワードやその他の機密データを保護するためにSSLで保護する必要があります。

このチュートリアルでは、クライアントリクエストをJenkinsに転送するためのリバースプロキシとしてNginxを構成する方法を示します。 開始するには、以下の各前提条件を完了する必要があります。

前提条件

非ルートで構成された1つのUbuntu16.04サーバー sudo Ubuntu 16.04初期サーバーセットアップガイドに従って、次のガイドを使用してJenkinsとNginxをインストールおよび構成し、ユーザーとファイアウォールを確認します。

これらの要件を完了すると、開始する準備が整います。

ステップ1—Nginxの構成

前提条件のチュートリアルUbuntu16.04でLet’sEncryptを使用してNginxを保護する方法では、SSLを使用するようにNginxを構成しました。 /etc/nginx/sites-available/default ファイルを開くので、そのファイルを開いてリバースプロキシ設定を追加します。

  1. sudo nano /etc/nginx/sites-available/default

まず、特定のアクセスログとエラーログを server SSL構成設定でブロックします。

/ etc / nginx / sites-available / default
. . . 
server {
        # SSL Configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        access_log            /var/log/nginx/jenkins.access.log;
        error_log            /var/log/nginx/jenkins.error.log;

次に、プロキシ設定を構成します。 すべてのリクエストをJenkinsに送信するため、デフォルトをコメントアウトします try_files 記述されているように、リクエストがJenkinsに到達する前に404エラーを返す行。

/ etc / nginx / sites-available / default
 . . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;        }
. . . 

次に、実際のプロキシ設定を追加します。 構成は、Nginxが提供するものを含めることから始まります proxy_params ホスト名、クライアントリクエストのプロトコル、クライアントIPアドレスなどの情報が保持されることを保証するものは、ログファイルで利用できるようになります。 次に、 proxy_pass プロキシサーバーのプロトコルとアドレスを設定します。この場合は、ポート8080のローカルホストでアクセスされるJenkinsサーバーです。 次に、 proxy_read_timeout Nginxの60秒のデフォルトからプロジェクトの推奨される90秒の値まで。 そして最後に、 proxy_redirect 応答が適切に書き換えられ、適切なホスト名が含まれるようにします。

必ずSSLで保護されたドメイン名を proxy_redirect 下の行:

/ etc / nginx / sites-available / default
Location /  
. . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                include /etc/nginx/proxy_params;
                proxy_pass          http://localhost:8080;
                proxy_read_timeout  90s;
                # Fix potential "It appears that your reverse proxy set up is broken" error.
                proxy_redirect      http://localhost:8080 https://your.ssl.domain.name;

これらの変更を行ったら、ファイルを保存して終了します。 Jenkinsを構成するまで、Nginxを再起動しませんが、ここで構成をテストします。

  1. sudo nginx -t

すべてが順調である場合、コマンドは次を返します。

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

そうでない場合は、テストに合格するまで報告されたエラーを修正してください。

注:構成を誤った場合 proxy_pass (たとえば、末尾にスラッシュを追加すると)、Jenkinsの構成ページに次のようなものが表示されます。

このエラーが表示された場合は、 proxy_passproxy_redirect Nginx構成の設定。

ステップ2—Jenkinsの構成

JenkinsがNginxと連携するには、JenkinsサーバーがでのみリッスンするようにJenkins構成を更新する必要があります。 localhost すべてのインターフェースではなくインターフェース(0.0.0.0). Jenkinsがすべてのインターフェイスでリッスンしている場合、元の暗号化されていないポートからアクセスできる可能性があります(8080).

変更します /etc/default/jenkins これらの調整を行うための構成ファイル。

  1. sudo nano /etc/default/jenkins

を見つけます JENKINS_ARGS 行と追加 --httpListenAddress=127.0.0.1 既存の議論に:

/ etc / default / jenkins
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

ファイルを保存して終了します。

新しい構成設定を使用するには、JenkinsとNginxを再起動します。

  1. sudo systemctl restart jenkins

以来 systemctl 出力は表示されません。ステータスを確認します。

  1. sudo systemctl status jenkins

私たちは見るべきです active (exited) のステータス Active ライン:

Output
● jenkins.service - LSB: Start Jenkins at boot time Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled) Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS) Process: 11391 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)

Nginxに対して次の手順を繰り返します。

  1. sudo systemctl restart nginx
  1. sudo systemctl status nginx
Output
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-04-25 22:36:08 UTC; 2min 51s ago Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code= Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC Main PID: 11353 (nginx)

両方のサーバーを再起動したので、HTTPまたはHTTPSのいずれかを使用してドメインにアクセスできるはずです。 HTTPリクエストは自動的にHTTPSにリダイレクトされ、Jenkinsサイトは安全に提供されます。

ステップ3—構成のテスト

暗号化を有効にしたので、管理者パスワードをリセットして構成をテストします。 まず、次のサイトにアクセスします。 http Jenkinsに到達し、にリダイレクトされることを確認します https 予想通り:

ウェブブラウザで「http:// your.ssl.domain.name 」と入力し、ドメインを次のように置き換えます your.ssl.domain.name. Enterキーを押すと、URLは次のようになります。 https ロケーションバーは、接続が安全であることを示している必要があります。

入ります admin [ユーザー]フィールドと、Jenkinsがインストール時に作成して保存した自動生成パスワード。

  1. sudo cat /var/lib/jenkins/secrets/initialAdminPassword

管理者ユーザーのパスワードをリセットした場合は、代わりにそのパスワードを入力してください。 いずれにせよ、ログインしたら、安全を確保するためにパスワードを変更します。

右上の「admin」をクリックし、ドロップダウンメニューから「Configure」を選択します。 新しいパスワードを入力して確認し、「保存」をクリックします。 これで、JenkinsWebインターフェイスを安全に使用できます。

結論

このチュートリアルでは、前提条件を完了した後、Webインターフェイスを介して送信される資格情報やその他の情報を保護するために、NginxをJenkinsの組み込みWebサーバーへのリバースプロキシとして構成しました。 Jenkinsが安全になったので、継続的インテグレーションパイプラインをセットアップして、コードの変更を自動的にテストする方法を学ぶことができます。 Jenkinsを初めて使用する場合に考慮すべきその他のリソースは、 Jenkinsプロジェクトの「はじめに:最初のパイプラインチュートリアルを作成する」またはコミュニティ提供プラグインのライブラリです。

モバイルバージョンを終了