JenkinsからAnsibleを実行(2/2)

前回でAnsibleの環境の構築と直接Ansibleを実行させてLinuxとWindowsでの実行を確認しました。今回は前回作ったAnsible環境にJenkinsを導入しておじさんにAnsibleを実行してもらいます
***
前回のリンク：JenkinsからAnsibleを実行(1/2)
http://qiita.com/yo_dazy/items/08ed86f53e3233fe14bb
***
#####■内容

| 項目 | server1 | Client-lin | Client-win |
|:-:|:-:|:-:|:-:|
|OS|RHEL7|RHEL7|Win2k12|
|package|Ansible(前回導入)<br>Jenkins(今回導入)|考え中|考え中|
***

#####■Jenkins導入

前回Ansibleを導入した｢Server1｣にJenkinsを導入します。Jenkinsを入れることでWEBページからAnsible実行を目指します
ちなみにJenkinsではデフォルトで8080を使いますので事前にポートを開放しておきます

- Javaの導入<br>
  Jenkinsの前提条件。JenkinsはJavaで動いているから必要

```
[root@server1 yum.repos.d]# yum -y install java-1.7.0-openjdk
<中略>
Complete!
[root@server1 yum.repos.d]# java -version
java version "1.7.0_121"
OpenJDK Runtime Environment (rhel-2.6.8.0.el7_3-x86_64 u121-b00)
OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)
[root@server1 yum.repos.d]#
```
- Jenkinsの導入<br>
  YUMで入れたいため、リポジトリから登録します

```ruby:/etc/yum.repos.d
[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1
```
```
[root@server1 /]# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
[root@server1 /]# yum -y install jenkins
<中略>
Complete!
[root@server1 /]#
```
- Jenkinsサービス設定
  再起動後も自動起動させます

```
[root@server1 /]# systemctl start jenkins
[root@server1 /]# chkconfig jenkins on
```

- Jenkins起動<br>
　ブラウザから下記にアクセス

```
http://<PublicIP>:8080
```
***
#####■Jenkinsセットアップ

1)ブラウザに記載しているパスを確認しアンロックする。

```
[root@server1 /]# cat /var/lib/jenkins/secrets/initialAdminPassword
XXXXXXXXXXXXXXXXXXXXXX (内容コピー)
[root@server1 /]# 
```
![01.png](https://qiita-image-store.s3.amazonaws.com/0/150678/8a805132-7cc7-9155-de05-368b492563e9.png)


2) [Install suggested plugin]を選択
![02.png](https://qiita-image-store.s3.amazonaws.com/0/150678/11817aa9-f00d-27bc-7908-b284fc8f53be.png)

3)Plugin　インストール中
![03.png](https://qiita-image-store.s3.amazonaws.com/0/150678/279a95a6-f6b5-60c1-bb4e-c5b2bf368609.png)

4)ユーザ名等入力

| 項目 | 設定値 |
|:-:|:-:|
|ユーザ名|Adomin（間違えた(笑))|
|パスワード| 内緒 |
|本名|hogehoge|
|メール|hogehoge@hogehoge|

