IaC

JenkinsをDockerコンテナで構築する【簡単!】

IaC

皆さんJenkinsは使ったことがありますか?

私はインフラエンジニアとして15年以上業務をしておりますが、Jenkinsを使うことでAWSやVMwareの仮想マシン構築をコード化する、いわゆる「Infrastructure as Code(IaC)」を利用した継続的インテグレーション(CI)/継続的デリバリー(CD)としての利用をしてます。

具体的には以下のような流れです。

  1. Jenkinsのjobを起点としてAWS CloudformtionやVMware APIを経由して仮想マシンを作成
  2. 作成した仮想マシン内でgitコマンドでリポジトリでセットアップスクリプトを取得した後、chef soloもしくはansibleでアプリケーションなどのセットアップ

今回はこの便利なJenkins環境をDockerでサクッと作ってしまいます。めちゃくちゃ簡単です。

Jenkinsとは?

Jenkins(ジェンキンス)とは、継続的インテグレーション(CI)や継続的デリバリー(CD)を実現のためのツールです。

Jenkinsは、「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」といった利用目的として、注目がされているオープンソースのツールです。

多様なスクリプト(Java、PHP、Perl、javascript、bash)にも対応でき、豊富なプラグインによる優れた拡張性、日本語にも対応していることから人気の理由です。

また、利用者も多く、日本語コミュニティも盛んであり、日本語の情報が集めやすいのも特徴です。

試した環境

  • Windows10 Pro バージョン1909
  • CPU:Intel Core i7-2600K
  • メモリ:24GB
  • ディスク:240GB (SSD)

Jenkinsコンテナの作成

docker/docker-compose環境の構築

前提として事前にdockerとdocker-composeコマンドが使える環境を構築済みの前提です。

もしDocker環境がまだの方は、以下のWindows/Mac/CentOSのインストール方法を参考にしてください。※Windowsの場合にはPro版が前提になりますので注意です。

docker-compose.yamlの準備

まず、適当なフォルダ(私の場合はC:\Docker\jenkins)を作ってから以下の内容でdocker-compose.yamlを作成します。

今回は開発用のイメージ(jenkins/jenkins:latest)と8080ポートを使います。

https://hub.docker.com/r/jenkins/jenkins
version: "3"
services:
  master:
    container_name: master
    image: jenkins/jenkins:latest
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/lib/jenkins_home

コンテナ作成(docker-compose up -d)

あとはdocker-composeコマンドでコンテナ構築します。

C:\Docker\jenkins>docker-compose up -d
Creating network "jenkins_default" with the default driver
Pulling master (jenkins/jenkins:latest)...
latest: Pulling from jenkins/jenkins
3192219afd04: Pulling fs layer
17c160265e75: Pulling fs layer
・
・
Status: Downloaded newer image for jenkins/jenkins:latest
Creating master ... done

コンテナができていて8080ポートで立ち上がっていることを確認します。

C:\Docker\jenkins>docker-compose ps
 Name               Command               State                 Ports
-----------------------------------------------------------------------------------
master   /sbin/tini -- /usr/local/b ...   Up      50000/tcp, 0.0.0.0:8080->8080/tcp

動作確認

ブラウザでlocalhost:8080にアクセスして以下の画面が開けばとりあえずはOKです。

Jenkinsの初期セットアップ

次に初期セットアップを進めていきます。

初期パスワードはJenkinsコンテナ内の「/var/jenkins_home/secrets/initialAdminPassword」に保管されているのでコンテナに接続して初期パスワードを確認します。

C:\Docker\jenkins>docker exec -it master /bin/bash
jenkins@44f98e773439:~/secrets$ cat /var/jenkins_home/secrets/initialAdminPassword
88957684a721437b8331cc6cf612b328

Pluginのインストールはsuggetedで進めます。

幾つかのプラグインのインストールに失敗してしまいましたが、後で対応することにします。

adminユーザを登録します。

Jenkinsが再起動したら次はログオン画面が表示されます。先ほどのAdminユーザでログオンしてみます。

ログオンができました。これでjobなどを作ることができるようになりました。

まとめ

今回はJenkinsをDockerコンテナで簡単に作成してみました。Docker環境されあれば10分くらいでJenkinsが使えるようになります。

ただし、Jenkinsを使うだけでは継続的インテグレーション(CI)や継続的デリバリー(CD)できませんので、時間があればAWSやAnsible/Chefを使った実現方法についても紹介できればと思ってます(かなり大変な気がしますが・・・)

Jenkinsを学習するための本

Jenkinsを学習するためには以下の本がオススメです。

この書籍ではもちろんJenkins自体の使い方の説明もありますが、他ツールの連携なども説明されているので中級レベル向けの本になります。

Dockerのオススメ勉強方法

私がオススメするDocker初心者向けの最初に購入すべき書籍は「さわって学ぶクラウドインフラ docker基礎からのコンテナ構築です。

さわって学ぶクラウドインフラ docker基礎からのコンテナ構築

本書ではDockerの基本的な概念などの座学ももちろんありますが、実際に、Dockerのインストール方法やWebサーバーをコンテナで構築するハンズオンを通じて学習することができるため、特に初心者の方はは分かりやすい内容となっています。

今回は以上となります。

コメント