前回で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(前回導入) Jenkins(今回導入) |
考え中 | 考え中 |
■Jenkins導入
前回Ansibleを導入した「Server1」にJenkinsを導入します。Jenkinsを入れることでWEBページからAnsible実行を目指します
ちなみにJenkinsではデフォルトで8080を使いますので事前にポートを開放しておきます
- Javaの導入
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の導入
YUMで入れたいため、リポジトリから登録します
[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起動
ブラウザから下記にアクセス
http://<PublicIP>:8080
■Jenkinsセットアップ
1)ブラウザに記載しているパスを確認しアンロックする。
[root@server1 /]# cat /var/lib/jenkins/secrets/initialAdminPassword
XXXXXXXXXXXXXXXXXXXXXX (内容コピー)
[root@server1 /]#
2) [Install suggested plugin]を選択
4)ユーザ名等入力
項目 | 設定値 |
---|---|
ユーザ名 | Adomin(間違えた(笑)) |
パスワード | 内緒 |
本名 | hogehoge |
メール | hogehoge@hogehoge |
Jenkinsのインストールは出来ました。次はAnsibleジョブを作ってJenkinsから実行します!!!
■Job実行事前作業
通常JenkinsではJenkinsユーザをもって実行しますがjenkinsではAnsibleの実行が出来ません。そのためAnsibleもJenkinsも実行できるrootに実行ユーザを変更します。
(rootじゃなくても実行できればOK!!)
- jenkins実行ユーザ変更
[root@server1 /]# vi /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を実行します
- ジョブの登録と実行
JenkinsWebページからAnsibleを実行するジョブを作成します
1)jenkins(http://:8080)へアクセスしログイン
ユーザー名:adomin
パスワード:
2)新規ジョブ作成
「新規ジョブの作成」を選択
3)下記設定後「OK」をクリックしてジョブを作成
Enter an item name : ジョブの名前
フリースタイル・プロジェクト : 選択
4)ビルド内容の作成
5)シェルスクリプトの作成
下記コマンドを記載後「保存」する
whoami
ansible-playbook -i /playbook/hosts /playbook/sitelin.yml
ansible-playbook -i /playbook/hosts /playbook/sitewin.yml
6) 作成したプロジェクトを実行する
「ビルドの実行」を選択
7)実行結果を確認
「ビルド履歴」を確認
青 ・・・ 成功
赤 ・・・ 失敗
8)詳細を確認する
「ビルド履歴」より表示されているビルドを選択
「コンソール出力」を選択
成功例(#1)
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クライアントからの操作を考えてます。気合が入ってたらプレイブックで環境作るのも面白そうです!!