Ansible Tower是什么荣恐?
Ansible Tower是一個基于Web的用戶界面,提供了IT自動化的企業(yè)解決方案。它有一個友好用戶的儀表板來管理部署和監(jiān)控資源居触。Ansible Tower為Ansible增加自動化,可視化管理和監(jiān)控能力老赤。
為什么要使用Ansible Tower替換Ansible與Jenkins集成轮洋?
使用Ansible Tower與Jenkins集成,打開了一個充滿可能性的世界抬旺。
與一篇中介紹的《Ansible與Jenkins集成實現(xiàn)CI/CD》進行比較弊予,它可以從Jenkins中刪除很多配置,比如部署應用的服務器的訪問配置开财,管理playbook執(zhí)行汉柒,最重要的是,避免在Jenkins端配置SSH密鑰责鳍,同時Jenkins不需要知道應用程序的部署服務器地址:它可能位于公有云中碾褂,物理機中,甚至是筆記本電腦上的虛擬客戶端历葛。 把這些配置與過程都放到Ansible Tower中進行集中管理正塌。
Ansible Tower的組件
- Credentials: Ansible Tower在運行作業(yè)時,訪問Tower外部服務或者連接主機時需要進行身份驗證恤溶。Credentials則是存儲這些身份驗證的配置信息乓诽。
- Projects: Project是一組Ansible playbooks的集合,它是開始使用Tower的第一個組件宏娄。Projects中的playbooks文件可以手動添加在Tower服務器的目錄中问裕,但是一般推薦使用Git等代碼倉庫的方式存放playbooks文件,因為這樣更容易對playbooks文件進行更改與管理孵坚。
- Inventories: Inventories是ansible Tower中的Job最終執(zhí)行操作的主機粮宛,它可以通過靜態(tài)方式添加,也可以使用腳本動態(tài)添加卖宠,比如訪問CMDB服務巍杈、調(diào)用公有云API。
- Job template: Job template是Ansible Job的一個模板扛伍,它可以為Job傳遞不同的參數(shù)筷畦,認證證書、Inventories配置等碌宴。
- Job: Job是最終執(zhí)行的任務掠归,可以在Tower上查看Job的執(zhí)行過程,及日志
說明:當然以上說明只是各組件最簡單的功能介紹美旧,其實每個組件的功能都會更加豐富鼎文,我們可以自己部署Ansible Tower渔肩,并通過具體的使用來熟悉各組件的功能。
怎樣集成Ansible Tower與Jenkins?
前提:部署好了Ansible Tower和Jenkins
Ansible Tower上的設置
- 創(chuàng)建用戶jenkins給Jenkins調(diào)用Ansible Tower
Tower
- 創(chuàng)建Project拇惋,使用Git作為SCM Type周偎,并給jenkins用戶授權
Tower
-
創(chuàng)建Inventories
Tower
,將部署應用的主機信息添加到Hosts撑帖,并添加到"app_server" GroupTower
- 創(chuàng)建Inventory
- 添加應用服務器主機
- 給Inventory授權給Jenkins用戶
-
創(chuàng)建訪問應用主機的身份認證密鑰
Tower
- 添加新的認證信息蓉坎,可以是用戶名+密碼,也可以用戶名+私鑰
- 對認證信息授權給Jenkins用戶
- 創(chuàng)建Job Template
Tower
補充
:
- EXTRA VARIABLES是額外的補充參數(shù)胡嘿。
- 大部分參數(shù)都有PROMPT ON LAUNCH選項蛉艾,這個是在Template Job實際運行時,通過用戶交互的方式進行配置
- SURVEY的配置有更加友好的方式與用戶交互進行配置參數(shù)
Jenkins上的設置
- 安裝Ansible Tower插件
Jenkins
- 設置訪問Ansible Tower的登錄Credentials
Jenkins
- 在Configure System中設置Ansible Tower信息
Jenkins
- 新建Jenkins Job灶平,設置Ansible Tower Job
jenkins
pipeline{
agent any
stages{
statge("構建應用"){
echo '構建應用'
}
statge("Jar包上傳"){
echo 'Jar包上傳到Nexus,以供Ansible Tower中的playbook下載部署'
}
stage("觸發(fā)Ansible Tower Job"){
ansibleTower credential: '2',
extraVars: '''APPNAME: App
ARTIFACT_URL: http://test.com/app/1.0.jar''',
importTowerLogs: false,
inventory: '2',
jobTemplate: '8',
templateType: 'job',
throwExceptionWhenFail: false,
towerServer: 'ansible tower',
verbose: false
}
}
}
通過Jenkins Job的觸發(fā)就會觸發(fā)Ansible Tower中id為8的Job Template生成新的Job進行應用部署伺通。
最后一句話作為總結:
Ansible Tower與Jenkins雙劍合璧才是運維自動化正確的打開方式。
參考資料
Take Ansible and Jenkins Integration to the next level: CI/CD with Ansible Tower
Ansible Tower官方文檔