由于公司没有运维人员,每次发布项目都须要手动编译,手工发布,特别浪费时间,发布几回之后就烦了,就想着全换成自动化方式打包发布,通过几个筛选终于选定用ansible来作自动化打包发布。今后节约大把的时间来听听歌看看书喝喝茶了。。。通过实践表面,在没有运维岗的时候,ansible绝对是中小创业公司项目发布的最佳选择!python
ansible其实就是一个能够经过SSH与远程服务器进行链接交互的工具,它内置了不少模块可让你轻松的经过 命令或者编写playbook剧本操做远程服务器,linux
安装ansible很简单,个人系统是centsos7.2,直接敲,yum install ansible -y
便可
windows系统能够考虑安装个cygwin,来模拟进行linux操做,在cygwin的虚拟linux上安装ansible与远程服务器进行交互。
安装好之后ansible --version
进行查看
以下: [root@localhost ~]# ansible --version
git
ansible 2.3.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
安装好ansible之后,建议配置ssh免密码登陆远程服务器,不会操做的能够自行百度github
ansible有个host配置,yum安装之后,在/etc/ansible/hosts里能够能够添加远程服务器主机的ip地址,或者一组ip服务器地址,例如咱们的服务是分布式部署,有三台服务,配置以下web
#[]里是服务器组的name,后续每行跟着的是服务器的ip地址
[yrServer]
192.168.9.50
192.168.9.51
192.168.9.52
命令行测试 ansible yrServer -m ping
服务器返回
[root@localhost ~]# ansible all -m ping
192.168.9.50 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.9.51 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.9.52 | SUCCESS => {
"changed": false,
"ping": "pong"
}
表示三台服务器都已经ping通,其中参数里的changed的false表明,主机没有任何改动
ping后面pong标识已经ping通shell
ansible能够经过相似上面的命令行与主机进行交互,其实经过ansible进行远程主机操做,就是把ansible脚本转换层shell脚本与命令在远程主机上进行操做,可是自动化运维是一组命令跟脚本的组合,因此就须要学习一下ansible的杀手锏playbook了apache
playbook是一组ansible命令的组合,咱们能够称他为剧本,你彻底能够理解成playbook就是拍戏的那个剧本,演员只要照着剧本演戏,就能完成拍戏任务,咱们把咱们想作的操做编排成剧本,ansible就能够编排有序的执行任务,并给与咱们反馈。Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中能够编排有序的执行过程,甚至于作到在多组机器间,来回有序的执行特别指定的步骤.而且能够同步或异步的发起任务.windows
playbook的格式是YAML,语法比较简单,
playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.
“plays” 算是一个体育方面的类比,你能够经过多个 plays 告诉你的系统作不一样的事情,不只是定义一种特定的状态或模型.你能够在不一样时间运行不一样的 plays.
这里有一个从github源码demo里找到的playbook示例,其中仅包含一个 play: 仔细看注视服务器
---#必须---开头
- hosts: webservers#hosts里定义的组名或者直接服务器ip
vars:#参数
http_port: 80
max_clients: 200
remote_user: root #执行的帐户名
tasks:#执行的任务
- name: ensure apache is at the latest version#任务名称是安装最新版本的apache
yum: pkg=httpd state=latest#执行的命令是ansible yum模块安装httpd
- name: write the apache config file#任务名称是修改apache的config配置文件
template: src=/srv/httpd.j2 dest=/etc/httpd.conf #采用模版文件,从从src复制到dest,名字最终为httpd.conf
notify:#事件通知,一有修改配置文件,就通知的名字为restart apache,会执行handlers相同名字的service进行执行重启
- restart apache
- name: ensure apache is running #任务名称
service: name=httpd state=started #任务操做是:启动httpd
handlers:
- name: restart apache #任务名称
service: name=httpd state=restarted #任务操做是重启httpd服务
执行ansible playbook ansible-playbook demo.yml
就能够查看结果app