本文讲的是 : 浅谈基于Ansible持续部署自动化 , 【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.11
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 >> {
"changed": false,
"ping": "pong"
}
192.168.100.12 | success >> {
"changed": false,
"ping": "pong"
}
默认不指定-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日
本文作者: 曲家富
原文标题 :浅谈基于Ansible持续部署自动化