git hook 自动部署

本文章教大家,使用git hook来实现本地开发代码一行命令自动上传到远程服务器。

第一步创建空git仓库

终端进入你需要放项目的文件夹,可以通过ssh root@host 链接服务器,

cd 命令进入你的文件夹, 这个是需要大家会一些linux命令,这里我就不介绍了。

进入文件夹后,先初始化git

git init

复制代码

然后使用下面一行代码,使得你这个文件夹创建个空仓库,接受代码提交

git config receive.denyCurrentBranch ignore

复制代码

下面我们进入 git 的hook文件做修改,来使用hook监听代码提交后自动拉取代码到我们的项目文件夹。

进入.git/hooks

cd .git/hooks

复制代码

创建post-receive hook钩子, 类似我们vue的生命周期函数,监听代码push到远程仓库后进行操作

touch post-receive

复制代码

然后用vim编辑器打开 post-receive 写入代码

vim post-receive

复制代码

将以下内容复制到⽂件中 (输⼊i,复制粘贴,按 Esc 退出insert模式,按 :wq 保存退出)

#!/bin/sh

unset GIT_DIR

cd /www/wwwroot/yourproject

git checkout -f

复制代码

注释说明: cd /www/wwwroot/yourproject 这里的路径是你的服务器项目地址。

授予post-receive可执⾏权限

chmod +x post-receive

复制代码

这样,⼀个空的git仓库就在服务器上建好了,仓库的地址为:

ssh://deployuser@ipaddress/www/wwwroot/yourproject/.git

复制代码

注:deployuser:⽤户名、 ipaddress:服务器ip地址 /www/wwwroot/yourproject/.git :你项目路径的.git文件夹

第二步添加公钥

本地生成ssh key 复制添加到服务器上面, 本地生成ssh key,可以看我的另一篇文章生成ssh key

生成ssh key后 复制到剪切板

在服务器终端执行下面代码,打开 .ssh/authorized_keys 文件添加我们本地的 ssh key, 这样可以免账号密码推送代码, 多人开发时,只需要回车空行添加多个 ssh key就好。

vim 编辑器打开 复制剪切板的 ssh key (输⼊i,复制粘贴,按 Esc 退出insert模式,按 :wq 保存退出)

vi ~/.ssh/authorized_keys

复制代码

服务器上面的配置做好了, 接下来的是本地电脑的配置

第三步创建bash脚本

根⽬录添加 deploy.sh ⽂件,文件内的代码如下:

vue 项目的配置 执行vue 打包命令,执行完进入 dist文件夹创建git,四步走推送到服务器仓库,服务器的hook钩子会监听到自动拉取代码

# 确保脚本抛出遇到的错误

set -e

# ⽣成静态⽂件

npm run build

# 进⼊⽣成的⽂件夹

cd dist

git init

git add -A

git commit -m 'deploy'

git push -f ssh://root@120.79.193.236/www/wwwroot/m_web/.git master

cd -

复制代码

ssh://root@120.79.193.236/www/wwwroot/m_web/.git 是你上面服务器创建好的空git仓库地址

在package.json srcipts 添加一行

"deploy": "bash deploy.sh"

复制代码

打包发布

npm run deploy

复制代码

这样就大功告成了。

如果想其他非vue打包的项目怎么办呢,我们是可以利用webpack打包工具来帮助我们。

思路是,把当前项目复制一份,然后再写个deploy脚本执行git的四步走。

下面直接上代码:

没有 package.json文件的话,先 npm init 初始化

npm init

复制代码

安装需要的依赖包

npm i -D webpack webpack-cli clean-webpack-plugin copy-webpack-plugin

复制代码

clean-webpack-plugin 是 删除文件插件

copy-webpack-plugin 是 复制文件插件

根目录新建 webpack.config.js 文件,里面代码如下:

const CopyPlugin = require('copy-webpack-plugin');

const {CleanWebpackPlugin} = require('clean-webpack-plugin');

const path = require('path');

module.exports = {

entry: path.join(__dirname, 'main.js'), //入口,要使用webpack打包那个文件。

output: {

//输出文件的配置

path: path.join(__dirname, './dist'), //指定到那个目录中去

filename: "bundle.js" //指定输出文件的名称

},

// 开发环境还是生产环境

mode: process.env.NODE_ENV === 'development' ? 'development' : 'production',

plugins: [

// 复制根目录下所有文件,并粘贴到./dist文件夹里面去,

new CopyPlugin({

patterns: [

{

from: '**/*', to: './',

globOptions: {

// 忽略不复制文件

ignore:['**/dist','**/node_modules']

}

},

],

}),

// 复制前清除dist文件夹

new CleanWebpackPlugin()

],

};

复制代码

在package.json的scripts添加一行:

"copy": "webpack"

复制代码

这时候的根目录下的 deploy.sh文件代码如下:

# 确保脚本抛出遇到的错误

set -e

# 复制文件

