【実験】1つのWindowsに5人のJenkinsを立ち上げてみた

5jenkins in one windows 技術
5jenkins in one windows

こんにちは、TAKAです。IT系企業でサラリーマンやってます。先日Jenkinsについて1台に複数のURLかポートでインストールできますか?との質問をうけ、やってみることにしました。

結果として、1つのWindowsに5人ものjenkinsを同居させることに成功しました。本記事ではその方法を書きました。これ誰得なんだろう!?

Jenkinsは1人で十分、サーバ調達すれば済む、Travis CI/CircleCI/AppVeyor など他のCIがいいなという方には、全く有益ではないです。。。

やってみたこと

1つのWindowsマシンにJenkinsを複数立ち上げてみました 。図のようなイメージが実現できました。

バージョン・環境など

  • Windows10 1903
  • Jenkins 2.193
  • Docker desktop 2.1.0.2(Jekins3人目~5人目)

ドメインについて

今回はローカルでテストしました。hostsを下記を追加という細工しています。

  • 127.0.0.1 dummy-domain.com
  • 127.0.0.1 4th.dummy-domain.com
  • 127.0.0.1 5th.dummy-domain.com

1人目のJenkins:msiインストーラ

最初のJenkinsは、Windowsのインストーラを使いました。本家のURLはこちら

  • Download the latest package(最新版をダウンロードする)
  • Open the package and follow the instructions(MSIファイルを実行し指示に従う)

簡単そうです。やってみます。
DLファイルはZIPです。回答するとmsiファイルになってますのでダブルクリックで実行しましょう。インストール先は、「D:\Users\jenkins\1st\」としておきました。

画像は貼っておきますが、特に特徴的なことはないです。

1人目のJenkinsがreadyになりました。この画像までくれば成功です。

スポンサーリンク

2人目のJenkins:warファイルから

さて、2人目ですが、インストーラからはできません。下記のように「修復」か「削除」の2択になってしまいます。

そこで、2人目は、「WARファイル」によるインストールを行います。本家はこちら。ざっくり手順は下記。

  • Download the latest stable Jenkins WAR file to an appropriate directory on your machine.
    • WARファイルをDLしておく
  • Open up a terminal/command prompt window to the download directory.
    • コマンドプロンプトからWARファイルの場所に移動
  • Run the command java -jar jenkins.war.
    • コマンドプロンプトからWARファイル起動
  • Browse to http://localhost:8080 and wait until the Unlock Jenkins page appears.
    • あとはmsiと同じ(8080ならね)

今回、9090ポートで立ち上げたいので追加手順が必要です。まずは立上げまでやっていきましょう。

単純立上げ

  • インストーラには付属のjreがついてます。WARの場合は、自前でjavaコマンドが使える状態が必要です。ここは各自お任せします。
    • chocolatey利用可能なら、choco install jre8 で行けます。
  • WARファイルを次のコマンドで立ち上げます。インストール場所はWARファイルの配置場所と同じとし、「D:\Users\jenkins\2nd」としています。
    • java -DJENKINS_HOME=D:/Users/jenkins/2nd -jar jenkins.war –httpPort=9090
  • ブラウザで下記URLに接続し、「Getting Started」画面が出れば成功です。
    • http://localhost:9090/
  • あとは1人目と同様に、Jenkinsのダッシュボードが見えるところまで進めてください。

2人目特有の追加作業

2人目の場合、インストーラと違って下記が未対応となっています。追加の手動作業を行います。

  • Windowsファイアウォールの設定
  • Windowsサービスからの起動

Windowsファイアウォールの設定

  • 2人目のWindowsファイアウォールを手動設定します。(下記画面参照)
    • 受信の規則に、TCP9090ポートの追加としました。

Windowsサービスからの起動

Jenkins2人目が動作しているのは、コマンドプロンプトのjavaコマンドに依存しています。今のままだと、コマンドプロンプトを落とすとページが落ちますので、そうならないようにしましょう。

  • Jenkinsの管理 ⇒ Windowsのサービスとしてインストール
  • jenkins.xmlを編集
  • scコマンドでサービス化

「Windowsサービスとしてのインストール」は二つの動作が行われます

  1. jenkins.exe、jenkins.configなどのファイルの生成
  2. Windowsサービスへの追加 ⇒Service with id ‘jenkins’ already existsが発生

実行すると、二つ目の処理がエラーとなるため失敗となります。1つ目の処理が目的のため、失敗しても良いので実行してください。

次に、増加したファイルのうち、「jenkins.xml」を編集します。

  • jenkins.xmlのファイルを開き、argumentsタグを探してください。
  • その中の –httpPort=8080 という記述を –httpPort=9090 に修正して保存します。

仕上げに、scコマンドでサービスに登録します。

  • 管理者モードでcmdプロンプトを開く
  • sc create jenkins_2nd binpath= D:\Users\jenkins\2nd\jenkins.exe type= own start= auto
    • [SC] CreateService SUCCESS と出れば成功です。
  • sc start jenkins_2nd
    • サービスが開始します。通常はこれで問題ないはずです。
    • もしサービスがすぐ停止する場合は、jenkins.xmlファイルのポート修正をミスしてないか、利用済みのポートとバッティングしていないか再確認してください。それでも不明の場合、「jenkins.err.log」にエラー内容が書かれますので特定してください。

