前書き

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

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

前提条件

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

ステップ1-Nginxの構成

前提条件のチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04 [Let’s EncryptでNginxを保護する方法Ubuntu 16.04]では、 `+ / etc / nginx / sites-available / default +`ファイルでSSLを使用するようにNginxを設定したため、そのファイルを開いてリバースプロキシ設定を追加します。

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

最初に、特定のアクセスログとエラーログをSSL構成設定で `+ server +`ブロックに追加します:

/ etc / nginx / sites-available / default

. . .
server {
       # SSL Configuration
       #
       # listen 443 ssl default_server;
       # listen [::]:443 ssl default_server;

次に、プロキシ設定を構成します。 すべてのリクエストを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;        }
. . .

次に、実際のプロキシ設定を追加します。 設定は、ホスト名、クライアント要求のプロトコル、クライアントIPアドレスなどの情報が保持されるNginx提供の「+ proxy_params 」をログファイルに含めることから始まります。 次に、 ` proxy_pass `はプロキシされたサーバーのプロトコルとアドレスを設定します。この場合、このサーバーはポート8080のローカルホストでアクセスされるJenkinsサーバーです。 次に、 ` proxy_read_timeout `をNginxの60秒のデフォルトからプロジェクトの推奨90秒の値に増やします。 最後に、「 proxy_redirect +」を追加して、https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+says+my+reverse+proxy+setup+is+broken [応答が適切に書き換えられるようにする]適切なホスト名を含めるため。

以下の `+ proxy_redirect +`行のSSLで保護されたドメイン名を必ず置き換えてください:

/ 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;




               ;

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

sudo nginx -t

すべてが正常であれば、コマンドは以下を返します。

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

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

ステップ2-Jenkinsの構成

JenkinsがNginxと連携するには、Jenkinsサーバーがすべてのインターフェイス( + 0.0.0.0 +)ではなく、 + localhost +`インターフェイスのみをリッスンするようにJenkins設定を更新する必要があります。 Jenkinsがすべてのインターフェイスでリッスンする場合、潜在的に元の暗号化されていないポート( `+ 8080 +)でアクセスできます。

これらの調整を行うために `+ / etc / default / jenkins`設定ファイルを修正します。

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 "

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

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

sudo systemctl restart jenkins

`+ systemctl +`には出力が表示されないため、ステータスを確認します。

sudo systemctl status jenkins

`+ Active `行に ` active(exited)+`ステータスが表示されます:

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に対してこれらの手順を繰り返します。

sudo systemctl restart nginx
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 」経由でサイトにアクセスして、ジェンキンスに到達し、予想どおり「 https +」にリダイレクトされることを確認します。

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

image:https://assets.digitalocean.com/articles/jenkins-nginx-ubuntu-1604/jenkins-https2.png [Jenkinsがhttps経由で提供されていることを確認]

[ユーザー]フィールドに「+ admin +」と、インストール時にJenkinsが作成および保存した自動生成パスワードを入力します。

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

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

image:http://assets.digitalocean.com/articles/jenkins-nginx-ubuntu-1604/jenkins-configure.png [Jenkins管理者パスワードページに移動]

右上の[管理者]をクリックし、ドロップダウンメニューから[構成]を選択します。 新しいパスワードを入力して確認し、「保存」をクリックします。 Jenkins Webインターフェースを安全に使用できるようになりました。

結論

このチュートリアルでは、前提条件を満たした後、NginxをJenkinsの組み込みWebサーバーへのリバースプロキシとして構成し、Webインターフェイス経由で送信される資格情報やその他の情報を保護しました。 Jenkinsが安全になったので、https://www.digitalocean.com/community/tutorials/how-to-set-up-continuous-integration-pipelines-in-jenkins-on-ubuntu-16-04 [howコードの変更を自動的にテストするための継続的な統合パイプラインをセットアップする]。 Jenkinsを初めて使用する場合に考慮すべきその他のリソースは、https://jenkins.io/doc/pipeline/tour/hello-world/ [Jenkinsプロジェクトの「はじめに:最初のパイプラインを作成する」チュートリアルまたはhttps:// pluginsです。 jenkins.io/ [コミュニティが提供するプラグインのライブラリ]。