背景需求
对于服务或程序部署在多台机器的情况,让我们修改代码的时候,需要把每台机器的代码都更新一边,非常费时费力,本文借助 ansible 来实现 把代码部署到多台服务器。
手动实现步骤
1、打包代码
在打包时,使用了 exclude 参数,来排除不想打包去备份或者往别的机器部署的文件,比如日志文件、git 文件、pycharm 产生的临时文件等。
之所以压缩后的文件名称末尾是 .tar.gz ,其实是一种标识,表示是经过 tar 处理的,且 加 z 参数 压缩过的,z 是表示 gzip 压缩的意思。
sudo tar zcvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz --exclude=*.git --exclude=*.log --exclude=*.pyc --exclude=*.pdf --exclude=*.xls --exclude=*.xlsx -C /usr/GitCodes/ ProjectFolderName
注意:
- exclude 的参数 一定要写在要打包的项目名 ProjectFolderName 之前;
- exclude 参数前 有两个横线;
- 通过 exclude 参数 排除 .git 文件夹 ,.log 文件 , .pyc 文件等;
再用 tar 命令查看一下打包后的文件是否符合需求(比如不包含 .log 文件等)
tar -tvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz
2、将代码复制到另一台服务器的 /usr/EzrealerProjects 路径下
3、解压缩
tar zxvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz -C /usr/EzrealerProjects
使用 ansible 实现
1、在 host 中设定要部署的机器
sudo vim /etc/ansible
[temp]
120.xxx.xx.[169:174] ansible_port=22 ansible_user=root ansible_sudo_pass="123"
2、编写 playbook 完成代码的打包、复制 与 解包
sudo vim deploy_projects.yml
- hosts: temp
become: true
gather_facts: False
tasks:
- name: tar zcvf project.tar.gz
shell: tar zcvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz --exclude=*.git --exclude=*.log --exclude=*.pyc --exclude=*.pdf --exclude=*.xls --exclude=*.xlsx -C /usr/GitCodes/ ProjectFolderName
when: ansible_ssh_host =='120.xxx.xx.174'
- name: scp local to remote servers
copy:
src: "/usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz"
dest: '/usr/EzrealerProjects/'
- name: tar zxvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz
shell: tar zxvf /usr/EzrealerProjects/ProjectFolderNameBackup.tar.gz -C /usr/EzrealerProjects
3、执行 playbook
ansible-playbook deploy_projects.yml