Continuous Integration(継続的インテグレーション) = CI環境ちゃんと使ってますか? また、ちゃんとメンテナンスできてますか?
CIツールはビルドをやテストを自動で実行するためのツールでビルドサーバーと呼ばれることもあります。
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してください。
起動手順
以下のコマンドを実行することで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
することで元の状態になるはずです。
バージョンアップとロールバック
別記事で解説予定
参考資料
CentOS上にDockerでJenkinsサーバを構築する | Qiita
docker run –restart=alwaysがどれくらいrestartしてくれるか調べた | Qiita
コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤
[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
コメント