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/
geerlingguy.jenkins
↑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がこちら↓
- hosts: localhost
roles:
- { role: geerligguy.jenkins }
~
これだけ。一緒にゲットしたgeerligguy.javaは自分のJavaのバージョンが1.8以上だったら必要ないです。
↑Javaはgeerligguy.jenkinsを動かしたら書かなくても動いてました。
続けてインベントリファイルも用意
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