用git布署网站的方法

用git布署网站的方法

本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:用git布署网站的方法

大家都知道github提供了搭建静态页面网站的方式,也就是github.io。其使用方式是建一个指定名称的版本库,以版本库的根目录作为网站的根目录。这样做有一些好处,比如很容易实现网站的版本控制,部署起来也相对方便。而且,不光是静态页面,对于一些脚本类网站,这个方式也是很不错的。(jsp就别想了)。

那么如果我有一台服务器(Windows或是Linux),可以用来架设网站,那么是不是也能像github.io那样,随着版本库的更新而更新网站呢?答案是肯定的。且听我慢慢道来。

安装git服务器

首先要搭一个git服务器,这里我使用了gitblit,官网链接在这儿。作为git服务器,gitblit的功能还是很够用的,界面也不错。下面来实际安装一下(以Ubuntu为例):

下载,解压gitblit(前置需求jre):

打开service-ubuntu.sh,将以下变量进行适当的修改,使其指向当前的目录:

然后安装gitblit:

gitblit/data/gitblit.properties文件里有以下内容,指定了http控制台的端口号:

gitblit/data/users.conf文件里可以设置admin用户的密码。

所以此时我们就可以用服务器IP(或域名)和端口号来访问控制台了:
gitblit_welcome

配置网站路径

这里用了nginx作为网站服务器,这里只给出一个例子,不作详述。注意这里的网站根目录:

创建版本库

打开gitblit的控制台,登录,选择导航栏上的“版本库”,选择“新建版本库”。

gitblit_create

填入必要的信息之后(版本库名为gittest),点击“创建”,就建好了一个版本库。在版本库页面,点击右上角的“编辑”以编辑这个版本库的属性。在编辑页面,选择左边的“receive”选项卡。向下滚动,可以看到脚本选项:

gitblit_option

如说明所言,pre-receive scripts会在push请求生效前触发,post-receive scripts会在push请求生效后触发。仔细回想一下需求:要想通过git布署网站,只需在push完成后,将网站目录更新成版本库的内容。所以这里所需要的,就是一个脚本。

编写脚本

gitblit的脚本保存在gitblit/data/groovy目录下,用groovy语言编写。原本这里就有一些例子脚本。翻看一下,发现localclone.groovy最接近我们的需求,其内容如下:

这个脚本是一个post-receive脚本,主要作用是将当前提交的版本库克隆到本地的某个目录下。如果这个目录下已经存在一个克隆好的版本库的话,就先删除之。对我们来说,这实在是太合适了,只需要将def rootFolder = 'c:/test'这句修改为def rootFolder = '/home/datadir/www'就好了(参考前面的nginx配置)。然后另存为一个脚本depolywebsite.groovy

配置版本库

回到版本库的属性的编辑页面,选中我们新写的脚本,保存。

gitblit_done

推送一次版本库,看看网站是否更新了?果然是成功了。

后续

这个脚本虽然能用,但有一些问题。

  • 必须把版本库放在根项目下才行,而不是能是私有版本库
  • 每次都要克隆一遍版本库,当版本库很大的时后会慢

所以只好改脚本了……

如何方便地改脚本

用IDE,我使用的是Intellij Idea,新建一个groovy工程,引入gitblit的库(存在gitblit/ext或gitblit/lib目录下,还有gitblit.jar),再在脚本的头部加入预定义变量:

修改脚本变得如此简单。当然,写完了以后别忘了去掉这些预定义变量。

用git布署网站的方法”有2条评论

  • nathan

    楼主好,我也同样部署了 gitblit,已经可以通过 gitblit 网页看到 客户端上传到服务器上文件了,groovy 文件也编写了, receive 也设置了,但就是上传后不去部署。请教还有什么需要注意的。

    回复
    • 炒饭 帖子作者

      如果不是目录写错了这种问题的话,那有可能是权限问题。gitblit对应的用户应该对rootFolder这个目录有写权限才行,否则不能在这个目录下创建文件。
      脚本最后一句“clientLogger.info(“${repoName} deployed to ${destinationFolder}”)”会在客户端显示信息的,你可以看看有没有这个信息。也可以在脚本里增加clientLogger.info(“一些内容”)来调试脚本。

      回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据