利用gitolite实现自动部署的简易实现方式
来源:互联网 发布:帝国cms 附件名称 编辑:程序博客网 时间:2024/05/17 03:07
技术控是不是都像我一样,我想试验在flask框架一些示例程序在nginx+uwsgi的生产环境下的效果,于是想到了用git实现自动部署,于是看到gitolite,于是研究gitolite的服务器配置以及钩子相关的实现方式,看到了网上很多人的回答都不另人满意,其实完全可以有更简单的实现方式。有看官说了,你完全可以写完之后用rsync手动部署啊,但是我的代码库是在自己的一个阿里云服务器上的,我会定期把代码推送到自己的GIT服务器上,我就是不想推送完后再运行一个部署的命令。
gitolite 工作原理
gitolite提供了便于部署git远程仓库的工具,它本身并不提供服务,服务仍旧依托ssh对外提供。如果没有这种工具的话,你以ssh的形式往远程的仓库里推送修改,则需要远程服务器中提供一个用户,如果用户多的话对远程服务器的安全隐患则较大。gitolite则是用一个专门的用户git来受理推送,并维护远程的库,你本地的用户只需将ssh公钥提交到远程服务器便可以授权推送。并且对于用户公钥的维护、相关配置文件的修改等均不需要登录到远程服务器,在本地clone一个gitolite-admin的仓库,直接在本地修改,再推送到远程服务器上即可生效。
gitolite是受到gitosis启发开发的,但现在功能上面已经全面超越了gitosis了。用过github的人可能比较熟悉这种用法,将自己本地的公钥提交到github之后,便可以用git clone git@github.com:username/reposity
的方式克隆一个远程库,本地修改提交到可以将相关内容再推送到远程。我不知道github采用的是什么工具实现的这种功能,但gitolite基本已经实现了这种功能。
gitolite 安装与配置(远程服务器)
本文重点介绍gitolite实现Web的自动部署,gitolite的详细安装过程可以自行搜索,网上很多教程都写得不错。以下所指的远程服务器是指你要运行git仓库服务的服务器,本地是指要进行远程推送的主机,远程服务器上必须已经安装配置好ssh服务。
安装gitolite
首先安装gitolite,我用的是archlinux,管方源里有,ubuntu的官方源里也有gitolite。
添加并配置git用户
安装后查看一下系统有没有添加一个用户名为git的用户:
cat /etc/passwd |grep git
如果没有的话自行创建一个,并设置好此用户的根目录,这个目录便是用来存储git仓库的,如果已经有了这个用户的话,注意一下此用户的根目录的设置。
安装管理仓库及管理员账号
安装管理仓库以及管理员账号,首先将你要当管理员的账号(可以是远程也可以是本地)用ssh-keygen生成一个ssh公钥(~/.ssh/id_rsa.pub),将此公钥拷贝到服务器上,并命名为<yourusername>.pub
,然后安装此公钥生成初始的管理仓库:
su - gitgitolite setup -pk <yourusername>.pub
上面这一步安装完成后用ssh git@your_host_name info
可以看到一些信息如:
hello <your_username>, this is git@<your_server> running gitolite3 v3.6.2 on git 2.3.3 R W gitolite-admin R W testing
自动部署相关的配置
修改.gitolite.rc的相关配置(远程服务器)
进入到git用户的根目录用su - git
切换到git目录,并对.gitolite.rc相关的配置进行修改,主要修改的地方有两处:
找到.gitolite.rc中的这两行(并不在一起),去掉前面的注释:
LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local",repo-specific-hooks
克隆管理员仓库,并进行相关配置(本地)
下面是我的一个典型配置:
git clone git@<your_server>:gitolite-admin
以下所有的配置均是在本地进行的修改,最后提交到远程服务器端。
gitolite-admin下面有两个目录conf
和keydir
,第一个目录是用来存放配置文件,第二个目录用来存放用户的公钥,如果想添加用户的话可以将用户的公钥拷贝到此目录下并命名为<username>.pub
的格式,然后git add
、git commit
、git push
生效。
@devs = lxq gk@admins = lxqrepo gitolite-admin RW+ = @adminsrepo testing RW+ = @allrepo mysite option hook.post-receive= deploy RW+ = @devs R = @allrepo lxq/. C = lxq
第1、2行表示定义组,这些用户必须已经导入了公钥,可以为这个组设置权限。下面的几行均是为仓库设置权限,其中RW+
是指可读写可强制更新。注意第4个repo的设置,指定lxq
用户可以在lxq/
目录下新建仓库,即C
权限。这也是我最终抛弃gitosis选用gitolite的重要原因,gitosis建仓库必须手动到远程服务器上去搞。
第3个仓库mysite的配置里有一条option hook.post-receive=deploy
,gitolite扩展了git原有的钩子机制,表示这个仓库的post-receive
钩子脚本为deploy
,这样我们每次向mysite这个仓库里推送完后便可以调用deploy这个脚本进行部署。
自动部署的相关准备(远程服务器)
确定你要自动部署的目标目录,比如/srv/http/cgi-bin/mysite
cd /srv/http/cgi-bingit clone git@your_host:mysitesudo chown -R git:git mysite
创建deploy
脚本(本地)
在gitolite-admin目录下创建特定的目录:
# on your workstationcd /path/to/your/gitolite-admin-clonemkdir -p local/hooks/repo-specific
然后在repo-specific下创建deploy脚本:
#!/bin/shcd /srv/http/cgi-bin/mysiteunset GIT_DIRumask 022git pull
现在配置已经基本完成,所有配置完成后,一定要记得git commit和git push,相关配置即会在服务器端生效。
自动部署!(本地操作、远程自动处理)
git clone git@yout_host:mysite
对mysite里的东西进行编辑之后,运行git commit
、git push
,远程即可自动将相关内容部署到/srv/http/cgi-bin/mysite下。
- 利用gitolite实现自动部署的简易实现方式
- 搭建gitolite实现自动发布代码
- 利用 STAF 实现程序更新包的自动部署测试
- 利用 STAF 实现程序更新包的自动部署测试
- 利用 STAF 实现程序更新包的自动部署测试
- 利用WebHook实现Github或Coding代码的自动部署
- 利用twisted实现的简易web client
- 利用c实现简易的ping
- 软件加壳的简易实现方式
- 利用svn钩子实现自动导出部署WEB应用
- 利用svn钩子hooks/post-commit实现代码自动部署
- 利用WebHook实现PHP自动部署Git代码
- 非maven项目利用jenkin实现自动部署
- [笔记]利用Webhook实现coding上的代码自动部署到Centos7服务器上
- 通过WLST实现weblogic的自动部署
- 实现websphere8.5的自动部署
- git hooks 实现网站的自动部署
- openstack安装部署的一种实现方式
- ServletConfig理解
- struts2标签--form中的theme属性
- 学习计算机专业知识,我们该学什么?
- rmi object areald export
- 201 Bitwise AND of Numbers Range
- 利用gitolite实现自动部署的简易实现方式
- 如何构建高扩展性网站?
- SynchronousQueue/BlockingQueue/ArrayBlockingQueue区别
- C# 牛人必备知识
- java的InputStream和OutputStream的理解【转】
- MTK VENUSMMI VfxSignal的理解
- 苹果itunesconnect添加app时,无法上传图片,稍后再试
- 欢迎使用CSDN-markdown编辑器
- 122页17题