项目所用后台db与服务器端db参数不一样,导致每次上传代码之后需要手动修改一下property的具体参数.吃力不讨好.并且每次服务器端做得就是一个git pull的事情.
经过总结发现,大致发现三种常见可行方法来实现半自动化–>自动化
前两种大致一个思路:覆盖旧配置文件、服务器设置触发任务去git pull 最新的源码
:a:.Bash Shell方法
原理很简单。先进入git目录 执行 git pull 更新代码
然后进入网站WWW目录删除所有的代码。
然后复制git目录下的代码到www目录下。
删除2个config.php文件,复制修改好的文件到相应目录下。
最后修改所有的文件和文件夹加入 用户权限和用户组权限。
1.首先可以在服务器中建立一个文件夹,把项目代码clone下来
1 | git clone https://xxxx@git.xxxxx #xxx是具体项目路径 |
2.代码仓库的地址:
1 | ~/codes/ec.abc.com/GR_Operate |
3,项目部署的目录
1 | /www/web/abc/public_html |
4.建立在上面基础上,(假设named => test.sh)的脚本 注:[根据具体不同path/name进行修改]
1 | !/bin/sh |
5.使用方法很简单
1 | ./test.sh |
:b:.Python方法
- python判断目录是否存在,不存在创建
1 | if os.path.exists('/home/disk1/temp/'): |
- python如何切换到指定目录,并在该目录下执行shell命令
1 | os.chdir('/home/disk1/temp/') |
🔢.Git hook(可能是目前最佳方案)
背景介绍:
Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。
下面是使用 Git Hook 进行简单的自动化部署,可能还有更高级的做法,需要深入去挖掘。
服务器初始产生一个远程Git仓库
git init和git --bare init初始化出来的仓库是完全不一样的,具体我 Google 了下,英文倒是理解了,但是要翻译出中文却不知道用什么形容词去称呼这2种仓库。这里我们要通过
git --bare init初始化一个远程仓库.参考如下:1
2
3
4cd ~
mkdir testRepo
cd testRepo
git --bare init
服务器初始化一个本地Git仓库
这个仓库就是通过
git init初始化出来最常见的本地仓库,它的作用是拉去远程仓库(其实就在它旁边)最新的源码,然后在这个仓库里进行编译,把代码编译到 www 目录(网站的根目录)。命令参考如下:
1
2
3
4cd ~
mkdir testDeploy
cd testDeploy
git clone ~/testRepo #从远程仓库 clone 出源码
给远程仓库配置hook
1
2cd ~/testRepo/hooks
vim post-receivepost-receive需要执行的shell
1
2
3
4
5
6
7
8
9
10
11
12!/bin/sh
unset GIT_DIR
DeployPath=/home/user/testDeploy
WwwPath=/home/wwwroot/testDeploy
cd $DeployPath
git add . -A && git stash
git pull origin master
下面这2步都是按照实际你自己添加的bash脚本
fis release -Dompd $WwwPath # 我使用的FIS,对前端代码进行编译
qrsync /home/user/qiniutools/config.json # 使用七牛同步工具进行同步.也可用其他同步然后,给post-receive添加可执行的权限
1
chmod +x post-receive
给本地仓库添加remote地址
这次的本地仓库就真的是你开发机上面的本地了。在你原有 Git 项目里面添加一条新的 remote 源,以后往这个 remote 源里面 push 代码就会自动触发上面那 bash 脚本了。命令参考如下:
1 | git remote add deploy user@server.ip:/home/user/testRepo |