👨🏭
同一インスタンスに複数のJenkinsをたてる
やること
Jenkinsを立てており、NginxをリバースプロキシとしているEC2インスタンスに、二つ目のJenkinsを既存のものとバッティングしないように立ち上げる
EC2内の構成
ドメインはお名前.comで取得しています。SSL証明書はCertbotで発行しています。
手順
Jenkinsのインストール
専用のディレクトリ(今回は/usr/share/newjenkins)を作成し、新しいJenkinsをそこにインストールする。urlは執筆時点でのLTSバージョンです。
wget https://get.jenkins.io/war-stable/2.332.3/jenkins.war
Jenkinsの立ち上げ
インストールしたJenkinsを立ち上げます。この時、設定ファイル、使用port、urlパスが被らないようにしないといけません。よって以下のように起動します。
env JENKINS_HOME=/var/lib/newjenkins java -jar jenkins.war --httpPort=8081 --prefix=/first
ここでJENKINS_HOMEは設定ファイルや作業ファイルのパスを示す環境変数です。
prefixはurlの末尾を表すパラメータです。(ex. --prefix=/jenkins, url= http://myServer:8080/jenkins)
Nginxの設定
リバースプロキシの設定をします。
vi /etc/nginx/sites-enabled/default
upstream jenkins {
server 127.0.0.1:8080 fail_timeout=0;
}
upstream newjenkins {
server 127.0.0.1:8081 fail_timeout=0;
}
server {
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name hogehoge.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://jenkins;
}
location /first {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://newjenkins;
}
}
この時、Jenkinsのprefixで設定するパスとNginxのlocationで設定するパスは統一しておく必要があります。
インスタンス起動時新Jenkinsを起動するように
インスタンスのuserdataを以下のように設定します。
インスタンスを起動するごとに新Jenkinsが実行されるようになります。
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
env JENKINS_HOME=/var/lib/newjenkins java -jar /usr/share/newjenkins/jenkins.war --httpPort=8081 --prefix=/first
最後に
インスタンスを再起動すれば完了です。以下参考urlです。
Discussion