序章

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

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

前提条件

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

ステップ1—Nginxを構成する

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

  1. sudo nano /etc/nginx/sites-available/example.com

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

/etc/nginx/sites-available/example.com
. . . 
server {
        . . .
        # SSL Configuration
        #
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        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/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:これにより、プロキシサーバーのプロトコルとアドレスが設定されます。この場合は、経由でアクセスされるJenkinsサーバーになります。 localhost ポートで 8080.
  • proxy_read_timeout:これにより、Nginxの60秒のデフォルトからJenkinsが推奨する90秒の値に増やすことができます。
  • proxy_redirect:これにより、応答が正しく書き換えられ、適切なホスト名が含まれるようになります。

SSLで保護されたドメイン名を必ず置き換えてください example.com の中に proxy_redirect 下の行:

/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;
                include /etc/nginx/proxy_params;
                proxy_pass          http://localhost:8080;
                proxy_read_timeout  90s;
                # Fix potential "It appears that your reverse proxy setup is broken" error.
                proxy_redirect      http://localhost:8080 https://example.com;

これらの変更を行ったら、ファイルを保存してエディターを終了します。 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 Configurationページに次のようなものが表示されます。

このエラーが表示された場合は、 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を再起動します。

  1. sudo systemctl restart jenkins

以来 systemctl 出力が表示されない場合は、ステータスを確認してください。

  1. sudo systemctl status jenkins

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

Output
● jenkins.service - Jenkins Continuous Integration Server Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:35:49 UTC; 2s ago Main PID: 89751 (java) Tasks: 44 (limit: 4665) Memory: 358.9M CPU: 20.195s CGroup: /system.slice/jenkins.service └─89751 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080

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 Mon 2022-04-18 16:36:17 UTC; 7s ago Docs: man:nginx(8) Process: 89866 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 89869 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 89870 (nginx) Tasks: 3 (limit: 4665) Memory: 4.1M CPU: 51ms CGroup: /system.slice/nginx.service ├─89870 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"

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

ステップ3—構成をテストする

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

Webブラウザで、次のように入力します http://example.com、ドメインを example.com. を押した後 ENTER、URLはで始まる必要があります https ロケーションバーは、接続が安全であることを示している必要があります。

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

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

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

これにより、新しいパスワードを入力して確認できる新しいページに移動します。

保存をクリックして、新しいパスワードを確認します。 これで、JenkinsWebインターフェイスを安全に使用できます。

結論

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