Dockerを使ってビルドサーバー(Jenkins)を建てる

2019年5月5日

Continuous Integration(継続的インテグレーション) = CI環境ちゃんと使ってますか? また、ちゃんとメンテナンスできてますか?

CIツールはビルドをやテストを自動で実行するためのツールでビルドサーバーと呼ばれることもあります。

 

CI(継続的インテグレーション) | CloudBees

 

CIツールの有名なものとしてはJenkinsやTravis CI, CircleCIなどがあります。

その中でもJenkinsはオープンソースかつ無料で使用することができ、自分のローカルネットワーク内にサーバーを置いて利用することができます。
(Travis CIやCircleCIは基本クラウド上で動く)

 

そこで今回はDockerを使用して更新などや更新のロールバックなどがしやすいJenkinsサーバーを建てる手順について解説していきます。

 

前提条件

  • Dockerがインストール済みで動作する。
  • TCPの8080(Webインターフェースで使用)と50000(別のビルドマシンと通信するのに使用)がDockerを動かすマシンで利用可能なこと
  • 今回は建てる手法の解説なので、別のマシンを接続してビルド等はしません。

 

Docker Hubからイメージのプル

Docker Hubからpullをします。 (今回はLTS版をセットアップします)
https://hub.docker.com/r/jenkins/jenkins

(ちなみにDocker Official Imagesから出てるJenkinsは古いです。$ docker pull jenkinsを行うと古いバージョンになります。必ず $ docker pull jenkins/jenkinsをしてください)

 

$ docker pull jenkins/jenkins:lts

 

ホストマシンの設定

Jenkinsコンテナのデータ保存先として、今回はホストマシンの/var内にjenkinsディレクトリを作成します (これは好きな場所に作れます。)

# mkdir /var/jenkins_docker_data

 

ディレクトリ作成後、パーミッション関連エラーを防ぐためUID 1000でchownしておきます。 (Jenkins内のuserがUID 1000を使う)

# chown -R 1000:1000 /var/jenkins_docker_data

 

Mac OSの場合は以下の記事を参考にしてDockerを動かすユーザー+staffグループでchownしてください。

Mac版のDockerでError response from daemon: Mounts deniedエラーが発生した際の修正方法

 

起動手順

以下のコマンドを実行することでjenkinsコンテナを作成し、起動できます。

$ docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_docker_data:/var/jenkins_home --name jenkins --restart=always jenkins/jenkins:lts

 

オプション解説

-d デタッチモード、コンソールにテキストを出力しない。

-p ポートフォワーディング、仮想マシンのポートをホストマシンのポートに割り当てる (今回は8080[Webクライアント]と50000[ビルドマシン]の通信用)

-v ホストマシンのディレクトリを仮想マシン内のディレクトリに割り当て。 (今回の設定だと、仮想マシンの/var/jenkins_homeに書き込まれたデータはホストマシンの/var/jenkins_docker_dataに書き込まれる)

--name コンテナに名前をつける。 今回はjenkins

--restart コンテナの再起動方法。 alwaysだとホストマシンの再起動とかしてもDockerのデーモンが立ち上がれば、勝手にコンテナが起動してくれる。

jenkins/jenkins:lts 実行するDockerイメージ

 

Jenkinsの初期設定

http://localhost:8080/ または http://127.0.0.1:8080/にアクセスする。

 

Jenkinsの初期設定ウィザードが表示され、初期の管理者パスワードを聞かれる。コンテナ内の/var/jenkins_home/secrets/initialAdminPasswordつまり。ホストの/var/jenkin_docker_data/secrets/initialAdminPasswordに書かれているので、それをコピー&ペーストしてContinue。

 

プラグインをどうするか聞かれるのでとりあえずそのままInstall suggested pluginsをクリックする。
(こだわる人はSelect plugins to installして)

 

何回かインストール失敗の表示が出ましたが、その都度Retryをすることで結果無事にインストールできました。

 

プラグインのインストールが完了するとこんな画面になります。
画面にしたがって、最初の管理者ユーザーを作成してください。

 

管理者を作成し終えるとInstance Configurationの画面になります。

ここではjenkinsが使用するアドレスが確定している場合、ここに入力することができます。

今回はNot nowをクリックしてスキップしました。

 

以上で初期設定は完了です。

Start using Jenkinsボタンをクリックしてダッシュボードに飛んでみましょう。

 

今回は詳しく解説しませんが、これがJenkinsのダッシュボード画面です。

ここから色々とできます。

 

終了手順

Jenkinsの関連ファイルは全て/var/jenkins_docker_data/の中に格納されるため、終了などですごく心配する必要はないです。

 

コンテナを停止する場合は

$ docker stop jenkins

で停止できます。

 

再開する場合は

$ docker start jenkins

でいけます。

 

その他、間違ってコンテナを削除してしまったりしても、再度docker runすることで元の状態になるはずです。

 

バージョンアップとロールバック

別記事で解説予定

 

 

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤
  • 橋本 直哉, 須江 信洋, 前佛 雅人, 境川 章一郎, 佐藤 聖規, 山田 修司, 青山 尚暉, 市川 豊, 平岡 大祐, 福田 潔, 矢野 哲朗
  • 価格   ¥ 4,298 prime
  • 販売者 Amazon.co.jp
クリックして今すぐチェック
みんなのDocker/Kubernetes
  • 石澤 基, 五十嵐 綾, 大塚 元央, 須田 一輝, 稲津 和磨, 九岡 佑介, 坂部 広大, 青山 真也, 池添 明宏, 上岡 真也
  • 価格   ¥ 2,462 prime
  • 販売者 Amazon.co.jp
クリックして今すぐチェック
[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
  • 佐藤 聖規, 和田 貴久, 新井 雄介, 米沢 弘樹, 山岸 啓, 岩成 祐樹
  • 価格   ¥ 3,218 prime
  • 販売者 Amazon.co.jp
クリックして今すぐチェック
継続的インテグレーション入門
  • ポール・M・デュバル, スティーブ・M・マティアス, アンドリュー・グローバー
  • 価格   Check on Amazon
クリックして今すぐチェック

 

参考資料

CentOS上にDockerでJenkinsサーバを構築する | Qiita

docker run –restart=alwaysがどれくらいrestartしてくれるか調べた | Qiita