集成Ansible,实现发布多台Web服务器[六]
集成Ansible,实现发布多台Web服务器
主机清单:
# 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
[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
配置私钥,之前配置过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就可以实现高可用