集成Ansible,实现发布多台Web服务器[六]

集成Ansible,实现发布多台Web服务器

Ansible是一个自动化运维工具,基于Python开发,可以实现批量系统
配置、批量软件部署、批量执行命令等功能。
• Inventory:主机清单,根据服务器角色进行分组管理。
• Playbook:描述希望在远程服务器做哪些事的文件,采用YAML格式。
在Node节点安装Ansible:
yum install epel-release
yum install ansible
Ansible与远程服务器通信有两种常见方式:
• SSH密码认证
• SSH密钥对认证

主机清单:

# vi /etc/ansible/hosts
[webservers]
192.168.230.130
192.168.230.131

# uncomment this to disable SSH key host checking

编辑 /etc/ansible/ansible.cfg去掉host_key_checking = False的注释

批量执行命令示例:

[root@linux-node1 ~]# ansible webservers -m shell -a 'ip addr' -uroot -k

Playbook示例:
[root@linux-node1 jenkins_home]# cat playbook.yaml
- hosts: webservers
  tasks: 
  - name: 拷贝文件
    copy: src=/etc/hosts dest=/tmp
  - name: 查看主机内存
    shell: free -m
    register: result   #将结果注册到变量
  - debug: msg={{result.stdout_lines}}  #然后将结果再打印出来

Jenkins执行Playbook

先安装Ansible插件,再配置

 

 配置私钥,之前配置过192.168.230.131

拷贝公钥到130机器,130同时也是jenkins

ssh-copy-id root@192.168.130.130

测试指定私钥登陆

同时130也部署了网站程序

[root@linux-node1 tomcat]# pwd
/usr/local/tomcat

端口改为8081

cd /usr/local/tomcat/conf

vim  server.xml 找到如下配置改为8081

<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

配置完以后测试

 控制台输出

 自动发布多台服务器

[root@linux-node1 jenkins_home]# pwd
/opt/jenkins_home
[root@linux-node1 jenkins_home]# cat playbook.yaml
---
- 
  hosts: "{{ env }}"  #在jenkins变量传到这里
  gather_facts: no
  tasks: 
  - name: 推送部署包到远程服务器
    copy: src="{{ item }}" dest=/tmp/ROOT.war
    with_fileglob: 
      - "/var/lib/jenkins/workspace/java-demo/target/*.war"
  - name: 部署新程序并重启Tomcat
    shell: |
       tomcat=/usr/local/tomcat
       cd $tomcat/webapps
       mv *.war /data/backup/$(date +"%F_%T")_ROOT.war
       mv /tmp/*.war $tomcat/webapps/ROOT.war
       pid=$(ps -ef |grep $tomcat |egrep -v 'grep' |awk '{print $2}') [ -n "$pid" ] && kill -9 $pid
       nohup /usr/local/tomcat/bin/startup.sh
...

在Invoke Ansible Playbook高级里边指定key和Value

参数化构建里边添加选项参数

选项可以选择多个,指定多个组,可以进行单个发布,没问题再依次部署

 

 开始构建

控制台输出

 

查看node1 是否启动

[root@linux-node1 jenkins_home]# netstat -ntpl|grep 8081
tcp6 0 0 :::8081 :::* LISTEN 29978/java

拷贝备份也正常

[root@linux-node1 jenkins_home]# ls /data/backup/
2022-07-01_18:42:31_ROOT.war

 查看node2

[root@linux-node2 ~]# netstat -ntpl|grep 8081
tcp6 0 0 :::8081 :::* LISTEN 1436/java

 nginx代理2台web,就可以通过nginx去访问,前面再加keepalived就可以实现高可用

 

 

 

 

 

 
posted @ 2022-07-01 21:33  w787815  阅读(206)  评论(0编辑  收藏  举报