Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚。下面介绍windows环境下的自动部署和发布。

所需环境及资源:Java环境、Gitblit;示例服务器环境:windows server 2012

一、Java环境的安装

1)下载JRE安装包
windows环境下使用GitBlit,必须安装Java环境,而Java环境可采用JRE或JDK两种方式安装,这里采用JRE的方式,其安装包相对JDK也要小不少,若已安装JDK环境可忽略。

JRE安装包传送门https://www.java.com/zh_CN/download,根据需要下载合适的版本,大约七八十M,下载完后安装。

2)设置环境变量
这里以JRE为例,右键这台电脑 => 属性 => 高级系统设置 => 高级 => 环境变量 => 系统变量。

  当前Java的安装目录如下:C:\Program Files\Java\jre1.8.0_261

   新建变量名:JAVA_HOME,变量值:C:\Program Files\Java

新建变量名:CLASS_PATH, 变量值:.;%JAVA_HOME%\jre1.8.0_261\lib

编辑变量名:Path,在已有值的最后添加 :;%JAVA_HOME%\jre1.8.0_261\bin;

在命令行中运行 java -version ,看到输出版本号即安装成功。

二、下载GitBlit并解压(无需安装)

GitBlit下载地址:http://www.gitblit.com/,选择windows版本。下载后解压到目录如:E:\software\gitblit-1.9.1

1)新建空文件夹,如:E:\MyGit,用来存放项目(目前测下来依然跑到Gitblit目录下去了,有兴趣的同学可以看看);

2)进入E:\software\gitblit-1.9.1\data目录,编辑defaults.properties文件:

设置http端口,这里写了推荐的8080,httpBindInterface不用设置保留为空,方便后续本地、外网IP皆可访问

3)gitblit目录双击运行gitblit.cmd

4)浏览器访问http://localhost:8080,登录账户、密码均为:admin

5)设置Gitblit以服务方式启动(关闭命令行后,Gitblit会随之关闭)

5.1 编辑Gitblit目录下的installService.cmd文件,如图所示:

5.2 修改保存后,打开windows命令行窗口,进入到GitBlit根目录,运行installService.cmd
命令一:cd E:\software\gitblit-1.9.1
命令二:installService.cmd

5.3 鼠标右键Gitblit目录下的gitblitw.exe文件,作类似如下设置(根据自己的安装目录):

5.4 点击应用,回到General,点击start(已启动将为灰色),确定

5.5 windows+R,运行输入services.msc,找到gitblit,确保设置启动,且为自动模式。

三、Gitblit使用

1)admin登录后,创建版本库,如test、添加用户如testuser;而后可通过编辑版本库或编辑用户设置相应的版本库权限,这里以RWD权限为例,权限过低如R将导致提交不了git更新

2)回到本地,外网IP地址访问方式,登录创建的用户testuser,点击挂载的版本库(注意端口29418,以前前面步骤的8080等端口:服务器防火墙以及云服务器安全组均需开启相关端口)

至此,即可通过git方式clone该版本库,该方式每次提交更新需输入密码,可采取添加SSH Key方式免提提交;本地客户端生成SSH Key,可采用Git Gui或命令生成Key:

1、GUI生成SSH Key

2、命令生成Key

ssh-keygen -t rsa -C "abc@163.com",-C后内容为指定注释,标识秘钥,可输入邮箱或其他信息

注:如本机已有生成key,一般可到C:\Users\Administrator\.ssh下查看d_rsa.pub公钥文件

3)设置SSH Key

以testuser为外网IP登录Gitblit,将生成的Key复制粘贴到SSH Keys中,添加后即可免密提交Git。

四、Gitblit自动部署Web目录

为方便用户Git提交后,自动部署到Web站点目录,这里采用Gitblit的hook post-receive方式实现;

1)打开Gitblit目录下的data/groovy目录,如:E:\software\gitblit-1.9.1\data\groovy,复制localclone.groovy文件,重新命名为如:autoclone.groovy,修改其中内容如下:

 import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import com.gitblit.utils.StringUtils
import java.text.SimpleDateFormat
24 import org.eclipse.jgit.api.PullCommand
25 import org.eclipse.jgit.api.CloneCommand
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.eclipse.jgit.util.FileUtils
import org.slf4j.Logger // Indicate we have started the script
logger.info("localclone hook triggered by ${user.username} for ${repository.name}") def rootFolder = 'E:/release/wwwroot'
def bare = false
def cloneAllBranches = true
def cloneBranch = 'refs/heads/master'
def includeSubmodules = true def repoName = repository.name
def destinationFolder = new File(rootFolder, StringUtils.stripDotGit(repoName))
def srcUrl = 'file://' + new File(gitblit.getRepositoriesFolder(), repoName).absolutePath if (destinationFolder.exists()) {
89
90 Git git = Git.open(destinationFolder)
91 //调用 pull 类下的 pull 方法
92
93 PullCommand cmd = git.pull()
94 //设置对象分支
95 cmd.setRemoteBranchName(cloneBranch)
96 //执行
97 cmd.call()
98 //关闭
99 git.close()
100 logger.info("File update succeeded")
101 clientLogger.info("File has been updated")
102
103 }else{
104
105 // delete any previous clone
106 // clone the repository
107 logger.info("cloning ${srcUrl} to ${destinationFolder}")
108 CloneCommand cmd = Git.cloneRepository();
109 cmd.setBare(bare)
110 if (cloneAllBranches)
111 cmd.setCloneAllBranches(true)
112 else
113 cmd.setBranch(cloneBranch)
114 cmd.setCloneSubmodules(includeSubmodules)
115 cmd.setURI(srcUrl)
116 cmd.setDirectory(destinationFolder)
117 Git git = cmd.call();
118 git.repository.close()
119
120 // report clone operation success back to pushing Git client
121 clientLogger.info("${repoName} cloned to ${destinationFolder}")
122 }

