前書き
デフォルトでは、Jenkinsには、ポート8080
をリッスンする独自の組み込みWinstone Webサーバーが付属しています。これは、開始するのに便利です。 ただし、JenkinsをSSLで保護し、ウェブインターフェースを介して送信されるパスワードと機密データを保護することもお勧めします。
このチュートリアルでは、クライアントリクエストをJenkinsに転送するために、Nginxをリバースプロキシとして設定します。
前提条件
開始するには、次のものが必要です。
-
Ubuntu 18.04 initial server setup guideの後に、root以外のsudoユーザーとファイアウォールで構成された1つのUbuntu18.04サーバー。
-
How to Install Jenkins on Ubuntu 18.04の手順に従って、Jenkinsをインストールしました
-
How to Install Nginx on Ubuntu 18.04の手順に従って、Nginxがインストールされました
-
Let’s Encryptによって提供されるドメインのSSL証明書。 この証明書を取得するには、How to Secure Nginx with Let’s Encrypt on Ubuntu 18.04に従ってください。 自分が所有または管理しているregistered domain nameが必要になることに注意してください。 このチュートリアルでは、全体を通してドメイン名example.comを使用します。
[[step-1 -—- configuring-nginx]] ==ステップ1—Nginxの構成
前提条件のチュートリアルHow to Secure Nginx with Let’s Encrypt on Ubuntu 18.04で、/etc/nginx/sites-available/example.com
ファイルでSSLを使用するようにNginxを構成しました。 このファイルを開いて、リバースプロキシ設定を追加します。
sudo nano /etc/nginx/sites-available/example.com
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
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
:これは、プロキシされたサーバーのプロトコルとアドレスを設定します。この場合、ポート8080
のlocalhost
を介してアクセスされるJenkinsサーバーになります。 -
proxy_read_timeout
:これにより、Nginxの60秒のデフォルトからJenkinsが推奨する90秒の値に増やすことができます。 -
proxy_redirect
:これにより、responses are correctly rewrittenに適切なホスト名が含まれるようになります。
以下のproxy_redirect
行のexample.com
を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;
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の再起動を保留しますが、今すぐ設定をテストできます。
sudo nginx -t
すべてが正常な場合、コマンドは以下を返します。
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
そうでない場合は、テストに合格するまで報告されたエラーを修正します。
[。注意]##
Note:proxy_pass
の構成を誤った場合(たとえば、末尾にスラッシュを追加するなど)、JenkinsのConfigurationページに次のようなものが表示されます。
このエラーが表示された場合は、Nginx構成のproxy_pass
とproxy_redirect
の設定を再確認してください。
[[step-2 -—- configuring-jenkins]] ==ステップ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 --httpListenAddress=127.0.0.1"
ファイルを保存して終了します。
新しい構成設定を使用するには、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: active (exited) 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: active (running) 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サイトは安全に提供されます。
[[step-3 -—- testing-the-configuration]] ==ステップ3—構成のテスト
暗号化を有効にしたので、管理パスワードをリセットして構成をテストできます。 まず、HTTP経由でサイトにアクセスして、Jenkinsにアクセスでき、HTTPSにリダイレクトされることを確認します。
Webブラウザーで、http://example.com
と入力し、ドメインをexample.com
に置き換えます。 ENTER
を押すと、URLはhttps
で始まり、ロケーションバーは接続が安全であることを示しているはずです。
How To Install Jenkins on Ubuntu 18.04で作成した管理ユーザー名をUserフィールドに入力し、選択したパスワードをPasswordフィールドに入力できます。
ログインしたら、パスワードを変更して安全であることを確認できます。
画面の右上隅にあるユーザー名をクリックします。 メインプロファイルページで、ページの左側にあるリストからConfigureを選択します。
これにより新しいページが表示され、新しいパスワードを入力して確認できます。
Saveをクリックして、新しいパスワードを確認します。 Jenkins Webインターフェースを安全に使用できるようになりました。
結論
このチュートリアルでは、NginxをJenkinsの組み込みWebサーバーのリバースプロキシとして設定し、Webインターフェース経由で送信される資格情報やその他の情報を保護しました。 Jenkinsが安全になったので、コードの変更を自動的にテストするためのhow to set up a continuous integration pipelineを学習できます。 Jenkinsを初めて使用する場合に考慮すべきその他のリソースは、the Jenkins project’s “Creating your first Pipeline”チュートリアルまたはthe library of community-contributed pluginsです。