Ansible-galaxyで自分にJenkinsをインストールした話

##AnsibleとJenkinsについて勉強したので
せっかくなのでAnsibleを使って自分自身にJenkinsをインストールしたので備忘録として投稿

##Ansibleとは
省略
##Jenkinsとは
省

##Ansible-galaxyとは
roleを共有できるhubサービス

roleは設定ファイルが膨大になり管理が煩雑になってしまうのをなくすために考えられたもの
(プログラミングでいうとclassみたいなイメージ？)

つまり、こまかい設定ファイル(play-book)がかけなくてもroleを落としてきて実行するだけで環境が整ってしまうといった優れものです。
もちろんansible-galaxyにあればの話ですが

##さっそくやってみよう
安直な私はとりあえず
「ansible-galaxy jenkin」とググる

検索結果の一番上にはこんなroleがありました。
URL：https://galaxy.ansible.com/geerlingguy/jenkins/

<b>geerlingguy.jenkins</b>

↑Last Commitも最近だしこれでやってみます。

インストールするには以下のコマンドを実行

環境：
Centos7
Ansible 2.5

~~~
ansible-galaxy install geerlingguy.jenkins
~~~
ではさっそくやってみましょう！

~~~
[vagrant@centos7 /]$ ansible-galaxy install geerlingguy.jenkins
- downloading role 'jenkins', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-jenkins/archive/3.3.1.tar.gz
- extracting geerlingguy.jenkins to /home/vagrant/.ansible/roles/geerlingguy.jenkins
- geerlingguy.jenkins (3.3.1) was installed successfully
- adding dependency: geerlingguy.java
- downloading role 'java', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-java/archive/1.7.7.tar.gz
- extracting geerlingguy.java to /home/vagrant/.ansible/roles/geerlingguy.java
- geerlingguy.java (1.7.7) was installed successfully
[vagrant@centos7 /]$
~~~

Get完了！
合わせてJavaのroleも取得したみたいですね
※JenkinsにはJavaの環境が必須だから

続けて、自分自身にデプロイするためにplay-bookを書きます。
※Play-bookとはAnsible専用の手順書とイメージしてください。

用意したPlay-bookがこちら↓

```yaml:main.yml
- hosts: localhost
  roles:
    - { role: geerligguy.jenkins }

~
```


これだけ。~~一緒にゲットしたgeerligguy.javaは自分のJavaのバージョンが1.8以上だったら必要ないです。~~
         ↑Javaはgeerligguy.jenkinsを動かしたら書かなくても動いてました。


続けてインベントリファイルも用意

```:hosts
localhost
```


準備は整いました、さっそくやるぞ！

~~~
[vagrant@centos7 ~]$ ansible-playbook -i hosts main.yml
ERROR! the role 'geerligguy.jenkins' was not found in /home/vagrant/roles:/home/vagrant/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/vagrant

The error appears to have been in '/home/vagrant/main.yml': line 3, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  roles:
    - { role: geerligguy.jenkins }
      ^ here

[vagrant@centos7 ~]$
~~~

ぐっ、、、失敗だ

ログみたらおそらく「そんなroleみつかんねぇ」といっている。
そういえばansible-galaxyからダウンロードしたroleの場所把握していなかった。。。

探しました。

~~~
[vagrant@centos7 ~]$ ll -a
total 32
drwx------. 8 vagrant vagrant  214 Apr  9 06:59 .
drwxr-xr-x. 3 root    root      21 Feb 28 17:52 ..
drwx------. 6 vagrant vagrant   79 Apr  6 02:24 .ansible ←このなかにいました。

~(略)~
[vagrant@centos7 ~]$ cd .ansible/
[vagrant@centos7 .ansible]$
[vagrant@centos7 .ansible]$ ll
total 12
drwx------.  2 vagrant vagrant    6 Apr  6 01:16 cp
drwxrwxr-x.  2 vagrant vagrant   30 Apr  7 06:28 pc
drwxrwxr-x.  5 vagrant vagrant   83 Apr  9 06:52 roles　←さらにこのなかに発見
drwx------. 29 vagrant vagrant 4096 Apr  9 07:02 tmp
[vagrant@centos7 .ansible]$
[vagrant@centos7 .ansible]$ cd roles/
[vagrant@centos7 roles]$ ll
total 0
drwxrwxr-x. 8 vagrant vagrant 158 Apr  9 06:52 geerlingguy.java
drwxrwxr-x. 9 vagrant vagrant 174 Apr  9 06:52 geerlingguy.jenkins
[vagrant@centos7 roles]$
~~~

みつけたぞ～、ってことはこの一段上でファイルを用意してやればよさそう。
※シンプルに参照場所をこのファイルにしてやってもよさそう。


~~~
[vagrant@centos7 .ansible]$ ll
total 12
drwx------.  2 vagrant vagrant    6 Apr  6 01:16 cp
-rw-rw-r--.  1 vagrant vagrant   10 Apr  6 01:02 hosts
-rw-rw-r--.  1 vagrant vagrant  146 Apr  6 02:24 main.yml
drwxrwxr-x.  2 vagrant vagrant   30 Apr  7 06:28 pc
drwxrwxr-x.  5 vagrant vagrant   83 Apr  9 06:52 roles
drwx------. 29 vagrant vagrant 4096 Apr  9 07:10 tmp
~~~
ってことでこんな構成へ変更

リトライ

~~~ 

[vagrant@centos7 .ansible]$ ansible-playbook -i hosts main.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in version 2.6. Deprecation
 warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: The use of 'static' has been deprecated. Use 'import_tasks' for static inclusion, or 'include_tasks' for dynamic inclusion. This feature will be removed in
 a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [localhost] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [localhost]

~(略)~

TASK [geerlingguy.jenkins : Install Jenkins plugins using password.] **************************************************************************************************************

TASK [geerlingguy.jenkins : Install Jenkins plugins using token.] *****************************************************************************************************************

PLAY RECAP ************************************************************************************************************************************************************************
localhost                  : ok=29   changed=9    unreachable=0    failed=0

[vagrant@centos7 .ansible]$
~~~

こんどこそうまくいったっぽい！

~~~
[vagrant@centos7 .ansible]$ syetemctl status jenkins
-bash: syetemctl: command not found
[vagrant@centos7 .ansible]$ systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: active (running) since Mon 2018-04-09 07:15:36 UTC; 9min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3185 ExecStop=/etc/rc.d/init.d/jenkins stop (code=exited, status=0/SUCCESS)
  Process: 3210 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/jenkins.service
           mq3232 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -Djenkins.install.runSetupWizard=false -DJENKINS_HOME=/var/lib/jenkins -jar ...
[vagrant@centos7 .ansible]$
~~~

OKできた！

##まとめ
今回はAnsible-galaxyを使ってJenkinsをデプロイしてみました。
結果的にうまくインストールすることができて満足です。
ですが中身がよく理解できていないのでroleの中を読んでどんな動きをしているか勉強したいと思います！

##※補足
ansible-galaxyでインストールしたjavaですがどうやらバージョンが1.7みたいです、jenkins側の要求バージョンが1.8のな為、今回のroleをただ実行するだけではうまくいかないです。。
罠、、、

手動でjava1.8を落っことすかしてみてください
参考コマンド
yum install java-1.8.0-openjdk