注意红标引用及相关代码:

rootFolder = 'E:/release/wwwroot',此处为你的站点根目录,当有git提交时,将触发钩子,判断是否已存在git仓储目录,存在则pull,不存在则clone;
初始化配置时,建议wwwroot下不要存在任何文件或目录,一切交由Gitblit自行处理,用户git提交后,wwwroot目录将会clone具体的仓储目录,如test(E:/release/wwwroot/test,同时该目录也是Nginx或IIS站点的具体指向路径)。 2)设置钩子文件到具体的版本库
以拥有相关版本库编辑权限的账户登录Gitblit,编辑版本库 => receive => post-receive,添加前面设置的aotoclone到Selected列表:

至此,用户Git提交新版本后,即可及时浏览到最新的发布站点。

												

windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录的更多相关文章

  1. 在Windows平台下使用Gitblit搭建Git服务器图文解说

    Windows平台下Git服务器搭建 一.java环境变量的设置 下载jdk并配置jdk的环境变量,JAVA_HOME,CLASSPATH以及PATH,最后在DOS窗口输入java -version检 ...

  2. windows环境下基于nginx搭建rtmp服务器

    基于nginx搭建rtmp服务器需要引入rtmp模块,引入之后需重新编译nginx linux环境几个命令行就能实现编译,笔者未尝试,网上有很多教程. windows环境还需要安装一系列的编译环境,例 ...

  3. 在windows环境下利用virtualenv搭建Python虚拟环境

    安装Python 安装时只有一点需要注意,一定一定要将Python添加到系统环境变量那一项勾选. 安装 virtualenv 加入系统目录之后,命令行(CMD)下就多了一条命令:pip.用pip可以自 ...

  4. Windows平台使用Gitblit搭建Git服务器教程

    Windows平台使用Gitblit搭建Git服务器图文教程 Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭 ...

  5. Windows 使用 Gitblit 搭建 Git 服务器

    吐槽 Windows 安装 Git 那真是各种问题层出不穷,试过N种方法,反反复复不知道装了多少遍,然后又卸载.最后使用了Gitblit搭建Git服务器,虽然也遇到一些问题,但是都解决了.这个软件其实 ...

  6. Windows环境下利用github快速配置git环境

    在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...

  7. Windows下使用GitStack搭建Git服务器

    Win10下使用GitStack搭建Git服务器 Git是目前世界上最先进的分布式版本控制系统(没有之一). ​ 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别. ...

  8. windows10 使用gitblit搭建git服务器

    今天在win10上使用gitblit搭建git服务器时被坑了下,因为安装的java9出现不兼容问题,果断卸载重装了jdk8.废话不多说直接进入正题吧: 第一章 前言 使用gitblit搭建git se ...

  9. Windows环境下使用bitvise架构sftp服务器

    Windows环境下使用Bitvise架构sftp服务器 Bitvise分成Bitvise ssh server和Bitvise ssh client 0 说明:文档暂时只使用Bitvise工具做搭建 ...

随机推荐

  1. odoo13之文件预览widget/模块

    本文示例代码可查看github仓库:odoo13_file_preview 文件预览效果图展示 效果描述: 1.当点击图片或者文件时展开图片. 2.当点击关闭按钮时关闭图片预览. 3.当点击下载按钮时 ...

  2. vue中模块局部刷新

    父组件: 一. 父组件中引入子组件           data中定义变量 二. 定义provide函数 三.写reload方法 需要刷新的那个子组件: 一.引入                   ...

  3. NIO(三):Selector选择器

    一.堵塞式与非堵塞式 在传统IO中,将数据由当前线程从客户端传入服务端,由服务端的内核进行判断传过来的数据是否合法,内核中是否存在数据. 如果不存在数据 ,并且数据并不合法,当前线程将会堵塞等待.当前 ...

  4. jpa jpql @query 动态查询

    需求/背景 假设有一个用户表, 对应的用户实体: public class User { @Id Long id; //姓名 String name; //性别,男0女1 String sex; // ...

  5. MinIO很强-让我放弃FastDFS拥抱MinIO的8个理由

    目前可用于文件存储的网络服务选择有很多,比如阿里云OSS.七牛云.腾讯云等等,但是收费都有点小贵.为了帮公司节约成本,之前一直是使用fastDFS作为文件服务器,准确的说是图片服务器.直到我发现了Mi ...

  6. Zabbix5 Frame 嵌套

    Zabbix5 Frame 嵌套 Zabbix 默认不允许嵌套在其他页面上,通过修改配置允许嵌套 找到 Zabbix 下面的 include/defines.inc.php 文件,末尾有一行 defi ...

  7. 企业级Gitlab-ci实践

    前言 吐槽一波 2020年6月2号刚入职公司时,第一感觉是集群环境是个大坑!内网一套,公网一套.内网采用单节点Kubernetes,公网采用aliyun托管的X节点Kubernetes(还有节点是2C ...

  8. HttpClient 模拟用户操作

    首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ...

  9. java this关键字调用构造方法

    一 this调用构造方法 构造方法之间的调用,可以通过this关键字来完成. 格式: this(参数列表); 构造方法的调用举例: class Person { // Person的成员属性 priv ...

  10. Linux expect用法介绍

    1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...