git管理和自动部署项目

当一个项目需要纳入到版本控制的时候,选择的工具还是比较多的,最常见的就是工具有CVS,SVN,GIT等。在平时的开发中视情况而定,从来就没有最好的版本控制工具,只有最适合的工具。在这里我习惯用git来管理自己的项目,当然之前使用svn管理的,但是当用了git工具就不愿意再用其它的工具来管理。这里除了习惯之外,git的很多功能是svn不具备的,最简单的就是离线提交,用git管理的项目你会发现整个项目的大小变化不大,不像svn那样每个目录又有一个.svn 的目录,而且会使项目的变得很大。关于git与svn的区别这里就不详细讲解了,请参考(git与svn区别)。

GIT项目管理

  1. GIT 工具的下载

    • windows 平台下可以直接到 git for windows 上下载和安装,另外一种方式就是直接到 github    上搜索一个项目直接clone,按照引导流程你在windows上同样也安装了git,前提是你有github 账号。
    • Linux 平台下,想RedHat,ubuntu,centos 上都不一样,可以直接到网上搜索,以Ubuntu 为例,可以直接用 apt-get install git 就可以安装 git 了。
  2. git 操作(以ubuntu 平台为例)
    • 对于git的操作,或者是对于git的学习,直接下载 progit这本书,里面包含了对git的详细讲解,让你对git有一个全面的认识。在这里我总结下自己认为比较重要的几个部分。

      • git 的基本操作,包括从初始化一个版本到纳入本地管理以及把本地的项目push到git远程仓库中。以及对于提交版本的跟踪,日志的查看等。同样在参考这本书的同时,对于有疑问的地方也可以从到网上查找。
      • 对于服务器上的git的了解,包括对于git支持的协议的了解,最常用的就是 ssh 协议,像github 这种source code 的托管网站采用的是https协议,如何在git服务器上对多个开发者有效的管理,常用的工具就是gitosis, 可以参考 ubuntu 服务器上搭建git
      • 理解git 的分支(本地分支和远程分支),git合并代码的方式 merge 和 rebase 的理解。在这部分需要自己在本地反复的实验,从根本上理解二者的操作,优缺点等,关于这方面的文章也很多,可以参考 git rebase 简介基本篇
      • 最后如果有兴趣,可以对git的原理一探究竟,其实你可以把git理解为是一套内容寻址文件系统,理解git 是如何实现分支的,如果记录每一次提交的快照,是如何存贮这些版本的信息,git 有多少个对象,以及可以尝试用git底层提供的命令来完成对一个项目的管理。
  3. 有了上面的基础,你可以根据自己或者是团队的需求对项目进行版本控制。

 GIT 项目自动部署

对于自动部署我们先虚拟一个应用场景,就是你的代码仓库是位于A服务器上,你的项目运行在B服务器上,这里与WEB项目为主。假设所有开发人员把开发代码往A服务器上提交完之后,希望代码会自动跟新到B服务器上。这样就省去了人工部署项目的步骤,而且服务器上永远都是最新的代码。这里需要强调的是A服务器上的仓库初始化可以有2种方式,那就是,git init 和 git init --bare ,对于这2种区别可以参考 git init & git init --bare difference  这里简单的介绍一下,就是用git init 初始化是带有工作目录的(work tree),也就是可以看到一个完整的项目,用--bare 就只能git相关的文件,没有 work-tree 。这2种初始化方式取决于你的应用场景,值得注意的是 如果你采用 git init 初始化,那么需要修改 ,.git/config 这个文件,让它允许往这个仓库推送代码。

 [receive]
denyCurrentBranch = ignore

这里实现自动部署有2中方案,以Linux平台为例:

  1. 你可以借助shell脚本和cron job 来实现,也就是先编写一个脚本,这个脚本的功能就是从git 仓库下载,然后完成部署。然后编写定时任务让没间隔一个小时去到服务器上下载一次代码。代码如下:

    #!/bin/bash
    
    if [ -f "deploy.lock" ] ; then
    git pull origin master
    else
    git init
    git remote add origin [email protected]_ip:demo.git
    git pull origin master
    BASE_DIR="/var/www/html/demo"
    chown -R demo:www-data $BASE_DIR
    find -type d -exec chmod 750 {} \;
    find -not -type d -exec chmod 640 {} \;
    chmod u+x deploy.sh
    touch deploy.lock
    fi

    这里以demo这个用户为例,到远程的服务器上下载最新的代码,然后完成一系列部署,这里需要说明的是 ubuntu 下 apache 默认及时用www-data 这个用户和用户组为www-data 来管理项目的,这里我们把项目的所有者修改成demo 这个用户,用户组任然是www-data。这个脚本完成之后就可以把该脚本添加到定时任务中,这里就不讲解定时任务了,可以参考 PHP定时任务实现    。这样做的缺点就是不实时,优点就是容易控制。

  2. 另外一种就是借助git本身的所提供的钩子函数 hooks funciton , 这里就把脚本写在git 的 post-receive 阶段,该脚本位于 项目的hooks 目录下,默认脚本的后缀都是以.simple 结尾的,只要把.simple 去掉就启用了该脚本。这里需要说明的是用户权限的问题。因为git仓库的默认用户和所有者都是git这个用户,那么hook脚本也是会被git这个用户调用的,所以首先确保git这个用户可以下载自己仓库的代码。项目下载同时需要配置.git/config这个文件,表示让git忽略权限:

    [core]
            filemode = false

    其次apache项目运行的所有者和用户组都是www-data , 需要把项目的所有者修改为git这个用户,把git这个用户加入到www-data 这个用户组,此时hook这个脚本才会被git这个用户正确的调用,post-receive脚本的内容如下:

    #!/bin/sh
    #GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
    unset $(git rev-parse --local-env-vars)
    cd /var/www/html/demo || exit
    echo "git status info:"
    git status
    echo "***************************"
    git pull origin master
    echo "--- Done! ---"

    当这个脚本完成之后,只要代码提交到A服务器上,A服务器上立马执行钩子函数,代码就会从A服务器上项目的master分支自动跟新到B服务器上(运行环境上),这样就完成了自动部署。这里比较重要的就是用户权限的问题。

