Linux高阶—持续部署软件ansible(十)

Linux高阶—持续部署软件ansible(十),第1张

目录

介绍

关系

安装

默认配置文件结构

Inventory 介绍

Inventory 参数

Inventory配置案例

Ansible常用模块

Ansible执行方式

执行ad-hoc 命令

执行ansible playbook 剧本


介绍

学习ansible 之前先了解 CI/CD 的概念:CICD 是指 持续集成(Continuous Integration)和持续交付(CONTINUOUS DELIVERY)持续部署(Continuous Deployment)简称。指在开发过程中自动执行一系列从开发到部署的过程中,尽量减少人工的介入。ansible执行工具是持续部署的常用软件。

关系

通过持续集成,开发人员能够频繁将其代码集成到公共代码仓库的主分支中。开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交;

通过持续交付,将软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程;

通过持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。

安装

安装Ansible前需要安装Python 2.4 或更高版本的Python,RHEL或CentOS *** 作系统,需要配置 EPEL,以Centos 7为例,需要执行指令:yum install epel-release

其它版本配EPEL请参考如下指导执行:https://docs.fedoraproject.org/en-US/epel

1、GCC源码安装
#git clone https://github.com/ansible/ansible.git --recursive
#cd ./ansible
使用 Bash:
#source ./hacking/env-setup
 
2、YUM安装
#以centos 7为例:
yum install epel-release
yum install ansible
 
3、RPM安装
方法一:制作rpm 包:前提是已安装了 rpm-build, make, and python2-devel .
#git clone https://github.com/ansible/ansible.git
#cd ./ansible
#make rpm
#rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm
方法二:通过yum 下载rpm 包:
#yum deplist ansible
#yum -y install yum-utils
#yumdownloader --resolve --destdir: “/tmp ansible
#rpm -Uvh /tmp/ansible-*.noarch.rpm
默认配置文件结构

Inventory 介绍

Ansible 本身通过基于文本的方式来记录 inventory 配置信息,默认配置文件为/etc/ansible/hosts,文件位置可以在服务配置文件/etc/ansible/ansible.cfg中定义。

Inventory 参数
ansible_ssh_host    #将要连接的远程主机名。
ansible_ssh_port    #端口号.如果不是默认的端口号,通过此变量设置。
ansible_ssh_user    #默认的 ssh 用户名。
ansible_ssh_pass    #密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)。
ansible_su_pass     #su 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)。
ansible_sudo_pass   #sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)。
ansible_become     #是否进行提权 *** 作。如果需要,设置为yes   是
ansible_become_user    #设置为具有所需特权的用户-您想要成为的用户,而不是您登录时使用的用户
ansible_become_method  #指定权限工具,如sudo,su,pfexec,doas,pbrun,dzdo,ksu,runas,machinectl
ansible become_flags #play或task级别上,允许为任务或角色使用特定的标志。一种常见的用法是,当shell设置为no login时,将用户更改为nobody。此指令是在Ansible 2.2中添加。
ansible_connection  #与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行。
ansible_ssh_private_key_file #ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况。
ansible_shell_type  #目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'。
ansible_python_interpreter #目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26)。
ansible_ruby_interpreter #与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
Inventory配置案例
vi /etc/ansible/hosts
[qitu] //主机组
192.168.1.2 hostname: "host1"    //主机1参数信息
192.168.1.2 hostname: "host2"    //主机2参数信息
[rds]
192.168.1.3 hostname:"host3"
[qitu:vars] //主机组参数信息
ansible_ssh_user: "test_user"
ansible_ssh_pass: "123456"
#切换用户执行
#ansible_become: "yes"
#ansible_become_user: "root"
#ansible_become_method: "su"
#ansible_become_pass: "XXXXXX"
[all:vars] //全局参数信息
ntp_server: “ntp.qitu.example.com
Ansible常用模块
command[命令模块]
功能:命令执行
ansible 172.16.1.31 -m command -a "chdir=/tmp/ pwd"

shell[万能模块]
功能:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ;
ansible 172.16.1.41 -m shell -a "hostname;pwd"
可以使用该名模,执行所有linux的命令,所以叫万能模块

script[脚本模块]
功能:调用本地脚本远程执行
ansible 172.16.1.7 -m script -a "/server/scripts/mk.sh"
copy[远程复制下发模块]
功能:从本地的文件拷贝到远程主机
常用参数
backup  对数据信息进行备份
src     定义要推送数据信息
dest    [必须]定义将数据推送到远程主机什么目录中
owner   设置复制后的文件属主权限
group   设置复制后的文件属组权限
mode    设置复制后的文件权限(600 755)
举例
ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/ backup=yes"