![04.png](https://qiita-image-store.s3.amazonaws.com/0/150678/ed0ea123-33c0-cc74-578b-dadd3ec27351.png)

5) Save and Finishで次へ
![05.png](https://qiita-image-store.s3.amazonaws.com/0/150678/834e7aaf-0c6b-77a3-f9ec-e2dfca8aaffe.png)

6)新規ジョブを作成
![06.png](https://qiita-image-store.s3.amazonaws.com/0/150678/25266024-8f79-ad8c-1e71-de7b01446bf0.png)

Jenkinsのインストールは出来ました。次はAnsibleジョブを作ってJenkinsから実行します！！！
***
#####■Job実行事前作業
  通常JenkinsではJenkinsユーザをもって実行しますがjenkinsではAnsibleの実行が出来ません。そのためAnsibleもJenkinsも実行できるrootに実行ユーザを変更します。
（rootじゃなくても実行できればOK！！）

- jenkins実行ユーザ変更

```
[root@server1 /]# vi /etc/sysconfig/jenkins
```
```ruby:/etc/sysconfig/jenkins
(def)JENKINS_USER="jenkins"
(edi)JENKINS_USER="root"
```
- Jenkinsのディレクトリの所有者を変更


```
#変更前確認
[root@server1 /]# ls -la /var/lib/ |grep jenkins
drwxr-xr-x. 13 jenkins jenkins 4096 Nov 23 04:26 jenkins
[root@server1 /]# ls -la /var/log/ | grep jenkins
drwxr-x---.  2 jenkins jenkins     25 Nov 23 04:05 jenkins
[root@server1 /]# ls -la /var/cache | grep jenkins
drwxr-x---.  3 jenkins jenkins   17 Nov 23 04:05 jenkins
```

```
#オーナー変更
[root@server1 /]# chown -R root: /var/lib/jenkins /var/log/jenkins /var/cache/jenkins
```
```
#変更後確認
[root@server1 /]# ls -la /var/log/ | grep jenkins
drwxr-x---.  2 root   root       25 Nov 23 04:05 jenkins
[root@server1 /]# ls -la /var/lib/ |grep jenkins
drwxr-xr-x. 13 root    root    4096 Nov 23 04:26 jenkins
[root@server1 /]# ls -la /var/cache | grep jenkins
drwxr-x---.  3 root root   17 Nov 23 04:05 jenkins
[root@server1 /]#
```
これでrootから実行できる環境が整いました。次はいよいよジョブを作ってAnsibleを実行します

***
- ジョブの登録と実行<br>
  JenkinsWebページからAnsibleを実行するジョブを作成します

1)jenkins(http://<publicIP>:8080)へアクセスしログイン
ユーザー名：adomin
パスワード：
![07.png](https://qiita-image-store.s3.amazonaws.com/0/150678/676beffd-d07d-86ce-ce48-77b5a10d228a.png)

2)新規ジョブ作成

```
｢新規ジョブの作成｣を選択
```

![06.png](https://qiita-image-store.s3.amazonaws.com/0/150678/25266024-8f79-ad8c-1e71-de7b01446bf0.png)

3)下記設定後「OK」をクリックしてジョブを作成

```
Enter an item name　　　　　：　ジョブの名前
フリースタイル・プロジェクト　：　選択
```
![9.png](https://qiita-image-store.s3.amazonaws.com/0/150678/139067a6-e527-22ad-ddbb-f11ef2a0a61c.png)

4)ビルド内容の作成

- ビルド手順の追加
- シェルの実行
![10.png](https://qiita-image-store.s3.amazonaws.com/0/150678/984df620-d72c-d4e2-fb46-a788c162a446.png)

5)シェルスクリプトの作成
下記コマンドを記載後｢保存｣する

```
whoami
ansible-playbook -i /playbook/hosts /playbook/sitelin.yml
ansible-playbook -i /playbook/hosts /playbook/sitewin.yml
```
![11.png](https://qiita-image-store.s3.amazonaws.com/0/150678/aa275322-8ed0-48ab-41af-540913be32f8.png)

6)　作成したプロジェクトを実行する

```
｢ビルドの実行｣を選択
```
![12.png](https://qiita-image-store.s3.amazonaws.com/0/150678/54a69c44-5a9b-2891-8f1d-cb94ea19417a.png)

7)実行結果を確認

```
｢ビルド履歴｣を確認
青　･･･　成功
赤　･･･　失敗
```
![15.png](https://qiita-image-store.s3.amazonaws.com/0/150678/891607f3-13b4-5d34-75c5-6c94f9df2803.png)

8)詳細を確認する

```
｢ビルド履歴｣より表示されているビルドを選択
｢コンソール出力｣を選択
```

```
成功例(#1)
```

![16.png](https://qiita-image-store.s3.amazonaws.com/0/150678/0122cc83-f1df-79db-94b8-3476229fd341.png)

```
Started by user hogehoge
Building in workspace /var/lib/jenkins/workspace/test_Ansible
[test_Ansible] $ /bin/sh -xe /tmp/hudson1412063715726393661.sh
+ whoami
root
+ ansible-playbook -i /playbook/hosts /playbook/sitelin.yml

PLAY [Linux Playbook] **********************************************************

TASK [setup] *******************************************************************
ok: [client-lin]

TASK [linrole : For Linux] *****************************************************
ok: [client-lin]

PLAY RECAP *********************************************************************
client-lin                 : ok=2    changed=0    unreachable=0    failed=0   

+ ansible-playbook -i /playbook/hosts /playbook/sitewin.yml

PLAY [Windows Playbook] ********************************************************

TASK [setup] *******************************************************************
ok: [ec2-35-164-42-228.us-west-2.compute.amazonaws.com]

TASK [winrole : For Windows] ***************************************************
ok: [ec2-35-164-42-228.us-west-2.compute.amazonaws.com]

PLAY RECAP *********************************************************************
ec2-35-164-42-228.us-west-2.compute.amazonaws.com : ok=2    changed=0    unreachable=0    failed=0   

Finished: SUCCESS
```

```
失敗例(#2)
```

```
Started by user hogehoge
Building in workspace /var/lib/jenkins/workspace/test_Ansible
[test_Ansible] $ /bin/sh -xe /tmp/hudson1612836430103786086.sh
+ b
/tmp/hudson1612836430103786086.sh: line 2: b: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE
```

成功！！！
***
まとめ
1回目と2回目に分けてJenkinsからAnsibleを実行するをテーマに初投稿してみました。感想としては結構面白かった！！
今度はClient-linにGitLab乗っけてWindowクライアントからの操作を考えてます。気合が入ってたらプレイブックで環境作るのも面白そうです！！