本文講的是 : <b> 淺談基于Ansible持續部署自動化 </b> , 【IT168技術】随着各種計算機虛拟技術的不斷發展,雲計算的工業化水準也日漸成熟。在新的形勢下,IT運維面臨着來自各個方面的挑戰,維護的機器數量從數十個幾百個到成千上萬個,應用的結構變得越來越複雜,更新的速度也越來越快。各種自動化配置管理工具也在這種生态環境中應運而生,如puppet,saltstack,ansible。本文将用ansible來具體讨論其在不同場景下的使用方法,進而使運維和開發人員更加輕松的應對各種配置管理及應用部署需求。
本文用ansible部署為例,着重探讨ansible作為自動化工具在各種環境下的使用,包括如下幾方面内容:
Ansible工具簡介
配置管理和應用部署自動化
結合jenkins持續部署自動化
小結
1. Ansible工具簡介
1.1. 簡介
原引官方的說法“ansible是簡單的自動化IT工具”。 其目的是:配置管理自動化,應用部署自動化,持續傳遞自動化等等。 究其根本和其他配置管理工具并沒有本質差別,像個內建工具箱,可以遠端發送指令給其他的伺服器進行配置管理和應用部署,也可以随時通過各種程式設計語言進行子產品擴充。它的顯著特點是:
提供一個簡單可程式設計的流程菜單,可以按照事先定義好的邏輯來執行相關的操作,自動完成部署需求
無需用戶端或代理來遠端管理伺服器
基于paramiko(Python實作的ssh協定庫)完成所有的部署任務
1.2. ansible和 ansible-playbook使用方式
Ansible指令是ansible提供的指令行工具,基于hosts清單來使用,具體如下:
ansible <host組名> [-f 并發數量] [-m 子產品名字] [-a args] -i host清單名
預設的Host 清單配置檔案在/etc/ansible/hosts,也可以定制新的路徑。内容格式與window下的.ini檔案類似。
#hosts
[web]
192.168.100.10
192.168.100.11
[db]
192.168.100.12
這裡定義了倆個組,伺服器可以是名字也可以是IP位址,同一個伺服器可以屬于不同的組。
用使用者root向所有的伺服器發ping指令,-k需要輸入root密碼,也可以現将所有伺服器的密鑰批量添加到本地,就可以無互動操作遠端機器。
$ ansible all -m ping -u root -k -i hosts
SSH password:
192.168.100.10 | success >> {
"changed": false,
"ping": "pong"
}
192.168.100.11 | success >> {
192.168.100.12 | success >> {
預設不指定-m參數的時候使用的module隻是執行指令,不會用一些shell下的environment變量等設定
copy|file--檔案複制及檔案屬性設定
$ansible dbservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"
$ansible webservers -m file -a "dest=/srv/foo/test.txt mode=600 owner=test group=test"
git--使用git指定伺服器
$ansible webservers -m git -a "repo=git://test.example.org/repo.git dest=/srv/myapp version=HEAD"
service--對指定服務操作
ansible webservers -m service -a "name=httpd state=started"
指令行工具提供簡單任務操作,實際部署應用常常需要很多操作。ansible-playbook則可以按照一定先後順序和邏輯關系事先定義好所有操作,然後一次完成所有的部署任務。
如下例部署apache服務:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
說明:在所有的webservers服務上以root身份按照最新的httpd,用httpd.j2做模闆配置新的服務,配置之後重新開機httpd服務。
執行playbook指令即可完成所有部署,“-f 10”表示一次最多可同時在10個伺服器上執行:
$ ansible-playbook playbook.yml -f 10
2. 配置管理和應用部署自動化
簡單介紹之後,我們對ansible的使用方式有了大概的了解。接下來将用幾個執行個體來具體展示ansible在不同場景下的使用模式。
原文釋出時間為:2015年7月6日
本文作者: 曲家富
本文來自雲栖社群合作夥伴IT168,了解相關資訊可以關注IT1684
原文标題 :淺談基于Ansible持續部署自動化