本文重点是利用Jenkins如何登录网络设备进行网络配置,之后我会发一个我配置交换机的job
原始操作流程
1、规划:公司内部有一台服务器10.10.80.93 7001端口需要映射到外网,通过外网IP+端口进行访问,这就需要配置防火墙的端口映射
object network 10.10.80.93-7001
host 10.10.80.93
nat (inside,outside) static interface service tcp 7001 7001
access-list acl_outside extended permit tcp any host 222.11.11.11 eq 7001
下面进行利用Jenkins进行操作流程
一、build开始构建
1、手动填入需要映射的内网IP和端口
2、外网显示的端口,需要注意端口冲突,配置中我已做冲突终止操作
二、实际配置
1、配置参数化构建过程
2、执行shell操作
#!/bin/bash
#防火墙增加端口映射
fire_addport(){ #####这里设定一个函数,下面会调用
expect <<EOF
spawn telnet 10.10.15.20 ####防火墙IP地址
expect "Username:"
send "admin\r" ####防火墙I登录用户名
expect "Password:"
send "adminadmin\r" ######防火墙登录密码
send "en\r" ######防火墙进入特权模式
expect "Password:"
send "adminadmin\r" ######防火墙登录密码
send "conf t\r" ######防火墙进入配置模式
send "object network ${host_name}-${port_in}\r"
send "host ${host_name}\r"
send "nat (inside,outside) static interface service tcp ${port_in} ${port_out}\r"
send "access-list acl_outside extended permit tcp any host 222.11.11.11 eq ${port_out}\r"
send "exit\r"
send "exit\r"
send "exit\r"
expect eof
EOF
}
#防火墙删除端口映射
fire_delport(){ #####这里设定一个函数,下面会调用
expect <<EOF
spawn telnet 10.10.15.20
expect "Username:"
send "admin\r"
expect "Password:"
send "adminadmin\r"
send "en\r"
expect "Password:"
send "adminadmin\r"
send "conf t\r"
send "no access-list acl_outside extended permit tcp any host 222.11.11.11 eq ${port_out}\r"
send "no object network ${host_name}-${port_in}\r"
send "exit\r"
send "exit\r"
send "exit\r"
expect eof
EOF
}
##########这里需要在Jenkins服务器创建一个文件写入已经开通的端口例如
#cat /App/jenkins-netdata/fireport_exist
#7002
#7003
case ${fire} in
fire_add)
#判断外网端口是否存在
cat /App/jenkins-netdata/fireport_exist|grep $port_out
if [ $? -eq 0 ]
then
echo "\033[32m端口重复,请重新输入端口!\033[0m"
#####这里如果有冲突会停止jobs
else
echo -e "\033[32m端口不存在,执行添加操作\033[0m"
echo "${port_out}" >> /App/jenkins-netdata/fireport_exis
#####配置文件会根据发版进行更新
fire_addport
echo "\033[32m添加成功\033[0m"
fi
;;
fire_del)
#判断外网端口是否存在
cat /App/jenkins-netdata/fireport_exist|grep $port_out
if [ $? -eq 0 ]
then
echo -e "\033[32m 外网端口存在,执行删除命令! \033[0m"
sed -i "/${port_out}/d" /App/jenkins-netdata/fireport_exist
fire_delport
echo "\033[32m删除成功\033[0m"
else
echo -e "\033[32m 外网映射端口不存在,无需执行删除命令 \033[0m"
fi
;;
esac