热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitssh拉取代码_Git钩子实现自动部署

记录一下使用Git钩子来实现网站的自动部署概念本地仓库:平时开发所在的环境,可以简单的理解为自己的电脑,记为L1远程git服务器ÿ
6cfbcf088c6704d0ea8a67a15e7ea2ae.png

记录一下使用Git钩子来实现网站的自动部署

概念

  • 本地仓库:平时开发所在的环境,可以简单的理解为自己的电脑,记为L1
  • 远程git服务器:git服务所在的服务器,比如我们自己内部搭建的gitlab服务运行在31服务器上,记为G1
  • 远程仓库: 运行仓库代码运行所在的服务器,比如我们的webserver运行的服务器,记为R1

在这里,我们的G1R1恰好是同一台机器

准备

假设G1上已经有存在的仓库webserver,并且在L1R1上都已经有通过git clone命令下载过来的版本一致的代码。并且R1上运行'webserver的用户为user1`

ssh免密登录

首先要实现运行git服务的用户(用户git)和user1ssh 免密登录。即git可以通过

ssh user1@xxx.xxx.xxx.xxx

直接登录user1

git用户下,运行命令

ssh-keygen

会在githome目录下生成私钥和公钥文件:

~/.ssh/id_rsa #私钥
~/.ssh/id_rsa.pub #公钥

如果home目录下已经存在密钥文件,则不需要重新生成。否则以前生成的密钥会失效!

git用户的公钥添加到user1~/.ssh/authorized_keys中,即

cat ~/.ssh/id_rsa.pub >> /home/user1/.ssh/authorized_keys #权限问题,这个命令不会成功,自己实现相同的结果即可

然后在user1下修改authorized_keys的权限:

chmod 600 ~/.ssh/authorized_keys

再回到git用户下,执行:

ssh user1@xxx.xxx.xxx.xxx

不用输入密码,即可直接登录user1用户

拉取更新脚本

user1用户下,新建一个脚本,实现从仓库拉取更新的功能,示例如下:

#!/bin/shDeployPath="/mnt/analysis/tests/test_uesr1/tmp/webserver" #远程仓库路径
cd $DeployPathIS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fiunset GIT_DIRecho "=========================="
echo "deploying the webserver"git fetch --all #使用fetch,不会自动merge
git reset --hard origin/master #强制和远程仓库保持一致time=`date`
echo "webserver fetch at time: $time."
echo "=========================="

可以将此脚本放在'home目录下,命名为git_fetch.sh

钩子的实现

git服务在服务器上会有相应的目录,在该目录下会有所有用户的所有仓库信息。因为我们要实现的是服务端钩子,所以需要在git服务的服务器上设置。

在我们的G1上运行的是gitlab服务,路径为:

/var/opt/gitlab

注意:git用户的home目录也在该路径下

在该路径下的git-data/repositories目录保存的就是仓库信息。进入我们需要设置钩子的仓库,比如:

/var/opt/gitlab/git-data/repositories/user1/webserver.git

在这个目录下,有一个hooks目录,这是一个软连接,里面是全局钩子。这里的钩子修改,所有的仓库都会执行。
因为我们只想设置单独的仓库,所以我们需要在当前仓库新建一个custom_hooks的目录,这个名称是写死的,不能用其他名称。
custom_hooks下新建post-receive文件,名称同样是定死的。这个名称的钩子代表push之后执行的动作:

mkdir custom_hooks #/var/opt/gitlab/git-data/repositories/user1/webserver.git/custom_hookscd custom_hooks
vim post-receive # 注意是横扛,不是下划线

post-receive里写以下命令:

#!/bin/shssh user1@xxx.xxx.xxx.xxx "sh ~/git_fetch.sh" #即登录user1,然后user1执行拉取更新的脚本

以上新建文件夹和文件的步骤如果是用root或者其他非git用户操作的,操作完后需要把所有者改成git:

chown -R git:git custom_hooks
chmod -R 777 custom_hokks # 755应该也可以

到此钩子的设置就完成了。接下来在本地L1修改完代码push到远程仓库后,R1上的代码也会自动从远程仓库拉取更新。

总结

工作流程其实很简单,主要是要分清各个角色执行的功能。

  1. L1修改代码,然后push给远程仓库,即G1
  2. G1上的仓库有post-receive钩子,但是执行用户是gitgit用户无权限对user1的仓库进行操作,所以通过ssh的方式登录到user1执行拉取更新的操作

本文首发于公众号:柠檬培养师(ID: yantinger90),欢迎关注!

0662f3ebbd61a2fae5c8cda6f6d21b95.png



推荐阅读
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 事变是如许的,我写了一个基于jQuery的插件,在传统的开辟形式中,我们须要如今页面引入jQuery.js,然后在引入我们的插件,我们的插件才运用。然则跟着webpack的鼓起,我 ... [详细]
  • eclipse_在eclipse上使用github,向github中提交项目
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了在eclipse上使用github,向github中提交项目相关的知识,希望对你有一定的参考价值。 ... [详细]
  • php连接mysql显示数据,php连接mysql数据库的算法思想
    本文目录一览:1、怎么用php显示mysql数据表数据 ... [详细]
  • 我猜想开发中大多都用注解,因为简单吗,哈哈正题:注解:就是一个类,使用注解名称。开发中:使用注解 ... [详细]
  • 电信网为不能访问联通服务器的网站_老板说网站慢,我们总结了三大阶段提升性能...
    作者:李平来源:https:www.cnblogs.comleefreemanp3998757.html前言在前一篇随笔《大型网站系统架构的演化》中&# ... [详细]
author-avatar
初学者
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有