ansible入门安装以及基于Jenkins搭建自动发布系统,ansiblejenkins


1、 ansible是什么

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

²  连接插件connectionplugins:负责和被监控端实现通信;

²  host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

²  各种模块核心模块、command模块、自定义模块;

²  借助于插件完成记录日志邮件等功能;

²  playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible的优势:

²  不需要安装agent,通过ssh,省掉安装agent的事;

²  ansible在master不需要启动进程;

ansible的缺点:

²  通过ssh链接需要认证和加密的过程,有些慢。

ansible是使用ssh链接协议远程机器集成了其它模块的的运维管理工具。

2、 ansible在centos的安装

安装python插件,python版本最好是2.6+,目前咱们的服务器安装都是2.6+的。

需要安装的python模块有python-simplejson python-paramiko  python-ecdsa  python-MarkupSafe python-yaml python-jinjapython-pycrypto python-setuptools

2.1编译安装:

setuptools模块安装

wget  https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz

tarxvzf setuptools-7.0.tar.gz

cdsetuptools-7.0

pythonsetup.py install

pycrypto模块安装

wget  https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz

tarxvzf pycrypto-2.6.1.tar.gz

cdpycrypto-2.6.1

pythonsetup.py install

PyYAML模块安装

wget  http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz

tarxvzf yaml-0.1.5.tar.gz

cd yaml-0.1.5

./configure--prefix=/usr/local

make--jobs=`grep processor /proc/cpuinfo | wc -l`   #多核工作模式

makeinstall

wget  https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz

tarxvzf PyYAML-3.11.tar.gz

cdPyYAML-3.11

pythonsetup.py install

Jinja2模块安装

wget   https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz

tarxvzf MarkupSafe-0.9.3.tar.gz

cdMarkupSafe-0.9.3

pythonsetup.py install

wget   https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz

tarxvzf Jinja2-2.7.3.tar.gz

cdJinja2-2.7.3

pythonsetup.py install

paramiko模块安装

wget   https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz

tarxvzf ecdsa-0.11.tar.gz

cdecdsa-0.11

pythonsetup.py install

wget    https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz

tarxvzf paramiko-1.15.1.tar.gz

cdparamiko-1.15.1

pythonsetup.py install

simplejson模块安装

wget    https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz

tarxvzf simplejson-3.6.5.tar.gz

cdsimplejson-3.6.5

python setup.py install

[编译ansible]

                            首先找安装源:https://github.com/ansible/ansible/releases

wget  https://codeload.github.com/ansible/ansible/tar.gz/v2.2.0.0-0.2.rc2

tar zxvfansible-2.2.0.0-0.2.rc2.tar.gz

cd  ansible-2.2.0.0-0.2.rc2

pythonsetup.py  install

进入ansible的安装目录 ./bin/ansible –version校验安装是否成功

2.2Yum方式安装python模块:

yum  install -y  python-simplejson  python-paramiko  python-ecdsa python-MarkupSafe python-yaml python-jinja python-pycryptopython-setuptools

yuminstall ansible

如果提示没有此安装包,可以加入EPEL扩展包:

yuminstall epel-release

yuminstall ansible

 

安装完成直接输入ansible –version校验是否安装成功。

尽量用yum安装,效率高,不容易出错。

3、 ansible怎么用

3.1文件配置

安装完成后需要对ansible进行配置。Yum安装完成后默认会在/etc下创建ansible文件夹,里边包含ansible.cfg,hosts,roles配置文件。编译安装的话需要手动创建或者从安装目录的sample里拷过来。

在hosts文件中加入slave的ip地址,并进行分组。

设置用于节点鉴权的SSH密钥。在Ansible服务端生成密钥,并且复制公钥到节点中。

²  在服务端使用ssh-keygen命令生成ssh的公钥和私钥。

²  使用ssh-copy-id命令来复制Ansible公钥到节点中。

3.2 ansible的简单使用

基本命令:

测试连接登录是否成功:ansible -m ping 'qa'

查看节点运行时间:ansible -m command -a "uptime" 'qa'

查看目标主机内核:ansible -m command -a "uname -r"'qa'

使用模块(-m):

         command 模块不支持 shell 变量,也不支持管道等,如果需要使用这些功能,可以借助模块

         ansible -m shell -a 'echo $TERM' 'qa'

         ansible qa -m shell -a "ps -ef |grep tomcat"

 

4、 集成jenkins搭建简单的自动化部署系统

在jenkins的post steps之后,配置Run only if build succeeds,然后执行以下脚本实现自动化部署。

 

#定义常量

WORKSPACE=`pwd`

WAR_DIR=${WORKSPACE}/${PROJ_NAME}-web/target

JETTY_DIR=/data/www/java/work/${PROJ_NAME}-jetty

REMOTE_DEPLOY_DIR=${JETTY_DIR}/webapps

INVENTORY_FILE=/tmp/${PROJ_NAME}-inventory-${JOB_NAME##*/}

INVENTORY_TEMPLATE=/opt/jenkins/default_inventory_template

 

cd $WAR_DIR

 

#准备Inventory

cat ${INVENTORY_TEMPLATE} >${INVENTORY_FILE}

echo ${DEPLOY_HOST} >>${INVENTORY_FILE}

 

#删除远程服务器部署文件

ansible -i ${INVENTORY_FILE} all-m raw -a "rm -rf ${REMOTE_DEPLOY_DIR}/${PROJ_NAME}-web.war"

 

#COPY文件到远程服务器部署目录

ansible -i ${INVENTORY_FILE} all-m copy -a "src=${WAR_DIR}/${PROJ_NAME}-web.wardest=${REMOTE_DEPLOY_DIR}/"

 

#重启jetty

ansible -i ${INVENTORY_FILE} all-m shell -a "${JETTY_DIR}/bin/jetty.sh restart"

关注

相关内容

    暂无相关文章