jenkinsは1台のマシンに1人が前提のため、2人目のjenkinsはちょっと工夫を加えました。

スポンサーリンク

3人目~5人目:Docker+リバースプロキシ

2人目と同じ方法なら3人目以降も増殖できます。ここでは別の方法も試してみたい。そこで、3人目~5人目はDockerを使ってみます。Dockerでのインストール手順の本家はこちら

さて、イメージはこんな感じ

下記手順でやっていきます。

  • dockerをインストールする
  • dockerでjenkinsを起動
  • 各jenkinsをセットアップする
スポンサーリンク

dockerをインストールする

dockerを使える状態にしましょう。Windowsの場合下記いずれか

  • docker-desktopサイトからインストーラ入手
  • または、chocolateyを使って、以下コマンド
    • choco install docker-desktop
  • 確認
    • powershell またはコマンドプロンプトからdockerコマンドが使えればOKです。

dockerでjenkinsを起動

  • docker内の仮想ネットワークを事前に作成する。下記コマンドを実行します。
    • docker network create –driver bridge docker-network
  • docker-compose.ymlを準備
version: '3'
 services:
   Jenkins-3rd:
     image: jenkinsci/blueocean 
     container_name: Jenkins-3rd
     restart: always
     ports:
       - 8080
       - 50000
     volumes:
       - ./jenkins-data-3rd:/var/jenkins_home
       - /var/run/docker.sock:/var/run/docker.sock
     networks:
       - docker-network
     environment:
       VIRTUAL_HOST: dummy-domain.com
       VIRTUAL_PORT: 8080
       VIRTUAL_PROTO: http
   Jenkins-4th:
     image: jenkinsci/blueocean 
     container_name: Jenkins-4th
     restart: always
     ports:
       - 8080
       - 50000
     volumes:
       - ./jenkins-data-4th:/var/jenkins_home
       - /var/run/docker.sock:/var/run/docker.sock
     networks:
       - docker-network
     environment:
       VIRTUAL_HOST: 4th.dummy-domain.com
       VIRTUAL_PORT: 8080
       VIRTUAL_PROTO: http
   Jenkins-5th:
     image: jenkinsci/blueocean 
     container_name: Jenkins-5th
     restart: always
     ports:
       - 8080
       - 50000
     volumes:
       - ./jenkins-data-5th:/var/jenkins_home
       - /var/run/docker.sock:/var/run/docker.sock
     networks:
       - docker-network
     environment:
       VIRTUAL_HOST: 5th.dummy-domain.com
       VIRTUAL_PORT: 8080
       VIRTUAL_PROTO: http
   nginx-proxy:
     image: jwilder/nginx-proxy
     container_name: nginx-proxy
     restart: always
     privileged: true
     ports:
       - "80:80"
     volumes:                     
       - /var/run/docker.sock:/tmp/docker.sock:ro
     labels:
       - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
     networks:
       - docker-network
 networks:
   docker-network:
     external: true
  • docker-compose up -d で起動
    • cd multi-jenkins
    • docker-compose up -d

4つのdoneが確認できればOKです。

それぞれのURLにアクセスしてみて下記のような画面が確認できれば成功です。(ローカルの場合hostsの整備を、グローバルの場合DNSの整備をお忘れなく)

各jenkinsをセットアップする

さて、セットアップです。docker起動直後、下記のようにjenkins-data-3rdのように3つフォルダができているはずです。これらは各Jenikinsの「JENKINS_HOME」に相当します。

アンロックのための「initialAdminPassword」は、「secret」フォルダにありますので、それぞれnotepadから参照可能です

  • jenkins-data-3rd\secrets\initialAdminPassword
  • jenkins-data-4th\secrets\initialAdminPassword
  • jenkins-data-5th\secrets\initialAdminPassword

ここまでくればすべてセットアップできます。

スポンサーリンク

まとめ

本日は、1つのWindowsマシンにJenkinsを複数立ち上げてみました。上記の通り5人のjenkinsを一つの端末から立ち上げることができています。

誰得だろうと思って記事にしてますが、その誰かがいて何かの参考になればうれしいです。Jenkinsは依然人気はあるようで参考記事が多いというのは強みですよね。でもワザワザ1台のマシンで何人もJenkins立ち上げようって人は少ないんじゃないか。本記事が誰かの役に立てばうれしい。

最近ではJenkins一強というわけではなく、Travis CI/CircleCI/AppVeyor など多くのCIサービスが台頭してきている点も注意です。特にCircleCIは広告を多く見かけるようになり目立ってます。今後は他のCIも語れるようになりたい。がんばろう。

このブログでは、将来に備えた技術力アップや資産運用を情報発信していきます。Twitterもやってますので良ければフォローお願いします。

技術
スポンサーリンク
takaをフォローする
アフターファイブ改革

コメント

  1. You have mentioned very interesting points! ps nice site.

  2. […] 【実験】1つのWindowsに5人のJenkinsを立ち上げてみた […]

タイトルとURLをコピーしました