第十一章 Git代码管理项目
Git是一个开源的分布式版本控制住系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Git管理项目的方式有两种:一种是本地部署Git版本管理系统,另一种是通过在线的代码托管。
本地部署Git版本管理系统,需要自己搭建环境,但项目的提交与更新速度快,更适合比较封闭项目;在线托管最大的好处是在有网络的情况下可以随时随地的提交自己的代码,但项目是公开的,当然也可以创建私有项目,大多属于付费服务。
在代码托管服务器,GitHub无疑是最优秀的,其稳定性吸引了大批开发者和开源团队贡献自己的代码和项目。GitCafe 是国内非常优秀的代码托管服务网站,而且与GitHub 的使用极为相似。
11.1Git/GitCafe 托管测试项目
1) 下载及安装git
MacOSX用户下载链接:https://github.com/timcharper/git_osx_installer/downloads
Windows用户下载链接:http://code.google.com/p/msysgit/downloads/list
Linux各版本下安装Git:
Debian/Ubuntu $apt-get install git-core
Fedora $ yuminstall git
Gentoo $emerge --ask --verbose dev-vcs/git
ArchLinux $ pacman -S git
2) 创建SSH秘钥
在使用GitCafe 前你必须先建创自已的SSH key:
进入SSH 目录
Ubuntu
[email protected]:/home/fnngj/Python/pyse#cd ~/.ssh
[email protected]:~/.ssh#pwd
/root/.ssh
生成新的SSH 秘钥
如果你已经有了一个秘钥(默认秘钥位置~/.ssh/id_rsa文件存在)
[email protected]:~/.ssh#ssh-keygen-t rsa -C [email protected]
查看目录下会生成两个问题,id_rsa 是私钥,id_rsa.pub是公钥。记住千万不要把私钥文件id_rsa透露给任何人。
3) 添加SSH 公钥到GitCafe
1. 用文本工具打开公钥文件~/.ssh/id_rsa.pub ,复制里面的所有内容到剪贴板。
2. 进入GitCafe-->账户设置-->SSH 公钥管理设置项,点击“添加新公钥”按钮,在Title 文本框中输入任意字符,在Key 文本框粘贴刚才复制的公钥字符串,按保存按钮完成操作。
4) 测试链接
以上步骤完成后,你就可以通过以下命令来测试是否可以连接GitCafe 服务器了。
[email protected]:~/.ssh#ssh -T
[email protected]
11.1.1 提交代码
首先,在GitCafe 注册帐号并登录,选择创建一个项目。填写项目相关信息点击“创建”。
Git 的基本命令:在任意目录下输入“git”,查看git 所提供的命令。
[email protected]:/home/fnngj/Python/pyse#git
最常用的git 命令有:
add 添加文件内容至索引bisect 通过二分查找定位引入bug 的变更branch 列出、创建或删除分支checkout 检出一个分支或路径到工作区clone 克隆一个版本库到一个新目录commit 记录变更到版本库diff 显示提交之间、提交和工作区之间等的差异fetch 从另外一个版本库下载对象和引用grep 输出和模式匹配的行init 创建一个空的git 版本库或者重新初始化一个log 显示提交日志merge 合并两个或更多开发历史mv 移动或重命名一个文件、目录或符号链接pull 获取并合并另外的版本库或一个本地分支push 更新远程引用和相关的对象rebase 本地提交转移至更新后的上游分支中reset 重置当前HEAD 到指定状态rm 从工作区和索引中删除文件show 显示各种类型的对象status 显示工作区状态tag 创建、列出、删除或校验一个GPG 签名的tag 对象
全局设置:设置自己的用户名和密码,和GitCafe 保持一致:Ubuntu
[email protected]:/home/fnngj#git config--global user.name ‘fnngj‘
[email protected]:/home/fnngj#git config--global user.email ‘[email protected]‘
在本地创建一个项目:Ubuntu
[email protected]:/home/fnngj/pyse#
ls
baidu.py baidu.py~
创建pyse 目录,在目录下创建了一个简单的测试脚本baidu.py。
Ubuntu
[email protected]:/home/fnngj/pyse#git init
初始化空的Git 版本库于/home/fnngj/pyse/.git/
Gitinit 对我们的目录进行初始化。使pyse 目录交由Git 进行管理。
Ubuntu
[email protected]:/home/fnngj/pyse#
git status
git status 查看当前项目下所有文的状态
我们看到当前处于master(主)分支,罗列了当前目录下的文件(baidu.py),并且提示我未对当前目录下的文件进行跟踪(跟踪什么?跟踪文件增、删、改的状态。);更详细的告诉我可以通过git add <file>来对文件进行跟踪。
[email protected]:/home/fnngj/pyse#git add .
[email protected]:/home/fnngj/pyse# git status
git add . git add 命令可以对指定指定的文件添加跟踪。例如:git add baidu.py。“.”点号表示对当前目录下的所有文件/文件夹进行跟踪,就是提交给Git 进行管理。
git status 通过git status 命令查看当前Git 仓库的信息。
[email protected]:/home/fnngj/pyse# git commit-m ‘first commit file‘
git commit 将文件(git add 进行管理的文件)提交到本地仓库。-m 参数对本次的提交加以描述。一般提交的描述必不可少,从而方便可追溯每次提交都做了哪些修改。
准备工作已经完成,下面提交代码到GigCafe:
Ubuntu
root:/home/fnngj/pyse#git remoteadd origin ‘[email protected]:fnngj/pyse.git‘
root:/home/fnngj/pyse#git push-u origin master
git remote add origin‘[email protected]:fnngj/pyse.git‘
如果你是第一次提交项目,这一句非常重要,这是你本地的当前的项目与远程的哪个仓库建立连接。
git push -u origin master
将本地的项目提交到远程仓库中。
现在已经可以访问GitCafe 上看到我们提交的项目了!
11.1.2 更新代码
克隆代码
上面的代码编写与提交是我在公司的电脑上完成的,假如我回到了家里想继续编写自己的程序,那么需要将代码克隆家里的电脑上。
/Python_selenium2$ git clone git://gitcafe.com/fnngj/pyse.git
git://gitcafe.com/fnngj/pyse.git
为提交的项目在GitCafe 上的地址。通过git clone 命令就可以把项目克隆到本地。
更新项目
我们克隆文件到本地的目的是进一步地对代码进行修改并提交。通过git status 你会发现, 我在pyse 目录下做了比较大的改动, 首先修改了Gitcafehelpdoc.wps 文件,然后新增加了一些文件和文件夹。
提交更新
去克隆一个项目很简单,提交一个项目比较麻烦,必须有相应的权限。因为我已经更换了电脑,所以我需要再次在本机生成ssh公钥,并把生成的公钥添加到GitCafe 中。具体步骤,参考前面的内容。测试链接:
/Python_selenium2$ ssh -T [email protected]
提交代码到GitCafe:
/Python_selenium2$ git add . ---添加当前目录下的所文件及文件夹
/Python_selenium2$ git commit -m "addtest file and data and report"
--对提交的内容进行说明
/Python_selenium2$ git push origin master
--提交代码到远程服务器(gitcafe)
/Python_selenium2$ git remote –v
在git push 的时候出问题了,告诉不能与远程服务器链接。但是通过git remote -v 查看你当前项目远程连接的是的仓库地址是OK 的呀!但是这个Git 地址只能用于克隆文件到本地,无法通过这个地址push 项目。
[email protected]:fnngj/pyse.git
上面的地址才是一个可以push 项目的地址。
那么我们就需要把origin 删除掉,重新以上面的地址建立链接。
/Python_selenium2$ git remote rm origin
--删除origin
/Python_selenium2$ git remote add origin‘[email protected]:fnngj/pyse.git‘
--重新链接
/Python_selenium2$ git remote -v
-- 现在的链接地址是可以push
/Python_selenium2$ git push -u origin master--重新push
项目
这一次就可以正常push 项目了,这也是新手容易迷惑的地方;在GitCafe中,克隆项目与提交项目的地址存在细微的差别。
删除提交
通过Git 管理的项目,有些文件或目录已经废弃掉了,我需要手动删除这些文件或目录,通过git rm命令来删除文件。
/Python_selenium2$ git rm baidu.py~
---删除文件
/Python_selenium2$ git rm abc/ ---删除目录
/Python_selenium2$ git status
/Python_selenium2$ git commit -m"delete baidu.py~"
/Python_selenium2$ git push origin master
pull最新代码到本地
为了避免冲突我们应该形成良好的习惯,在每次push 代码之先把服务器上最新的代码pull 到本地。
/Python_selenium2$ git pull origin master
主流的在线托管网站:
http://www.github.com/
http://git.oschina.net/
11.2 Git/GitServer搭建
如果你刚好一个台闲置的服务器的话来做为Git 服务器是个不错的选择。下面通过一种最简单的方式来构建我们的Git Server。我们在虚拟机(ubuntu)来创建一个Git Server ,本地通过模拟A、B两个用户向Git Server 克隆项目,然后通过不同的用户push和pull 项目。
通过上面结果图可以看到,本机系统为windows XP ,通过Oracle VM VirtualBox 安装Ubuntu12.04系统,在Ubuntu 上我们创建了git server ,本机系统上创建了分别两个目录(git、git2)来表示两个不同的用户向git server 上提交和拉取项目。
11.2.1 配置Git Server
首先登录Ubuntu 系统创建Git Server
1、安装Git 和openssh:
Ubuntu
[email protected]:sudoapt-get install git-core
[email protected]:sudoapt-get install openssh-server
[email protected]:sudoapt-get install openssh-client
2、创建一个Git 用户为:gituser,密码为:git。
[email protected]:/home/fnngj# addusergituser
3、切换到gituser 用户
fnngj@fnngj-VirtualBox:~/git$
su –gituser
[email protected]:~$ pwd --查看当前路径
[email protected]:~$ mkdir git--创建git
目录
[email protected]:~$ cd git/ --进入git
目录
注意:通过root 用户切换到其它用户是不需要密码的,如果通过普通用户切换到root 用户或其它普通用户时需要输入用户密码。的Linux 操作系统下root 具有最高权利。
4、创建git-test.git项目
[email protected]:~/git$git --bareinit git-test.git --
创建git-test.git
仓库
现在创建了一个空项目。
11.2.2 检查连接
在访问虚拟机之前我们需要确认本地系统与虚拟机是否可以正常连接,一般虚拟机会提供了三种工作模式,host-only(主机模式)、NAT(网络地址转换模式)、bridged(桥接模式),读者可以参考其它相关资料进行配置。
查看虚拟机IP:
[email protected]:/home/gituser/git#
ifconfig
在linux 下可以通过ifconfig 命令查看本地网络配置,通过上面的信息可以了解到当前的虚拟机IP为:172.16.10.3
本地ping 虚拟机IP 地址:
/Python_selenium2$ ping 172.16.10.3
本地系统通过ping 命令可以访问到虚拟机,那么我们就可以正常进行后面的操作。
11.2.3 A用户访问Git服务器
Git 服务器已经搭建完成,并且本机与服务器之间通信正常,下面模拟A 用户操作Git 项目。
克隆项目到本地:
/git1$ git clone [email protected]:/home/gituser/git/git-test.git
Git 的常用命令我们已经比较熟悉了,git clone 可以将项目克隆到本地,有所不同的是这次我们克隆的是虚拟主机(172.16.10.3)下的(/home/gituser/git/git-test.git)目录下的项目,注意我们是通过gituser 用户访问的,所以需要输入gituser 用户的密码git。
提交项目
我们在git/git-test.git 目录下创建hello.py文件:
git1/git-test(master) $ git status
git1/git-test(master) $ git add .
git1/git-test(master) $ git commit-m ‘hello‘
git1/git-test(master) $ git pushorigin master
11.2.4B用户访问Git服务器
Git 服务器已经搭建完成,并且本机与服务器之间通信正常,下面模拟B 用户操作Git 项目。
克隆项目到本地:
/git2$ git clone [email protected]:/home/gituser/git/git-test.git
Git 的常用命令我们已经比较熟悉了,git clone 可以将项目克隆到本地,有所不同的是这次我们克隆的是虚拟主机(172.16.10.3)下的(/home/gituser/git/git-test.git)目录下的项目,注意我们是通过gituser 用户访问的,所以需要输入gituser 用户的密码git。
提交项目
我们在git/git-test.git 目录下创建hello.py文件:
git2/git-test(master) $ git status
git2/git-test(master) $ git add .
git2/git-test(master) $ git commit-m ‘hello‘
git2/git-test(master) $ git pushorigin master
A 用户拉取(pull)项目
git1/git-test (master) $ git pull origin master
通过pull 命令来拉取B 用户所提交的git.py 文件。最终,我们达到多人协作开发的目的。需要强调的是我们的A、B 两个用户与git server 保持通信所使用的是SSH 协议,用户为gituser ,每次在提交和拉取的时候都需要输入gituser 用户密码。
如果读者想实现更强大的git 管理可以使用:
l 使用gitosis 来管理(gitosis 可以设定到"谁" 可以存取此专案)
l 使用gitolite 来管理(gitolite 可以设定"谁" 可以存取此专案, 而且, 可以设定只能存取哪个branch等路径)
第十二章 持续集成Jenkins入门
大师Martin Fowler 对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
Jenkins 主要用于监视执行重复工作,如建立一个软件项目或工作运行的计划任务。当前Jenkins 关注以下两个工作:
不断的进行项目的构建/测试软件:就像CruiseControl 的或DamageControl。概括地说,Jenkins 提供了一个易于使用的所谓的持续集成系统,使开发人员更容易修改整合到项目中,并使它更容易为用户获得一个新的版本。自动,连续生成提高了生产率。
监控外部运行的作业:如计划任务作业和procmail 的工作,即使是那些在远程机器上运行的执行。例如,cron 的,你收到的是定期的电子邮件,捕获输出,它是由你来看看他们的努力和注意的时候就坏了。Jenkins 保持这些产出和很容易让你注意到什么是错的。
12.1 环境搭建
Jenkins 是基于Java 开发的一种持续集成工具,所以,Jenkins 需要Java 环境,关于Java环境的配置我们在第九章使用Selenium Grid 时已经做了介绍,这里就不在讲解。
1. 安装tomcat
tomcat 是真对Java 的一个开源中间件服务器(容器),基于Java Web 的项目需要借助tomcat 才能运行起来。tomcat 官方网站:http://tomcat.apache.org/
点击页面右侧tomcat 版本进行下载,对下载的压缩包进行解压,目录结构如下:
通常将需要运行有应用放到webapps/目录下,进入bin/目录下,双击startup.bat 来启动tomcat 服务器。
2.安装Jenkins
Jenkins 官方网站:http://jenkins-ci.org/
打开首页后,我们可以在页面右侧找到不到系统所对应的Jenkins 版本,读者可以根据自己的系统版本进行下载。下载完成,双击进行安装,点击“next”按钮,我们直接将其安装到tomcat 的webapps\目录下。
运行Jenkins
进行tomcat 的bin/目录下启动startup.bat,通过浏览器访问:http://localhost:8080/
12.2 创建任务
点击首页“创建一个新任务”的链接,如下:
Jenkins 提供了四种类型的任务:
l 构建一个自由风格的软件项目
这是Jenkins 的主要功能.Jenkins 将会结合任何SCM 和任何构建系统来构建你的项目, 甚至可以构建软件以外的系统.
l 构建一个maven 项目
构建一个maven 项目.Jenkins 利用你的POM 文件,这样可以大大减轻构建配置.
l 构建一个多配置项目
适用于多配置项目,例如多环境测试,平台指定构建,等等.
l 监控一个外部的任务
这个类型的任务允许你记录执行在外部Jenkins 的任务, 任务甚至运行在远程机器上.这可以让Jenkins 作为你所有自动构建系统的控制面板.
选择第一个项“构建一个自由风格的软件项目”,点击“OK”。进入项目的详细配置页面如下:
添加项目描述:
高级选项:
源码管理:
构建触发器:
增加构建步骤:
我们选择execute Windows batch command,来创建一个windows 下的批处理。
假如,我在d:\\盘根目录下有一个test.py 的脚本,我们要在命令提示符下来运行这个脚本,如何做呢?
我需要两步操作,首先,需要切换到D 盘,接着通过Python 执行test.py 文件。
创建完成,点击保存。
12.3 运行构建
项目首页如下:
左侧列表是关于项目的操作。
如果需要修改刚才的配置信息,可以点击“配置”链接重新进行修改。
点击“立即构建”选项,Build History 将显示项目的构建状态。
点击“Console Output”查看:
跟我们在命令提示符下的操作一致,最后提示:SUCCESS,表示此次构建是成功的。
查看构建历史:
点击“返回到工程”返回到项目首页,点击“构建历史”,如果进行了多次构建,可以看到项目的构建历史图表。
进一步探索:
l 通过Jenkins 实现定时任务。比操作系统的定时任务更方便灵活。
l 与CVS 和SVN 等版本控制工具集合,使版本工具发生更新时进行项目的构建。