[ansible-playbook]4 持续集成环境之分布式部署利器 ansible playbook学习
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学习的更多相关文章
- [Docker][ansible-playbook]3 持续集成环境之分布式部署
预计阅读时间: 30分钟 本期解决痛点如下:1. 代码版本的多样性,编译环境的多样性如何解决?答案是使用docker,将不同的编译环境images统统打包到私有仓库上,根据需求进行下载,从宿主机上挂载 ...
- 持续集成环境--Tomcat热部署导致线程泄漏
一.问题由来 我们组用jenkins部署了持续集成环境,(jenkins部署war包到远程服务器的tomcat). 每次提交了代码,jenkins上一键构建,就可以自动拉取最新代码,打war包,热部署 ...
- JavaWeb+SVN+Maven+Tomcat +jenkins搭建持续集成环境和自动部署
https://blog.csdn.net/wh52788/article/details/80900477 https://blog.csdn.net/liyong1028826685/articl ...
- 用MSBuild和Jenkins搭建持续集成环境(2)
http://www.infoq.com/cn/articles/MSBuild-2 作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意: ...
- 使用Jenkins构建持续集成环境
简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...
- 构建基于Jenkins + Github的持续集成环境
搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...
- Docker+Jenkins持续集成环境(5): android构建与apk发布
项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...
- Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面开始搭建.net持续集成环境 Jenkins和SVN安装这里就不介绍了 一.准备工作 1.Jenkins中系统 ...
- 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...
随机推荐
- 如何固定table表格宽度,样式不受容器影响
之前有篇关于LODOP打印超文本表格,两个样式相同的表格,出现错位的情况.该博文地址:LODOP打印表格错位的几种情况该文试验了两种现象,第一种浏览器页面显示错位,打印预览也错位,第二种浏览器页面表格 ...
- 如何修改WAMPServer默认的网站路径地址
通常,我们安装WAMPServer集成的PHP开发环境之后,默认的网站路径地址是其安装目录下子文件夹:"wamp/www/".那么我们怎么修改网站地址到自己指定的路径呢?本篇经验将 ...
- 删除SQL约束的方法
在SQL数据库中,如果需要删除表约束,应该如何操作呢?下面就将为您介绍删除SQL表约束的方法,供您参考,希望对您有所帮助. --1)禁止所有表约束的SQL select 'alter table '+ ...
- 【Leetcode_easy】949. Largest Time for Given Digits
problem 949. Largest Time for Given Digits solution: class Solution { public: string largestTimeFrom ...
- Python常见的异常
Python中常见的异常如表所示. exception的更多用法: 1.通常else 语句只有在没有异常的情况下才会被执行 try: aa = "异常测试:" print(aa)e ...
- AWS 数据分析服务(十)
Amazon Kinesis 概念 处理AWS上大量流数据的数据平台 Kinesis Streams 用于搜集数据,Client Library 用于分析后的展示 构建用于处理或分析流数据的自定义应用 ...
- k8s中configmap的使用方法
ConfigMaps允许您将配置构件与映像内容解耦,以保持容器化应用程序的可移植性.本文展示如何创建configmap,修改configmap以及如何把configmap应用于pod. 创建con ...
- Linux【Ubuntu】安装docker
内核要大于3.10才能安装docker 查看内核 uname -r 安装yum命令 sudo apt install yum 由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改,故添加使用 ...
- 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
技术之瞳 阿里巴巴技术笔试心得习题2.65: 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D) A.DEFCBA B.DCEFBA C.FEDCBA D.FECDBA E.ABCDEF ...
- u盘传输文件时提示过大
(无需格式化U盘) 1.拷贝大文件时提示目标文件系统过大,无法复制 2.查U盘,发现剩余空间足够: 3.分析原因,是由于U盘的格式问题导致的,当期的磁盘格式是FAT32类型的,无拷贝过大的文件: 4. ...