1. 发布系统:实现方案对比 背景:开发这套系统的背景 - 第1阶段:scp/FTP - 第2阶段:shell脚本+FTP(运维人员) f = open('ftp://zzz.zip') - 第3阶段:shell脚本+SVN(运维人员) /shell脚本+GIT(运维人员) - 第4阶段:jekins: - 配置 shell脚本+SVN(运维人员) /shell脚本+GIT(运维人员) 运维:点击 - 第5阶段:自己开发发布系统(目标:构建运维自动化) 原来公司是使用jekins脚本进行发布,为了以后构建运维自动化并且在发布系统中定制更多的自定义行为以及权限等控制,让发布变得更简单, 以后发布系统时就不需要运维,开发自行操作。 发布系统解决方案: - 服务器拉代码执行: - 速度慢 - 服务器装编译器 - 发布机 - 拉代码;同步:rsync/ssh/saltstack - 好处 - 发布机上编译代码 - 增量同步 - 公司基于什么来做的? - 原来公司用的就是saltstack PS:由于开发这套系统,学了些salt知识。 2. 技术储备 - 远程拉取代码 import subprocess v = subprocess.check_call('git clone https://github.com/WuPeiqi/Tyrion.git',shell=True,cwd='D:\wupeiqi\s7\codes') - 代码同步:基于saltstack的state组件 安装: - master(1) yum install salt-master - minion(5) yum install salt-minion - 以上方法安装不成功,试试下面的方法 yum install -y epel-release yum install -y salt-master/salt-minion 配置: - master vim /etc/salt/master interface: 0.0.0.0 运行: /bin/systemctl start salt-master.service /bin/systemctl stop salt-master.service salt-master -l debug - minion vim /etc/salt/minion master: 192.168.11.26 id: w1.com 运行: /bin/systemctl start salt-minion.service /bin/systemctl stop salt-minion.service salt-minion -l debug 授权: salt-key -L salt-key -a c1.com salt-key -A PS: 服务器端防火墙关闭 操作: 命令: salt '*' cmd.run 'ifconfig' salt 'w1' cmd.run 'ifconfig' state: 在master上进行相关配置,根据salt-master上的配置,在远程服务器上执行相关:命令/文件操作/服务设置等 - 将master上的一个文件,同步到客户端。 a. 在master - cd /srv/salt s7code/ ├── files │ └── xx.py └── init.sls - vim init.sls /data/xx.py: file: - managed - source: salt://s7code/files/xx.py - user: root - makedirs: True - mode: 644 b. 推送文件 salt '*' state.sls s7code - 将master上的一个文件夹,同步到客户端。 a. 在master - cd /srv/salt s7code/ ├── files │ └── video │ ├── a.py │ ├── b.py │ └── c.py └── init.sls - vim init.sls xxxxxx: file.recurse: - name: /data/codes - source: salt://s7code/files/video - user: root - makedirs: True - file_mode: 644 - dir_mode: 755 b. 推送文件 salt 'w1.com' state.sls s7code salt '*' state.sls s7code 实现: git clone .... salt 'c1.com' state.sls s7code