npm run copy

# 进入生成的文件夹

cd dist

git init

git add -A

git commit -m 'deploy'

git push -f ssh://root@118.25.48.195/www/web/yourproject/.git master

cd -

复制代码

打包发布

npm run deploy

复制代码

完美解决各个打包上传代码到服务器,这里涉及的知识点,linux命令操作,生成ssh key,webpack配置. 看不明白的,多仔细跟着看多几遍,注意路径文件问题,一步一步仔细跟着操作,就可以的了,有什么问题也可以在下面评论留言。

linux git hook,前端通过githook一键自动部署项目相关推荐

  1. vue项目前端服务器,【前端技术】vue自动部署项目到服务器

    想要的功能 前端打包之后自动上传文件夹到服务器 在不提交代码的前提下,也可以完成上述功能 经过各种百度谷歌,最后有两种方案可以选择 第一种是写一个shell,通过lftp上传文件夹,但是会有个权限的问 ...

  2. 前端一键自动部署工具

    前端一键自动部署工具

  3. 5分钟快速掌握Jenkins,项目一键自动部署

    5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...

  4. Window环境下的Git+GitHub+jenkins+Tomcat实现自动部署项目并发送构建邮件

    Git+GitHub+jenkins+Tomcat实现自动部署项目 我们这里要实现的效果是:团队通过Git把项目push到GitHub上去,然后Jenkins通过GitHub的webhook(钩子)来 ...

  5. 一键部署oracle,一种Oracle单机一键自动部署方法与流程

    本发明涉及数据库安装技术领域,尤其涉及一种Oracle单机一键自动部署方法. 背景技术: Oracle Database,又名Oracle RDBMS,或简称Oracle,它是在数据库领域一直处于领先 ...

  6. 虚拟矿机服务器架设,Swarm Bzz个人矿机需要什么配置?Bzz节点一键自动部署工具...

    BZZ即将完成空投进入主网阶段,可以说现在就是bzz的头矿阶段!本文由实际经验总结,分享bzz币个人怎么配置才能尽快获得头矿!同时,附上bzz节点一键自动部署工具. Swarm白皮书中并没有提供的硬件 ...

  7. 自动部署项目,全靠它了!

    前几天我把我的开源项目部署到了云服务器. 我部署的大概流程: 登录到云服务器控制台,新建一个服务器实例(我用的 Ubuntu Linux). 在自己的电脑上生成 SSH 秘钥,将生成的公钥和实例进行绑 ...

  8. Eclipse自动部署项目到Tomcat的webapps下的有效方法

    Eclipse自动部署项目到Tomcat的webapps下的有效方法 开发JavaEE项目,常用的工具有MyEclipse,Eclipse,netBeans等,个人比较喜欢用Eclipse,因为它My ...

  9. jenkins自动部署项目到tomcat机器问题之jenkins打版项目卡住

    jenkins自动部署项目到tomcat机器 背景: 今天测试同事在执行jenkins自动打版项目并发布到tomcat机器的时候,出现一直卡住的情况 控制台日志输出如下 jenkins机器配置: je ...

最新文章

  1. jquery中在子窗口中获取父窗口的Input文本值
  2. 2011年工作总结和展望(下篇)
  3. 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)
  4. Python 延迟初始化(lazy property)
  5. iOS时间格式化遇到的坑
  6. 本地开发好的 SAP Fiori Elements 应用,如何部署到 ABAP 服务器上?
  7. jar包直接拷贝到WEB-INF/lib下和以userLibrary引入的区别
  8. node-glob 正则表达式
  9. 使用 Django + Wusgi + Nginx 部署 Django
  10. 求两个数组中不同的元素
  11. html使用最ie高版本,从html,css,javascript三方面谈谈“浏览器兼容性”的问题
  12. 文件编码 linux,【原创】Linux基础之文件编码
  13. php imagefill,PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
  14. 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week7-8 20165233
  15. Unity四元数,欧拉角
  16. 根据日期参数查询润乾报表
  17. c语言如何算字节,C语言中结构字节的计算方法
  18. 玩客云手动设置IP地址
  19. bzoj1921 [CTSC2010]珠宝商 SAM+后缀树+点分治
  20. 微信小程序来了,整理微信小程序学习教程网站

热门文章

  1. codeforces 796A-D
  2. Android adb不是内部或外部命令 问题解决
  3. inner join ,left join ,right join 以及java时间转换
  4. 技术专题之-技术概述的目录
  5. jQuery入门[2]-选择器
  6. JSPs only permit GET POST or HEAD的解决方案(REST风格)
  7. JavaEE——Mybatis(6)--association的分步查询与延迟加载 以及Collection和鉴别器discriminator...
  8. cookie与session的比较
  9. 使用struts中的DisPatchAction的时候需要用到的jar包
  10. 数据库操作--批量修改数据库表名及字段名大小写转换及首字母大写+删除没有数据无用的表...