目录[-]

目录:

  1. 引言
  2. Virsual SVN Server 安装
  3. TortoiseSVN 安装
  4. Jenkins 使用 Virsual SVN 代码替代本地代码

————————————————————————————————

1.引言

在之前的文章中,只讨论了本地代码与Jenkins的交互,但是企业中,代码可能不止一个人维护,所以需要引入一个代码仓库的概念,所有人遵循同样的规则,上传代码到服务器、从服务器下载代码,企业常用的分2种,SVN与GIT,对比一下特点。

特性 SVN GIT
核心架构 集中式:只有一个中央仓库,唯一代码源 分布式:每个开发者本地有完整克隆,包括全部历史
存储方式 存储文件之间的差异 存储文件的快照,体积小
网络依赖 强依赖 弱依赖,只在同步时需要网络
权限控制 非常精细,可实现目录级(文件级)读写权限管理 相对粗糙,需复杂配置
适用范围 传统企业、游戏开发、汽车、金融、医疗行业、政府部门等强代码控制类型企业 敏捷式开发、开源社区、小型企业等

比如一家企业,在开发架构设计好了底层框架后, 它更加适合SVN控制,仅保留几个关键人员维护框架,而基于框架基础开发的各个模块,就更加适用GIT,尤其适合敏捷开发,二者可以配合使用。

—————————————————————————————————————————————

2.Virsual SVN Server 安装

官网下载地址:http://subversion.apache.org/packages.html

Windows 64位操作系统,下载第三条,它就是代码保存的服务器,另外说一个关于网络的常见问题,SVN服务器需要和SVN客户端在同一网段,比如,服务器的IP地址是10.60.16.40,客户端的IP地址是192.168.1.290,那么这两个永远无法连接,如果客户端的IP是10.60.16.230,理论上就是可以连接上的。

下面开始安装

  1. 官网下载的新版SVN Server正式版需要购买,这里演示用的免费版:

    http://www.onlinedown.net/soft/632990.htm

  2. 填写安装路径
  3. Location:服务器端安装目录

    1. Repositories:版本库目录

    2. ServerPort:端口号默认443,可以手动调整其他,但调整后需要修改本地防火墙入站规则,正常是不建议修改的

    3. Use Subversion authentication:使用Suvversion用户认证

  4. 下一步
  5. 下一步    
  6. 选择第一项,标准版本
  7. 安装后再打开SVN Server,会在本地看到启动时占用了443端口
  8. 下面开始创建一个服务器的仓库,打开应用后,在第一个Repositionies鼠标右键,选择第一项:Create New Repository
  9. 比如创建一个叫叫做“游泳健身”的文件夹
  10. 创建完毕后,弹窗会提示当前仓库在服务器上的URL地址
  11. 本地也同步生成了一个文件夹,如下,这里存储的服务器端数据
  12. 回到项目,添加用户(作用是给不同账号配置不同读写权限),在“User”鼠标右键点击“Create User”
  13. 比如创建一个用户:xiaoming,密码是:Aa112233!@#
  14. 绑定用户和项目,在“游泳健身”项目鼠标右键点击Properties
  15. 添加刚才添加的用户xiaoming
  16. 多说一句,为什么要创建用户xiaoming,为什么要绑定用户和项目,这些将在Jenkins配置时揭晓。

—————————————————————————————————————————————

3.TortoiseSVN 安装

下载地址:https://www.ddooo.com/softdown/8634.htm

得到2个安装包,一个是应用程序安装包,一个是汉化程序,先安装TortoiseSVN,它的作用是连接服务器端

