前書き

デフォルトでは、https://jenkins.io/ [Jenkins]には、ポート `+ 8080 +`でリッスンする独自の組み込みWinstone Webサーバーが付属しています。これは開始に便利です。 ただし、JenkinsをSSLで保護し、ウェブインターフェースを介して送信されるパスワードと機密データを保護することもお勧めします。

このチュートリアルでは、クライアントリクエストをJenkinsに転送するために、Nginxをリバースプロキシとして設定します。

前提条件

開始するには、次のものが必要です。

ステップ1-Nginxの構成

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

sudo nano /etc/nginx/sites-available/

SSL構成設定のある「+ server +」ブロックで、Jenkins固有のアクセスログとエラーログを追加します。

/etc/nginx/sites-available/example.com

. . .
server {
       . . .
       # SSL Configuration
       #
       listen [::]:443 ssl ipv6only=on; # managed by Certbot
       listen 443 ssl; # managed by Certbot


       . . .
       }

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

/etc/nginx/sites-available/example.com

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

次のプロキシ設定を追加しましょう。

  • + proxy_params +: `+ / etc / nginx / proxy_params +`ファイルはNginxによって提供され、ホスト名、クライアントリクエストのプロトコル、クライアントIPアドレスなどの重要な情報がログに保持され、利用できるようにしますファイル。

  • + proxy_pass +:プロキシされたサーバーのプロトコルとアドレスを設定します。この場合、ポート `+ 8080 `で ` localhost +`を介してアクセスされるJenkinsサーバーになります。

  • + proxy_read_timeout +:これにより、Nginxの60秒のデフォルトからJenkinsが推奨する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/example.com

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を再起動します。

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; generated)
  Active:  since Mon 2018-07-09 20:26:25 UTC; 11s ago
    Docs: man:systemd-sysv-generator(8)
 Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
 Process: 29812 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:  since Mon 2018-07-09 20:27:23 UTC; 31s ago
    Docs: man:nginx(8)
 Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
 Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)

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

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

暗号化を有効にしたので、管理パスワードをリセットして構成をテストできます。 まず、HTTP経由でサイトにアクセスして、Jenkinsにアクセスでき、HTTPSにリダイレクトされることを確認します。

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

Ubuntu 18.04にJenkinsをインストールする方法で作成した管理ユーザー名を*に入力できます。 User フィールド、および Password *フィールドで選択したパスワード。

ログインしたら、パスワードを変更して安全であることを確認できます。

画面の右上隅にあるユーザー名をクリックします。 メインプロファイルページで、ページの左側にあるリストから[構成]を選択します。

image:https://assets.digitalocean.com/articles/jenkins-nginx-ubuntu-1804/configure_password.png [Jenkinsパスワードページへの移動]

これにより新しいページが表示され、新しいパスワードを入力して確認できます。

image:https://assets.digitalocean.com/articles/jenkins-nginx-ubuntu-1804/password_page.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 / [コミュニティが提供するプラグインのライブラリ]。