出来るだけ最短で Jenkins 環境を試したい(jenkins container + docker CE + CentOS7 + vagrant)

# 出来るだけ最短で Jenkins 環境を試したい(jenkins container + docker CE + CentOS7 + vagrant)

- Install jenkins container on vagrant centos7 box

## 目的

- jenkins を取り急ぎ使ってみたい
- できるだけ楽に構築したい
  - OS は vagrant でデプロイする(CentOS7)
  - jenkins は公式で docker コンテナを出してくれているので利用する

## 前提

- vagrant + CentOS7 Box が利用できる
- Unix ホストもしくはそれと同等のホスト環境
    - ssh クライアントツール類がある

## 既知の問題への対応 (2017/03/10 時点)

### 制限: 公式 jenkins 配布コンテナは UID 1000 の jenkins ユーザーで動作する

- https://github.com/jenkinsci/docker/issues/177
- http://stackoverflow.com/questions/34706077/starting-jenkins-in-docker-container

### 問題: CentOS7 公式 Box の vagrant ユーザーの UID が 1000 で衝突する

```shell-session
[vagrant@localhost ~]$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
```

### 対応方法1: 別ユーザーを作成してから vagrant ユーザーの UID を変更してからコンテナを起動する

- 手順の中で記載します

### 対応方法2: 力技で vagrant ユーザーの UID を変更する

- 今回は詳細には記載しませんが以下のような方法でも可能かと思います

```shell-session
sudo vi /etc/passwd
sudo chown -R 1001:1000 /home/vagrant

cd /home/vagrant/
find . -user 1000 -exec chown -h vagrant {} \;
```

## リファレンス

- https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+with+Docker

## 事前準備

- On Host OS
    - Vagrant File

```shell-session
% cat Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", type: "dhcp"
end

% vagrant up
% vagrant ssh
```

- On CentOS7 Box

```shell-session:あとでHostとの通信に使います
[vagrant@localhost ~]$ ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:1c:5f:47 brd ff:ff:ff:ff:ff:ff
    inet 172.28.128.6/24 brd 172.28.128.255 scope global dynamic eth1
       valid_lft 1078sec preferred_lft 1078sec
    inet6 fe80::a00:27ff:fe1c:5f47/64 scope link
       valid_lft forever preferred_lft forever
```

> BOX_DCHP_IP_ADDR としてメモ

```shell-session
USERNAME1=hirofumi
```
```shell-session
sudo useradd -m -u 1001 -g vagrant $USERNAME1
sudo su - $USERNAME1

mkdir .ssh
chmod 700 .ssh/
exit

sudo passwd $USERNAME1
exit
```

- On Host OS

```shell-session
% ssh-keygen -t rsa -f ./id_rsa
```
```shell-session:Box上の.ssh/authorized_keysに貼り付け用コピー
% cat id_rsa.pub
```

- On CentOS7 Box

```shell-session:id_rsa.pubの内容を貼り付け
USERNAME1=hirofumi
sudo su - $USERNAME1
cd .ssh
vi authorized_keys
chmod 600 authorized_keys
exit
exit
```

- On Host OS

```shell-session
% USERNAME1=hirofumi
% ssh -i ./id_rsa $USERNAME1@<BOX_DCHP_IP_ADDR>
```

> ここまでで別ユーザーでの接続が完了

- On CentOS7 box

```shell-session
sudo id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)

sudo usermod -u 1002 vagrant

sudo id vagrant
uid=1002(vagrant) gid=1000(vagrant) groups=1000(vagrant)

grep 1000 /etc/passwd
vagrant:x:1002:1000:vagrant:/home/vagrant:/bin/bash
hirofumi:x:1001:1000::/home/hirofumi:/bin/bash
```

> UID 1000 のユーザーがいなければ準備完了です

```shell-session
exit
```

## 手順


### 1. Docker CE のインストール

- On Host OS

```shell-session:vagrantユーザーで再ログイン
vagrant ssh
```

- On CentOS7 Box

ref. https://docs.docker.com/engine/installation/linux/centos/#install-using-the-repository

```shell-session
sudo yum -y update
sudo yum install -y yum-utils

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

sudo yum makecache fast

sudo yum install docker-ce

sudo systemctl status docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker

sudo docker run hello-world

sudo docker --version
Docker version 17.03.0-ce, build 3a232c8
```

### 2. jenkins ユーザーの追加

```shell-session
sudo useradd -u 1000 jenkins
mkdir jenkins
sudo chown jenkins: jenkins/
```

### 3. jenkins コンテナ起動

```shell-session
sudo docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins
```
```shell-session:コンテナID確認
[vagrant@localhost ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
b676e38e4d66        jenkins             "/bin/tini -- /usr..."   37 seconds ago      Up 34 seconds       50000/tcp, 0.0.0.0:49001->8080/tcp   gifted_fermi

CONTAINER_ID=b676e38e4d66
```
```shell-session:jenkinsパスワードの確認
$ sudo docker exec $CONTAINER_ID cat /var/jenkins_home/secrets/initialAdminPassword
```

> コピペ出来るように準備

### 4. ブラウザ確認

- On Host OS

メモっておいた BOX_DCHP_IP_ADDR に 49001 ポートでアクセスします。

> http://BOX_DCHP_IP_ADDR:49001

以下の画面が表示されていれば成功です

![Screenshot 2017-03-15 03.37.20.png](https://qiita-image-store.s3.amazonaws.com/0/67892/cd233485-60b4-8fae-5f56-17503d12ce7c.png)

> 手順 3. で準備しておいたパスワードをコピペ

### 5. おすすめに従って Install suggested plugins に進みましょう

![Screenshot 2017-03-15 03.41.55.png](https://qiita-image-store.s3.amazonaws.com/0/67892/6a5fed0c-8f8f-a5ec-d84a-7965a00391f3.png)

### 6. しばし待つ

![Screenshot 2017-03-15 03.43.08.png](https://qiita-image-store.s3.amazonaws.com/0/67892/182ac011-0e9e-a1f2-adba-4b02c50cc2cf.png)

### 7. Adminユーザーを作ります

![Screenshot 2017-03-15 03.46.10.png](https://qiita-image-store.s3.amazonaws.com/0/67892/e82cba36-be03-99e6-1a31-553ee2030d4d.png)

![Screenshot 2017-03-15 03.47.11.png](https://qiita-image-store.s3.amazonaws.com/0/67892/38ae04b0-1c51-818a-42ba-31f4ba212a2f.png)

### 8. おわり

![Screenshot 2017-03-15 03.47.37.png](https://qiita-image-store.s3.amazonaws.com/0/67892/361d674d-ae94-2195-b8e9-0ba46b2d86de.png)