Jenkinsとは?
継続的な統合とビルドの自動化を行うためのCIツール
・前処理:トリガー指定(定期実行 , 手動実行 , CLI ・・・)
・ビルド:シェル , selenium , ansible などの実行
コマンドライン操作が可能なら外部ツールが使える
・後処理:ビルド結果のアーカイブ , グラフ化 , 出力確認 ,など
※必要に応じた様々なプラグインを追加することによって機能拡張ができます。
なぜJenkins?
・無料で気軽に試せる
・同じ手順で実行できる。実行した結果が残すことができる。
・結果の履歴も保存できる。
・いろいろなプラグインやルーツの使うことが可能
・ビルドからリリースまでの一連の流れを可視化
使い方イメージ①
1.Job実行
2.実行指示
3.テスト実行
4.結果通知
使い方イメージ②
パイプラインを使うと色々と融通がきく一連のフローを作れそうかも。
でも、開発は担当したことがないので使い方は一般的な感じしかわかりません。
レポジトリ情報などでコードの更新が発生する(トリガーにして)と、開発環に
コードのデプロイを行ってくれる。
さらにテストも外部ツールとの連携することによって自動で実施し、テスト結果を
開発者に通知してくれる。
JenkinsからANSIBLEのPLAYBOOKを実行
確認用構成
確認する動作
Jenkins端末からAnsible端末に接続を行ってPLAYBOOKを実行する。
(PLAYBOOKの内容はSRXのセッション取得確認する。)
・AnsibleのPLAYBOOKの作成と実行確認
・Jenkins設定登録のジョブ作成と実行確認
- AnsibleのPLAYBOOK実行確認
事前準備
Jenkinsがインストール済み
SRXで netconf "set system services netconf ssh" が有効であること。
実施手順
- 確認用構成
- 確認する動作
- 事前準備
- 実施手順
- ANSIBLEのインストール
- ANSIBLE用のPLAYBOOK作成
- ANSIBLE用のプラグイン追加
- Jenkinsのジョブ作成と設定
- ビルド実行
- 結果参照① コンソール出力
- 結果参照② 実行履歴
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の管理メニューから"プラグインの管理"を選択
1-2."Ansible plugin"のプラグインを追加する。
・利用可能タブを選択し、Jenkinsにインストールすることが可能なプラグイン一覧を表示させる。
・フィルター機能を使用して、”Ansible plugin”プラグインを選択しインストールする。
・インストール後はJenkinsの再起動を実施する。
※プラグイン名をクリックすると、該当プラグインの詳細情報のサイトが表示され確認できます。
【インストール中の画面】 【インストール完了の画面】
"インストール完了後、ジョブがなければJenkinsを再起動する"にチェックを入れるとJenkinsの再起動を行ってくれる(はず)
※10-20分待っても再起動が始まらない場合があった。
1-3.プラグインが登録されたことを確認
再ログイン後に、"プラグインの管理" >> インストール済みタブを選択
Jenkinsのジョブ作成と設定
1-1.新規ジョブの作成
Job設定用画面が開くので、ジョブ名の入力・ジョブ種類を選択を行い
"OK" をクリックする。
1-2.ジョブの設定
1.プラグイン管理の「利用可能」から SSH pluginをインストールします。
2.システムの設定で「SSHリモートホスト」からSSHサイトの登録をします。
SSHサイト:SSHリモートホストで登録したホストを選択
シェルスクリプトの内容:
ansible-playbook /etc/ansible/junos_get_flow.yml
cat /etc/ansible/192.168.20.1.txt
exit
ビルド実行
左のメニューのビルド実行をクリックする。
結果参照① コンソール出力
左側のビルド履歴から"▼"をクリックしてコンソール出力をクリックすると実行結果が表示される。
結果参照② 実行履歴
左側のビルド履歴から"推移"をクリックすると表示される。