3 ansible-play讲的中太少了,今天稍微深入学习一点

预计阅读时间:15分钟

一: 安装部署

参考 http://getansible.com/begin/an_zhuang_ansile

快速检查 (可能需要配置ssh无密访问,可参考https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2 )

配置host文件

[web]
192.168.100.1
[server]
192.168.100.2

测试能否ping通

# ansible all -i host -m ping

二:常用模块

a. service 用于启动检查服务

b. file 用于文件删除 链接 创建

c.shell 用于执行脚本(不推荐,因为shell操作有时并非幂等,而且不方便检查执行结果)

d.copy 用于拷贝文件

e. vars+ template 用于根据模板文件基于变量创建配置文件

样例:

test.yml

---
#Task1
- hosts: web
vars:
domain:
remote_user: root
tasks:
- name: test connection
ping:
- name: httpd check
service: name=sshd state=started
- name: remove foo.conf
file: dest=/etc/foo.conf state=absent
#- name: delete foo.conf
#shell: rm -f /etc/foo.conf - name: copy foo.conf
copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf
owner=root group=root mode=
notify:
- Verify Conf - name: Add template Config
template: src=serversforhackers.com.j2 dest=/etc/{{ domain }}.conf owner=root group=root handlers:
- name: Verify Conf
shell: file /etc/foo.conf #Task2
- hosts: server
vars:
sdomain: server_0731
domain:
remote_user: root
tasks:
- name: Add template Config
template: src=serversforhackers.com.j2 dest=/etc/{{ sdomain }}.conf owner=root group=root

模板文件: templates/serversforhackers.com.j2

server {
# Enforce the use of HTTPS
listen default_server;
server_name *.{{ domain }};
return https://{{ domain }}$request_uri;
}

hosts文件:

[web]
...
...
[server]
...
...
[gateway]
...

执行脚本: # ansible-playbook -i host test.yml   (-i 表示指定读取的host文件路径)

PLAY [web] *******************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] TASK [test connection] *******************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] TASK [httpd check] ***********************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] TASK [remove foo.conf] *******************************************************************************************************************************************************************************************************************************************************
changed: [...]
changed: [...] TASK [copy foo.conf] *********************************************************************************************************************************************************************************************************************************************************
changed: [...]
changed: [...] TASK [Add template Config] ***************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] RUNNING HANDLER [Verify Conf] ************************************************************************************************************************************************************************************************************************************************
changed: [...]
changed: [...] PLAY [server] **************************************************************************************************************************************************************************************************************************************************************** TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] TASK [Add template Config] ***************************************************************************************************************************************************************************************************************************************************
ok: [...]
ok: [...] PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
... : ok= changed= unreachable= failed=
... : ok= changed= unreachable= failed=
... : ok= changed= unreachable= failed=
... : ok= changed= unreachable= failed=

注:完整模块参见 http://docs.ansible.com/ansible/latest/modules_by_category.html

三 常见检查

语法检查  # ansible-playbook --syntax-check test.yml

注:报错信息有可能位置不准,碰见过对齐格式不正确引发的错误

列出主机  # ansible-playbook -i hosts --list-hosts test.yml

四 最佳实践

参考 http://docs.ansible.com/ansible/latest/playbooks_best_practices.html

根据 Roles分类,存放template 文件,加密yml(如果需要的话)

Git hub上的实例: https://github.com/ansible/ansible-examples

如何利用ansible 安装go: https://github.com/jlund/ansible-go

如何利用ansible 不是 go-lang-stack: https://github.com/areski/ansible-golang-stack

五 遇到的坑

1. shell/command 模块无法调用source,需要用sh 方式执行

参考 https://groups.google.com/forum/#!topic/ansible-project/PNNpxY4ItSo

   - name: source added profile
shell: sh /etc/profile.d/go-path.sh
ignore_errors: yes

参考资料:

https://serversforhackers.com/c/an-ansible-tutorial

http://getansible.com/advance/best_practice/zui_jia_shi_yong_fang_fa

[ansible-playbook]4 持续集成环境之分布式部署利器 ansible playbook学习的更多相关文章

  1. [Docker][ansible-playbook]3 持续集成环境之分布式部署

    预计阅读时间: 30分钟 本期解决痛点如下:1. 代码版本的多样性,编译环境的多样性如何解决?答案是使用docker,将不同的编译环境images统统打包到私有仓库上,根据需求进行下载,从宿主机上挂载 ...

  2. 持续集成环境--Tomcat热部署导致线程泄漏

    一.问题由来 我们组用jenkins部署了持续集成环境,(jenkins部署war包到远程服务器的tomcat). 每次提交了代码,jenkins上一键构建,就可以自动拉取最新代码,打war包,热部署 ...

  3. JavaWeb+SVN+Maven+Tomcat +jenkins搭建持续集成环境和自动部署

    https://blog.csdn.net/wh52788/article/details/80900477 https://blog.csdn.net/liyong1028826685/articl ...

  4. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  5. 使用Jenkins构建持续集成环境

    简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...

  6. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

  7. Docker+Jenkins持续集成环境(5): android构建与apk发布

    项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...

  8. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建.net持续集成环境 Jenkins和SVN安装这里就不介绍了 一.准备工作 1.Jenkins中系统 ...

  9. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

随机推荐

  1. LeetCode_205. Isomorphic Strings

    205. Isomorphic Strings Easy Given two strings s and t, determine if they are isomorphic. Two string ...

  2. Delphi : TStringList的Find,IndexOf和Sort

    关键:Find要事先Sort排序,Indexof不用排序. TStringList内部查找相关的数据.待调试代码时才知道痛苦,浪费无数时间后,只得一步步跟踪,才发 现Find方法返回的Index总是错 ...

  3. 线性回归:boston房价

    from sklearn.linear_model import LinearRegression,Lasso,Ridge from sklearn.datasets import load_bost ...

  4. 【Leetcode_easy】961. N-Repeated Element in Size 2N Array

    problem 961. N-Repeated Element in Size 2N Array solution: class Solution { public: int repeatedNTim ...

  5. vue-cli3.0和element-ui及axios的安装使用

    一.利用vue-cli3快速搭建vue项目 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令( ...

  6. VUE 多页面打包webpack配置

      思路:多配置一个main的文件,用于webpack入口使用, 然后路由的导向也应该默认指向新组件,最后通过webpack构建出一个新的独立的html文件. 缺点:生成多个html会new出多个vu ...

  7. mysql 中不等于过滤 null 的问题(同时比较等于,大于和小于)

    在写 SQL 条件语句是经常用到 不等于'!='的筛选条件,此时要注意此条件会将字段为 null 的数据也当做满足不等于的条件而将数据筛选掉. 1.原始数据和表结构 CREATE TABLE `tes ...

  8. android基础---->ContentProvider的使用

    内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性.目前,使用内容提 ...

  9. 重磅!滴滴跨端框架Chameleon 1.0正式发布

    滴滴在 GitHub 上开源的跨端解决方案 Chameleon(简写 CML)正式发布 1.0 版本,中文名卡梅龙:中文意思变色龙,意味着就像变色龙一样能适应不同环境的企业级跨端整体解决方案,具有易用 ...

  10. formSelects隐藏功能键

    隐藏后 方法: // selectId就是select的id,这是在select渲染完后执行 $("#selectId").parent().find(".xm-sele ...