安装步骤:

  1. 双击安装包
  2. 一直点击Next就可以了
  3. 安装汉化包
  4. 安装完毕后,在桌面空白处,鼠标右键,可以看到TortoiseSVN选项,在“设置(S)"调整显示中文后,如下图
  5. SVN客户端有几个主要的功能,检出、导出、导入、更新、提交,下面分别解释它们的作用
    1. 检出:作为和服务器交互的目录,它会将服务器上对应目录的文件夹/文件拷贝到本地指定目录,每次点击“检出”时,都会与服务器上的文件夹/文件进行对比,如果服务器上有更新的内容,则同步到本地
    2. 导出:将服务器上的文件拷贝到本地(区别于检出,这里只是单纯的拿到服务器上的文件)
    3. 导入:将本地的文件拷贝到服务器
    4. 更新:检出时,会给本地的一个文件夹打上绿色对号√,在该文件夹下,鼠标右键可以看到更新和提交按钮,点击更新时,校验本地目录与服务器对比,有没有缺少/文件内容变动,更新后,同步到服务器上最新数据
    5. 提交:同上,在服务器检出后,修改内容后,点击“提交”,会给服务器上传本地文件,并且是最新版本
  6. 下面详细解释操作步骤,比如已经导入一部分内容到SVN 服务器上,在本地找到一个空文件目录,如 D:\SVN检出  鼠标右键,点击"SVN 检出(K)"
  7. 可选择版本,默认"最新版本"
  8. 从服务器上下载到的最新版本
  9. 进入本地文件夹,里面所有文件都是绿色打勾的状态
  10. 修改一个文件,比如 readme.txt ,文件从绿色对号变成红色对号,如下图
  11. 鼠标右键,点击"SVN提交",提交页如下
  12. 提交成功如图

—————————————————————————————————————————————

4.Jenkins 使用 Virsual SVN 代码替代本地代码

如果多人维护一个项目,比如python接口自动化测试,开放cases和testcases文件目录权限,可以让组员上传自己的测试用例和校验测试用例的文件。

Jenkins有几种方案来实现,常用方法有两种:每天定时执行、每当SVN有更新时就执行一次编译。下面先解释SVN Server服务器与Jenkins连接,再解释这两种方法。

使用步骤:

  1. 在Jenkins的Plugins安装插件:Subversion  安装成功如下图
  2. ,回到Jenkins首页,切换到Manage Jenkins,找到 Security 下的 Credentials,点击“System
  3. 再点击 Gloabal credentials 
  4. 最后点击右上角 Add credentials 添加用户,这里的用户就要取SVN Server 配置的用户
  5. 类型选择 Username with password,其他照着SVN Server填写即可
  6. 添加后,找到想要配置SVN代码的项目,进入“源码管理”,将SVN服务端的URL地址和上一步添加的账号配置上
  7. Build Steps,添加 “Execute Windows batch command”,生成allure测试报告的代码已经集成到了 run_tests.py 里面,所以直接使用 python run_tests.py
  8. 编译一次,看看Jenkins服务器显示什么,前半段写明了,代码是取自SVN给出的目录
  9. 后半段也贴出来,看看已经成功生成测试报告文件,.html文件,在特定目录里,下一步决定发送右键或是其他操作,就可以慢慢配置了,这里就不多扩展。

—————————————————————————————————————————————

还有两个东西没讲,如何自动执行Jenkins编译

方法1:时间轮询

  1. 在Jenkins任务配置页面,找到“构建触发器”
  2. 勾选 Poll SCM(轮询源代码管理)
  3. 在日程表(Schedule)输入轮询的时间间隔
    • H/1 * * * *              :每隔1分钟检查一次SVN
    • @hourly                 :  每隔半小时检查
    • 0  18  *  *  1-5         :  每周一到五,18点检查
  4. 保存配置

————

方法2:SVN提交后钩子(Post-commit Hook)自动触发

  1. 打开Jenkins任务配置页面
  2. 在“构建触发器”,勾选“触发远程构建(例如,使用脚本)”,身份令牌写一个有趣的内容
  3. 找到Virsual SVN Server,创建钩子脚本,找到对应项目目录,如:C:\Repositories\游泳健身\hooks,post-commit.tmpl文件,复制一份,重命名为:post-commit.bat,清空原有内容,并添加以下内容(等会编写)
  4. 回到Jenkins,登录,点击右上角账号,进入Security,点击创建新的API Token
  5. 比如创建一个叫做:SVN_API_TOKEN 的token,它会弹出一段字符串,复制字符串,并保存
  6. 修改钩子脚本内容
    @echo off
    rem 使用curl命令通知Jenkins触发构建,并添加认证信息
    curl -s -X POST -u "liangjun:117591eac988fbf7b3610018b70b4cf2bf" "http://127.0.0.1:8080/job/SVN_post/build?token=KFCVME50"
  7. 每次更新SVN对应的本地目录文件时,都会触发编译一次

 

END