【2018年版】Docker+Rancher+JenkinsなCI環境を構築する

# はじめに
システム開発で環境構築に時間をかけるなんてダサい時代になりました。
ってことで、CI環境もサクッと準備しちゃいましょう。
今回は、サラのCentOS7にDocker/Rancher/Jenkinsをセットアップしてみたいと思います。

# セットアップ

CentOS7はインストール済みとします。
SSH等でログインしておいてください。

## Dockerをインストールする

まずはDocker-CEをインストールします。
公式サイトのコマンドをチャチャっと打ち込んでいきます。

- [Get Docker CE for CentOS](https://docs.docker.com/install/linux/docker-ce/centos/)

```bash
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

$ sudo yum install docker-ce

$ sudo systemctl start docker
```

docker-composeコマンドも入れておきます。

```bash
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose
```

```/usr/local/bin``` にパスが通っていない場合はパスを通します。

```bash
$ echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

$ source ~/.bash_profile
```

バージョンを確認しておきます。

```bash
$ docker -v
Docker version 18.09.0, build 4d60db4

$ docker-compose -v
docker-compose version 1.23.1, build b02f1306
```

これでDockerの準備はOKです！

## Rancherをインストールする

RancherはDockerのコンテナイメージが配布されています。
まずはサーバー側のコンテナを起動します。

なお、標準では8080ポートが使用されますが、よく使われるポート番号なので、ここでは9000ポートに差し替えています。

```bash
$ sudo docker run -d --restart=unless-stopped -p 9000:8080 rancher/server:stable
```

ブラウザでアクセスしてみます。
http://&lt;DockerサーバーIP&gt;:9000/
<img width="1536" alt="スクリーンショット 2018-11-11 23.22.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/e3e48da2-c51e-8cdd-b2f4-b5f72fc99533.png">
※日本語化されていない場合は、画面右下から言語を選択できます。

次にホストを追加します。
<img width="1537" alt="スクリーンショット 2018-11-11 23.25.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/3de9d38d-8f69-937d-112a-491e7ba0ea32.png">
ここでは**サイトのアドレス**を選択します。
サーバーとホストを同一のマシンに配置することも可能です。

こちらの画面の５番のコマンドをホストのPCで実行します。
<img width="1000" alt="スクリーンショット 2018-11-11 23.27.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/ad6c3327-5a8e-bbb4-8ca1-0b1719adb5c0.png">

```bash
$ sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.0.10:9000/v1/scripts/FF89B185C7918681C347:1514678400000:lXr6i25oQ9mDsC7GYk4quVRplj0
```

ホストが追加されればOKです！
<img width="266" alt="スクリーンショット 2018-11-11 23.30.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/fc52b1bc-ab5f-d2cb-b09b-04654218fd60.png">

## Jenkinsをインストールする

Rancherにはあらかじめ便利なカタログが用意されています。
Jenkinsもカタログに登録されているため、ここから登録していきます。

<img width="976" alt="スクリーンショット 2018-11-11 23.32.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/6f9ded2b-fdc0-86a1-57a7-94921f8e34f9.png">

一番左のJenkins CI serverを選択します。

<img width="975" alt="スクリーンショット 2018-11-11 23.35.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/180fba20-f2e5-577e-e629-fca48ee2ec78.png">

ここでもポート番号が8080となっていますので、被らないよう9001を選択しています。

Rancherはコンテナの集まりをスタックとして管理できます。
スタックが起動したことを確認します。
<img width="1074" alt="スクリーンショット 2018-11-11 23.37.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/406dbf82-1255-08aa-0e9d-aa1e91619990.png">

ポート番号の*9001*がリンクになっているのでクリックしてみます。

<img width="998" alt="スクリーンショット 2018-11-11 23.41.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/5edb77db-3f95-5331-fe40-b04c412541e3.png">

Jenkinsが起動したようです。
管理者パスワードはコンテナ内のファイルに記載されているため、Rancherのシェルコンソールから確認してみます。

<img width="1077" alt="スクリーンショット 2018-11-11 23.42.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/2f3c4006-abfb-03f3-9efc-33ee6132bfa1.png">

```bash
$ cat /var/jenkins_home/secrets/initialAdminPassword
```

<img width="1039" alt="スクリーンショット 2018-11-11 23.44.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/01d19204-5324-abc5-3ce5-a0fd599a9b98.png">

確認できました。
ログインしてJenkinsの初期セットアップを進めます。

<img width="1000" alt="スクリーンショット 2018-11-11 23.45.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/780338d4-7960-50db-8b99-83c0108048f7.png">

*Install suggested plugins*を選択します。

<img width="998" alt="スクリーンショット 2018-11-11 23.50.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/a7d3b440-e6cf-e7f6-56da-310f80a71672.png">

おや？Pipelineがエラーになりました。
これはJenkinsのバージョンが古いためのようです。
しかし、Jenkinsの自動アップデートが有効になっていないため、下記を参考に自動アップデートを有効にします。

- [Jenkinsの自動アップデートができないなら、書き込み権限を見なおそう](https://qiita.com/yoshi-taka/items/c59b90576e5cce897398)

・・・ただし、Rancherのシェルコンソールからrootユーザーにsuできないため、下記のコマンドでrootにログインして操作します。

```bash
$ sudo docker exec -u 0 -it <コンテナID> bash
```

```bash
$ chown -R jenkins:jenkins /usr/share/jenkins
```

再度、Jenkinsの画面を開き、アップデートしてください。
<img width="654" alt="スクリーンショット 2018-11-11 23.54.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/165224/32c917d0-2f91-2458-0a67-01775b1862a8.png">

以上でJenkinsのインストールが完了です。

お疲れ様でした！