DONE!

时间: 2024-10-25 14:57:45

git管理和自动部署项目的相关文章

jenkins+git+maven搭建自动化部署项目环境

简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/jacky-        lulu/cxf_demo-Maven-Webapp)     系统:centos6.5 maven: Apache Maven 3.3.9 git:git version 2.0.0 1.首先安装git,看以前另外一篇博客 http://www.cnblogs.co

使用jenkins 插件自动部署项目至tomcat

前面使用maven.ant编译项目就不说,只说一下使用jenkins的插件自动部署项目 1.首先jenkins安装插件Deploy to container Plugin ,下载地址为:https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin 2.安装完后,将会在项目配置中见到一下选项 3.配置tomcat远程部署账号,在tomcat目录下conf文件内tomcat-users.xml 文件增加以下配置 <role rolename=&quo

maven自动部署项目以及常见问题解决

Maven自动部署war到Tomcat1. 在maven项目的pom里配置如下信息 <build> <finalName>dianxiao</finalName> <!-- WAR包的名字 --> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId

【Jenkins】使用Jenkins编译打包后自动部署项目

为了支持部署,需要安装一个插件:Publish Over SSH 进入插件管理: 在可选插件中搜索Publish Over SSH,然后进行安装即可: 安装好之后,需要配置一下我们的部署服务器的信息: 进入系统管理->系统设置: 在Publish over SSH模块中,添加自己服务器的信息,像我的部署服务器配置好IP地址,账号,密码,部署路径,通信端口(ssh通讯一般都是22)就行了: 配置好之后,可以点击一下下面的测试按钮,看看配置是否正确,显示Success说明配置OK,保存: 然后在构建

使用Maven自动部署Java Web项目到Tomcat问题小记

导读 首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤: 首先在Eclipse里将项目打包成war包 将服务器上原来的项目文件夹删掉 cd /var/lib/tomcat7/webapps sudo rm XXX.war sudo rm -rf XXX 将war包传到服务器上,比如用pscp命令上传 pscp -pw "xxx" XXX.war [email protected]:/var/lib/tomcat

使用Git管理代码版本

使用Git管理代码版本 本项目使用git管理项目代码,代码库放在gitee码云平台,(注意,公司中通常放在gitlab私有服务器中) 为什么要进行源代码管理? 方便多人协同开发,防止代码冲突,相互覆盖 方便版本控制利于以后得开发人员快速了解项目的开发过程,利于需求变更的时候进行代码回滚 git与svn区别 SVN都是集中控制管理的,也就是一个中央服务器,大家都把代码交到中央服务器,而git是分步式的版本控制工具,也就是说没有中央服务器,每个节点的地位平等 git 在python编译器终端执行gi

使用 Git Hooks 实现自动项目部署

最近在某服务器上面搭建 git 开发和部署环境,git 开发环境很简单,按照 ProGit 一书的相关知识就可以轻松搞定,实现了类似 Github 的使用 SSH + 私有 Clone 的方式. 关于部署,实际上是自动部署,起初的想法是使用 bash shell 制定一个定时任务去不断 git pull 产品代码,后来记得 Git 带有 Hooks,索性在ProGit 一书翻了翻: Git 本身可以调用自定义的挂钩脚本,其中有两组:客户端和服务器端.客户端挂钩用于客户端的操作,如提交和合并.服务

jenkins实现项目自动部署

背景 整体思路 实现方式 1 自动化部署脚本 2 远程执行 3 配置jenkins任务 背景 之前给公司搭建过一套gitlab+gerrit+jenkins的持续集成环境,由于操作起来有点繁琐,自己也没太搞清楚该怎么用,所以一直就只用了gitlab来做代码管理.最近要做一个项目自动部署的功能,使用过jenkins一定知道他的自动化功能.所以就从jenkins创建自动部署任务的方式来入手. 整体思路 jenkins可以配置触发器,当有新的提交时,触发执行相应的任务.由于jenkins和项目部署不在

【Webhooks】使用Git的Webhooks进行服务器自动部署代码

使用Git的Webhooks进行服务器自动部署代码 本文项目地址 https://github.com/diandianxiyu/PageBlog/blob/master/%E4%BD%BF%E7%94%A8Git%E7%9A%84Webhooks%E8%BF%9B%E8%A1%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E4%BB%A3%E7%A0%81.md 如有错误,请指正~ 前言 之前一直想做自动化运