简介

不知道大家一开始是怎么使用 git 进行开发的,反正我个人是先将代码提交到 github 仓库,然后用 SSH 登录到服务器,然后进行克隆或者版本更新。听起来就很麻烦,当然实际操作中也很麻烦,那么有什么可以 “一劳永逸 “ 的办法呢?请往下看!

简单使用

Git 钩子

什么是 git 钩子呢?官方解释有些长,简单来说就是一个在特定环境下触发的脚本。这个解释可能不太准确,但是我认为这样更容易理解一些,想了解更多的,可以去 Git 官网查看,下面我们就用钩子实现自动化部署。

第一步:创建 git 用户

登录我们的服务器,这里默认你已经安装好了 git。创建一个 git 用户:

 # 创建一个名叫jouzeyu的用户
adduser jouzeyu

第二步:给 git 用户添加权限

 #在根目录下的 home 文件夹下创建一个git文件夹

 mkdir /home/git

 #切换到创建好的git文件夹

 cd /home/git

 #创建 .ssh文件夹,里面主要用来放公钥

 mkdir .ssh

 #切换到.ssh文件夹并创建authorized_keys文件

 cd .ssh

 touch authorized_keys

第三步:配置 git 并获取公钥

 #在本地配置用户名和邮箱,我的用户名默认为jouzeyu

 git config --global user.name "jouzeyu"

 git config --global user.email "your email"

注意:如果用了 --global 选项,那么以后你所有的项目都会使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或邮箱,只需在该项目下执行:

 git config user.name "xxx"

 git config user.email "xxx"

OK,接下来我们获取公钥,请先查看你的用户下的.ssh 文件夹中是否之前就含有公钥和私钥,我们需要寻找一对以 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。

.pub 文件是你的公钥,另一个则是私钥。如果没有请运行 ssh-keygen。

使用 cat ~/.ssh/id_rsa.pub 命令可以获取公钥,复制它,使用 vi 或者 vim 命令把它粘贴到我们之前创建的 authorized_keys 文件中,使用:wq 保存。

第四步:初始化仓库

创建一个存放 git 仓库的文件夹:

 mkdir /www/wwwroot/git

 cd /www/wwwroot/git

初始化仓库:

 #初始化一个裸仓库(强烈建议)

 git init --bare website.git

 #配置仓库的权限,让我们之前创建好的git用户jouzeyu能读写

 chown -R git:git website.git

这里必须注意,如果不给权限,后面的 git pull 将会报错,原因是没有权限写入。关于裸仓库和普通仓库的区别简单来说就是裸仓库看不到项目文件,普通仓库和你的项目目录一样,只是多了一个.git 文件夹。

第五步:生成项目仓库

这个也是在服务器上进行的,同时说明一下 /www/wwwroot/ 是我的环境的根目录。

 #创建我服务器上的项目目录test

 mkdir /www/wwwroot/test

 #克隆仓库

 git clone /www/wwwroot/git/website.git

 #设置权限

 chown -R git website

注意:

一定要注意我的路径:

git 仓库是 /www/wwwroot/git,;

项目仓库是 /www/wwwroot/test。

第六步:克隆到本地

# 通过ip地址从配置好的线上仓库拉取下来

git clone git@47.97.121.XXX:/www/wwwroot/git/website.git

# 如果有配置域名的话也可以通过域名拉取

git clone git@www.XXX.XXX:/www/wwwroot/git/website.git

因为公钥的原因,这里是不需要密码的,如果成功你的电脑上会出现一个 website 的文件夹,如果报错请检查后再进行下面的操作。

第七步:测试上传(git pull)

 # 打开刚才克隆下来的本地仓库

 cd website

 # 创建README.md文件

 touch README.md

 git add .

 git commit -m"创建README.md文件"

 git push

不出意外已经正常上传了,如果报错请检查权限,上文提到过,如果还不行可以在下方评论。

第八步:添加钩子

终于到重头戏了,写的比较细,所以比较麻烦一些。回到我们线上的服务器,下面的是在线上操作的:

#切换到这个目录

cd /www/wwwroot/git/website.git/hooks

# 生成post-receive文件

touch post-receive

# 使用vim编辑

vim post-receive

