備忘録/にわかエンジニアが好きなように書く

個人的にとりあえず仕組みを知るためにとりあえず動くまで構築や動作をみただけの単なる操作ログです。個人用の備忘録となり、最新の導入手順は個別に確認してください。 ※変な内容や間違いを書いているなどありましたらコメントやご指摘いただけると幸いです。

JenkinsからANSIBLEのPLAYBOOKを実行

Jenkinsとは?

継続的な統合とビルドの自動化を行うためのCIツール

・前処理:トリガー指定(定期実行 , 手動実行 , CLI ・・・) 

・ビルド:シェル , selenium , ansible などの実行

      コマンドライン操作が可能なら外部ツールが使える

・後処理:ビルド結果のアーカイブ , グラフ化 , 出力確認 ,など

※必要に応じた様々なプラグインを追加することによって機能拡張ができます。

 

なぜJenkins?

・無料で気軽に試せる

・同じ手順で実行できる。実行した結果が残すことができる。

・結果の履歴も保存できる。

・いろいろなプラグインやルーツの使うことが可能

・ビルドからリリースまでの一連の流れを可視化

 

使い方イメージ①

f:id:pocket01:20171028104111p:plain

1.Job実行

2.実行指示

 3.テスト実行

4.結果通知

 

使い方イメージ②

f:id:pocket01:20171028010435p:plain

 

パイプラインを使うと色々と融通がきく一連のフローを作れそうかも。

f:id:pocket01:20171109001653p:plain

でも、開発は担当したことがないので使い方は一般的な感じしかわかりません。

レポジトリ情報などでコードの更新が発生する(トリガーにして)と、開発環に

コードのデプロイを行ってくれる。

 さらにテストも外部ツールとの連携することによって自動で実施し、テスト結果を

 開発者に通知してくれる。

 

JenkinsからANSIBLEのPLAYBOOKを実行

確認用構成

f:id:pocket01:20171029194134p:plain

確認する動作

Jenkins端末からAnsible端末に接続を行ってPLAYBOOKを実行する。

(PLAYBOOKの内容はSRXのセッション取得確認する。)

・AnsibleのPLAYBOOKの作成と実行確認

・Jenkins設定登録のジョブ作成と実行確認

 - AnsibleのPLAYBOOK実行確認

 

事前準備

Jenkinsがインストール済み

SRXで netconf "set system services netconf ssh" が有効であること。

実施手順

 

ANSIBLEのインストール 

Installation — Ansible Documentation

http://docs.ansible.com/ansible/latest/intro_installation.html

1-1.EPELのインストール
# yum install -y epel-release.noarch 
1-2.ANSIBLEのインストール
# yum install -y ansible
1-3.ANSIBLEのバージョン確認
# ansible --version
ansible 2.4.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
#
1-4.ansible-galaxyでJUNOS用ロールをインストール
# ansible-galaxy install Juniper.junos
- downloading role 'junos', owned by Juniper
- downloading role from https://github.com/Juniper/ansible-junos-stdlib/archive/1.4.3.tar.gz
- extracting Juniper.junos to /etc/ansible/roles/Juniper.junos
- Juniper.junos (1.4.3) was installed successfully
#
# python /etc/ansible/roles/Juniper.junos/setup.py install
running install
running bdist_egg

 ~ snip ~

Installed /usr/lib/python2.7/site-packages/ansible_junos_stdlib-1.4.3-py2.7.egg
Processing dependencies for ansible-junos-stdlib==1.4.3
Finished processing dependencies for ansible-junos-stdlib==1.4.3
#
# yum -y install python-pip

 ~ snip ~

インストール:
python2-pip.noarch 0:8.1.2-5.el7

完了しました!
#
# pip install junos-eznc
Collecting junos-eznc
Downloading junos_eznc-2.1.7-py2.py3-none-any.whl (150kB)
100% |????????????????????????????????| 153kB 1.9MB/s

 ~ snip ~

Uninstalling lxml-3.2.1:
Successfully uninstalled lxml-3.2.1
Running setup.py install for ncclient ... done
Successfully installed junos-eznc-2.1.7 lxml-4.1.1 ncclient-0.5.3 netaddr-0.7.19 pyserial-3.4 scp-0.10.2
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
#

ANSIBLE用のPLAYBOOK作成

※SRX用の参考情報

http://junos-ansible-modules.readthedocs.io/en/1.4.3/

■hosts
# cat hosts
[SRX]
192.168.20.1
[SRX:vars]
srx_user=user
srx_pass=p@ssword

■playbook
# cat junos_get_flow.yml
---
- name: LoadJunos
hosts: SRX
roles:
- Juniper.junos
gather_facts: no
connection: local

 tasks:
- name: Checking NETCONF
wait_for: host={{ inventory_hostname }} port=830 timeout=5

- junos_cli:
host: "{{ inventory_hostname }}"
passwd: "{{ srx_pass }}"
user: "{{ srx_user }}"
cli: "show security flow session"
logfile: cli.log
dest: "{{ inventory_hostname }}.txt"
format: text

 ※ローカルでのAnsibleによるテスト

