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. centos7上安装mysql8(下)

    1.修改root密码 MySQL8和5的密码加密方式不同,mysql_native_password是5的加密方式.mysql已经将之前的mysql_native_password认证,修改成了cac ...

  2. 【Leetcode_easy】897. Increasing Order Search Tree

    problem 897. Increasing Order Search Tree 参考 1. Leetcode_easy_897. Increasing Order Search Tree; 完

  3. 如何优雅的处理 async/await 异常

    参考链接:https://cloud.tencent.com/developer/article/1470715 参考链接:https://www.jianshu.com/p/2935c0330dd2

  4. webpack to package typescript & scss

    Demo2操作手册 本Demo演示如何配合各种loader进行稍复杂的使用 准备环境 初始化环境, cd到demo目录之后, 执行如下命令: npm init -y npm install webpa ...

  5. Kubernetes(k8s)目录

    Kubernetes(k8s)目录 Kubernetes集群安装(亲测有效)

  6. Flink状态管理和容错机制介绍

    本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...

  7. Java program to find the largest element in array

    Java program to find the largest element in array Given an array of numbers, write a java program to ...

  8. views 视图层

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  9. [.Net] - 生成短 Guid 标识符的方法

    产生字符串(例:49f949d735f5c79e) private string GenerateId() { ; foreach (byte b in Guid.NewGuid().ToByteAr ...

  10. 【坑】前后端分离开发中 跨域问题以及前台不带cookie的问题

    文章目录 前言 跨域问题 cookie问题 拦截器导致的跨域问题 后记 前言 场景一: 前台哒哒哒的点击页面,发送请求,但是后台服务器总是没有回应,后台接口虽打了断点,但是根本进不到断点处: 前端:我 ...