在 post-receive 文件里面粘贴:

 #!/bin/sh

 # 打印输出

 echo '======上传代码到服务器======'

 # 打开线上项目文件夹

 cd /www/wwwroot/test/website

 # 这个很重要,如果不取消的话将不能在cd的路径上进行git操作

 unset GIT_DIR

 git pull origin master

 # 自动编译vue项目,如有需要请去掉前面的#号

 # npm run build

 # 自动更新composer(我暂时没试过)

 # composer update

 echo $(date) >> hook.log

 echo '======代码更新完成======'

保存后给 post-receive 文件加上运行权限:

 chmod +x post-receive

最后一步

在本地修改部分内容,然后提交推送 git pull,可以看到我们已经实现了自动化部署。

使用Git实现Laravel项目的自动化部署

链接:https://mp.weixin.qq.com/s/MkVh1lYUvpE5C2WZWmy0Zg

使用Git实现Laravel项目的自动化部署的更多相关文章

  1. 利用PowerShell+Jenkins,实现项目的自动化部署

    当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...

  2. laravel项目利用twemproxy部署redis集群的完整步骤

    Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...

  3. 利用Jenkins实现JavaWeb项目的自动化部署

    修改代码,打包,上传,重启... 大把的时间花费在这些重复无味的工作上.笔者与当前主流的价值观保持一致:我们应该把时间花费在更有意义的事情上.我们可以尝试借助一些工具,让这些重复机械的工作交给计算机去 ...

  4. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记

    前言    持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新 ...

  5. Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的

    前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...

  6. 利用jenkins做项目的自动化部署

    最近领导要求上海本地的项目需要使用进jenkins实现自动化部署,以便可以直接将项目移交给运维的同学,减轻开发的工作量.记录下这次爬坑的过程. 一.前言 Jenkins是基于Java开发的一种持续集成 ...

  7. laravel项目使用appnode部署linux系统到阿里云服务器流程记录(待补充)

    使用 SSH 连接工具,如 PuTTY.XShell.SecureCRT 等,连接 Linux 服务器后(阿里云服务器命令行内直接输入appnode安装命令,版本:mysql选5.7.php选7.2) ...

  8. php与Git下基于webhook的自动化部署

    前言 2018年第一篇文章,没啥技术含量,权当笔记 我们一般都会用git或者svn来管理我们的代码 每次代码更新后还要手动的去把服务器上的代码也更新一遍 项目小了还好 项目大了着实浪费时间 要是服务器 ...

  9. Laravel项目Linux服务器部署

    laravel项目本地开发,一切正常.部署到服务器,首页都加载不出来,查了n多教程,各种方法姿势都试过了,还是不行. 功夫不负有心人,最后终于找到了问题所在,在此做个记录,铭记教训. 排查错误一定要: ...

随机推荐

  1. 第8篇NFS PersistentVolume

    一.部署nfs服务端: k8s-master 节点上搭建了 NFS 服务器,也可以在部署节点搭建,原理一样 (1)安装nfs服务: yum install -y nfs-utils rpcbind v ...

  2. Redis面试题大全含答案

    Redis面试题大全含答案 Redis面试题大全含答案 1.什么是Redis?答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  3. java容器中 哪些是线程安全的

    容器中线程安全的如:vectory,hashtable,非线程安全的如:hashmap,arrylist等.      对于原定义非线程的容器如:hashmap,arraylist可以使用Collec ...

  4. 【leetcode】929. Unique Email Addresses

    题目如下: Every email consists of a local name and a domain name, separated by the @ sign. For example, ...

  5. shell变量,字符串,数组

    一.shell变量定义: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头: 中间不能有空格,可以使用下划线: 不能使用标点符号: 不能使用bash里的关键字. 变量使用: 使用一个定义过的 ...

  6. sql 实现分页+分组并取出分组内的前n条数据

    一.建表 if exists (select * from sysobjects where id = OBJECT_ID('[test]') and OBJECTPROPERTY(id, 'IsUs ...

  7. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

    2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...

  8. Database基础(五):使用binlog日志、XtraBackup备份工具、MySQL AB复制

    一.使用binlog日志 目标: 利用binlog恢复库表,要求如下: 启用binlog日志 创建db1库tb1表,插入3条记录 删除tb1表中刚插入的3条记录 使用mysqlbinlog恢复删除的3 ...

  9. IP地址的定义和划分

    IP地址分类:                IP地址根据首首字节开始位可以分为5大类:             分类        首字节开始位         首字节数字范围           ...

  10. Python matplotlib 交互模式

    在交互模式下一定要执行plt.pause(0.0001)  才会显示图像