[root@ansible ansible]# ansible-playbook ./junos_get_flow.yml

PLAY [LoadJunos] ***************************************************************************************************

TASK [Checking NETCONF] *******************************************************************************
ok: [192.168.20.1]

TASK [junos_cli] ***************************************************************************************************
ok: [192.168.20.1]

PLAY RECAP *********************************************************************************************************
192.168.20.1 : ok=2 changed=0 unreachable=0 failed=0

# ls
192.168.20.1.txt cli.log hosts junos_get_flow.yml roles                   ※ログファイルが作成される
# more 192.168.20.1.txt

Session ID: 6071, Policy name: self-traffic-policy/1, Timeout: 1784, Valid
In: 192.168.20.3/64318 --> 192.168.20.1/22;tcp, If: ge-0/0/1.0, Pkts: 1068, Bytes: 108078
Out: 192.168.20.1/22 --> 192.168.20.3/64318;tcp, If: .local..0, Pkts: 883, Bytes: 116457

Session ID: 7150, Policy name: self-traffic-policy/1, Timeout: 1798, Valid
In: 192.168.20.166/56056 --> 192.168.20.1/830;tcp, If: ge-0/0/1.0, Pkts: 35, Bytes: 5372
Out: 192.168.20.1/830 --> 192.168.20.166/56056;tcp, If: .local..0, Pkts: 31, Bytes: 6717
Total sessions: 2
# more cli.log
2017-11-06 01:07:14,705:CONFIG:192.168.20.1:connecting to host: user@192.168.20.1:830
2017-11-06 01:07:14,757:ncclient.transport.ssh:Connected (version 2.0, client OpenSSH_6.6)
2017-11-06 01:07:15,047:ncclient.transport.ssh:Authentication (publickey) successful!
2017-11-06 01:07:15,607:ncclient.transport.session:initialized: session-id=2152 | server_capabilities=<dictionary-ke
yiterator object at 0x7f4bcc1f2e10>
2017-11-06 01:07:15,607:CONFIG:192.168.20.1:Getting cli output
2017-11-06 01:07:15,608:ncclient.operations.rpc:Requesting 'ExecuteRpc'
2017-11-06 01:07:15,727:ncclient.operations.rpc:Requesting 'ExecuteRpc'
2017-11-06 01:07:16,248:ncclient.operations.rpc:Requesting 'CloseSession'
#

  

ANSIBLE用のプラグイン追加

1-1.Jenkinsの管理メニューから"プラグインの管理"を選択

  f:id:pocket01:20171029131023p:plain

1-2."Ansible plugin"のプラグインを追加する。

・利用可能タブを選択し、Jenkinsにインストールすることが可能なプラグイン一覧を表示させる。

・フィルター機能を使用して、”Ansible plugin”プラグインを選択しインストールする。

・インストール後はJenkinsの再起動を実施する。

  f:id:pocket01:20171029204713p:plain

 ※プラグイン名をクリックすると、該当プラグインの詳細情報のサイトが表示され確認できます。

 

  【インストール中の画面】      【インストール完了の画面】

  f:id:pocket01:20171029205230p:plain f:id:pocket01:20171029205250p:plain

  "インストール完了後、ジョブがなければJenkinsを再起動する"にチェックを入れるとJenkinsの再起動を行ってくれる(はず)

  ※10-20分待っても再起動が始まらない場合があった。

1-3.プラグインが登録されたことを確認

 再ログイン後に、"プラグインの管理" >> インストール済みタブを選択  

  f:id:pocket01:20171029205513p:plain 

 

Jenkinsのジョブ作成と設定

1-1.新規ジョブの作成

   f:id:pocket01:20171028193301p:plain

 

    Job設定用画面が開くので、ジョブ名の入力ジョブ種類を選択を行い

    "OK" をクリックする。

  f:id:pocket01:20171029153620p:plain

1-2.ジョブの設定

 1.プラグイン管理の「利用可能」から SSH pluginをインストールします。
 2.システムの設定で「SSHリモートホスト」からSSHサイトの登録をします。

 f:id:pocket01:20171112205007p:plain

 

f:id:pocket01:20171112205329p:plain

SSHサイト:SSHリモートホストで登録したホストを選択 

シェルスクリプトの内容:

ansible-playbook /etc/ansible/junos_get_flow.yml

cat /etc/ansible/192.168.20.1.txt
exit

ビルド実行

    左のメニューのビルド実行をクリックする。

    f:id:pocket01:20171112201959p:plain

結果参照① コンソール出力

    左側のビルド履歴から"▼"をクリックしてコンソール出力をクリックすると実行結果が表示される。

  f:id:pocket01:20171112202326p:plain

  f:id:pocket01:20171112201844p:plain

結果参照② 実行履歴

    左側のビルド履歴から"推移"をクリックすると表示される。

  f:id:pocket01:20171112202943p:plain

 

  f:id:pocket01:20171112202931p:plain