fetch[远程复制上传模块]
功能:从远程主机的文件拷贝到本地
常用参数
backup  对数据信息进行备份
src     定义要推送数据信息
dest    [必须]定义将数据推送到远程主机什么目录中
owner   设置复制后的文件属主权限
group   设置复制后的文件属组权限
mode    设置复制后的文件权限(600 755)
举例
ansible 172.16.1.41 -m fetch -a "src=/tmp/01.txt dest=/tmp/ backup=yes"

template[模块定义模块]
功能:和copy module一样强大
常用参数
backup  对数据信息进行备份
src     定义要推送数据信息
dest    [必须]定义将数据推送到远程主机什么目录中
owner   设置复制后的文件属主权限
group   设置复制后的文件属组权限
mode    设置复制后的文件权限(600 755)
validate 验证文件
举例:
ansible 172.16.1.41 -m template -a "src=etc/ssh/sshd_config.j2 dest=/etc/ssh/sshd_config.j2 owner=root group=root mode='0600' validate=/usr/sbin/sshd -t %s backup=yes"

file[文件 *** 作模块]
功能:文件处理
常见参数
src     定义要推送数据信息
dest    [必须]定义将数据推送到远程主机什么目录中
owner   设置文件属主权限
group   设置文件属组权限
mode    设置文件权限(600 755)
state   用于指定创建目录或文件
举例
权限参数
ansible 172.16.1.7 -m file -a "dest=/tmp/01.txt owner=test group=test mode=600"
state创建文件
ansible 172.16.1.41 -m file -a "dest=/tmp/02.txt state=touch"
state创建目录
ansible 172.16.1.41 -m file -a "dest=/tmp/01dir state=directory"

yum[包管理模块]
功能:软件安装
常用参数
name    [必须]执行要安装软件的名称,以及软件的版本
state   installed安装  absent(卸载)
list    指定软件名称,查看软件是否可以安装,以及是否安装过
举例
ansible 172.16.1.41 -m yum -a "name=iftop state=installed"
ansible 172.16.1.41 -m yum -a "name=iftop state=absent"
ansible 172.16.1.41 -m yum -a "list=iftop"

service[系统服务管理模块]
常用参数
name    [必须]指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state   stopped started restarted reloaded
enabled yes表示服务开机自启动 no表示服务开机不要自动启动
举例
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"

cron[定时任务模块]
常用参数
minute  分,写法同系统定时任务,如[0-59] [*] [*/n]  
hour    时,写法同上
day     日,写法同上
month   月,写法同上
weekday 周,写法同上
job     执行命令,如job='/bin/sh /server/scripts/test.sh &>/dev/null'
举例
添加定时任务
ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=test02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
删除定时任务
ansible 172.16.1.41 -m cron -a "name=test02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=test01 state=absent"
注释定时任务
ansible 172.16.1.41 -m cron -a "name=test01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"a
ansible 172.16.1.41 -m cron -a "name=test01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"
Ansible执行方式

提供两种方式去执行任务:

方法一是以执行 ad-hoc 命令的形式;

方法二是以执行 Ansible playbook 剧本的形式;

前者可以解决一些简单的任务, 后者解决较复杂的任务

执行ad-hoc 命令

在模块介绍的时候列举了相关命令,语法如下:

ansible 主机信息  -m 模块名称 -a "相关模块参数"

主机信息:远程主机IP地址,主机组名称,all代表所有主机
-m:指定使用哪个模块
-a:模块中的参数和功能
执行ansible playbook 剧本

语法如下:

字典以简单的形式表示:key: value

# An employee record
martin:
    name: Martin D'vloper
    job: Developer
    skill: Elite

(冒号后面必须有一个空格)

举例:

ansible-playbook /tmp/sshd.yaml

cat /tmp/sshd.yaml
---
#以创建主机ssh 互信为例
- hosts: myhost  // *** 作的主机
  remote_user: test //执行tesk的用户
  facts: false  //关闭系统变量
  tasks:
    - name: create rsa
      shell: yes y |ssh-keygen -b 2048 -t rsa -f /home/test/.ssh/id_rsa -q -N ""
    - name: Non secret authentication
      authorized_key: user=test key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" state=present exclusive=yes
    - name: upload id_rsa.pub
      fetch: src=/home/test/.ssh/id_rsa.pub  dest=/data/roles/sshd/files/{{inventory_hostname}}
    - name: clean authorized_key.templates
      shell: "echo >/data/roles/sshd/templates/authorized_keys.templates"
      delegate_to: localhost
      when: "'test' in group_names"
    - name: create authorized_key
      shell: "grep -r '.*' /data/roles/sshd/files/ |grep 192-168-1 |cut -d ':' -f2 |grep -v shell >> /data/roles/sshd/templates/authorized_keys.templates"
      delegate_to: localhost
      when: "'test' in group_names"
    - name: upload authorized_key
      template: src=authorized_keys.templates  dest=/home/test/.ssh/authorized_keys owner=test group=test mode=0700

上一篇:Linux高阶—安全认证模块PAM(九)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/917035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存