`
CharlesCui
  • 浏览: 431235 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CruiseControl.rb的又一个Bug

阅读更多
我遇到的问题如下:

执行:
./cruise build test_cc_01
的时候,会出现以下错误?字面上看是连接SVN没权限,但我试过好多SVN,而且之前我已经通过./cruise add方法将SVN的代码拉下来过了,难道它不记得密码?
即便它不记得密码,我也试过./cruise build test_cc_01 --username zheng.cuizh --password PPPPPPP
也不行,
我还试过在test_cc_01项目的配置文件cruise_config.rb中,加入如下代码:

  project.source_control.username = 'zheng.cuizh'
  project.source_control.password = 'PPPPPPP'

还是不行!

执行时候所有的代码和错误提示如下:

hostname@ubuntu:~/ruby/cruisecontrolrb-1.3.0$ ./cruise build test_cc_01  
cruise data root = '/home/hostname/.cruise'  
Builder for project 'test_cc_01' started  
Logging to: /home/hostname/ruby/cruisecontrolrb-1.3.0/log/test_cc_01_builder.log  
Build loop failed  
BuilderError: svn: OPTIONS of 'https://roadrunner.googlecode.com/svn/trunk': authorization failed (https://roadrunner.googlecode.com)  
  ./script/../config/../lib/subversion.rb:161:in `execute_with_error_log'  
  ./script/../config/../lib/command_line.rb:86:in `call'  
  ./script/../config/../lib/command_line.rb:86:in `e'  
  ./script/../config/../lib/command_line.rb:84:in `popen'  
  ./script/../config/../lib/command_line.rb:84:in `e'  
  ./script/../config/../lib/command_line.rb:71:in `execute'  
  ./script/../config/../lib/command_line.rb:70:in `chdir'  
  ./script/../config/../lib/command_line.rb:70:in `execute'  
  ./script/../config/../lib/subversion.rb:152:in `execute_with_error_log'  
  ./script/../config/../lib/subversion.rb:141:in `execute_in_local_copy'  
  ./script/../config/../lib/subversion.rb:140:in `chdir'  
  ./script/../config/../lib/subversion.rb:140:in `execute_in_local_copy'  
  ./script/../config/../lib/subversion.rb:127:in `svn'  
  ./script/../config/../lib/subversion.rb:112:in `log'  
  ./script/../config/../lib/subversion.rb:62:in `latest_revision'  
  ./script/../config/../app/models/project.rb:210:in `build_if_necessary'  
  ./script/../config/../app/models/polling_scheduler.rb:13:in `run'  
  ./script/builder:79  
  ./script/builder:78:in `catch'  
  ./script/builder:78  
  ./cruise:14:in `load'  
  ./cruise:14:in `builder'  
  ./cruise:68:in `send'  
  ./cruise:68  
  /usr/lib/ruby/1.8/fileutils.rb:121:in `chdir'  
  /usr/lib/ruby/1.8/fileutils.rb:121:in `cd'  
  ./cruise:67  
[error] svn: OPTIONS of 'https://roadrunner.googlecode.com/svn/trunk': authorization failed (https://roadrunner.googlecode.com) 


我尝试跟踪到负责读写配置文件的CC的那块代码,

发现CC加载一个项目的配置文件是在这个方法里面完成的:

  def write_config_example(project)
    config_example = File.join(RAILS_ROOT, 'config', 'cruise_config.rb.example')
    config_in_subversion = File.join(project.path, 'work', 'cruise_config.rb')
    cruise_config = File.join(project.path, 'cruise_config.rb')
    if File.exists?(config_example) and not File.exists?(config_in_subversion)
      FileUtils.cp(config_example, cruise_config)
    end
  end

我怀疑config_in_subversion 这个文件中的用户名和密码没有起作用。

全文搜索username和password,在./lib/subversioni.rb文件中找到两处代码:

  def checkout(revision = nil, stdout = $stdout)
    @url or raise 'URL not specified'

    options = [@url, path]
    # =>zheng.cuizh:add a patch start
    # options << "--username" << @username if @username
    # options << "--password" << @password if @password
    # =>zheng.cuizh:add end
    options << "--revision" << revision_number(revision) if revision

    # need to read from command output, because otherwise tests break
    svn('co', options) do |io| 
      begin
        while line = io.gets
          stdout.puts line
        end
      rescue EOFError
      end
    end
  end


  def svn(operation, arguments, options = {}, &block)
    command = ["svn"]
    command << "--non-interactive" unless @interactive
    command << operation
    command += arguments.compact

    # => zheng.cuizh:add a patch start:
    command += ['--username', @username, '--password', @password] if @username and @password
    # => zheng.cuizh:add end.
    command
    
    execute_in_local_copy(command, options, &block)
  end


这个RB文件中,好好读一下可以发现svn是执行svn命令的方法,我之前报错就说svn在checkout的时候没有权限,很可能是执行svn("checkout",options...)这个类似的代码时,没有把用户名和密码传过去。

在网上搜索了一下这段代码,居然找到了一个哥们和我遇到同样的问题,他的文章如下:
[url]http://www.practicalguile.com/2008/02/02/using-cruisecontrolrb-with-repositories-without-anonymous-access/
[/url]
他的解决方案如下:


     options = [@url, target_directory]
-    options << "--username" << @username if @username
-    options << "--password" << @password if @password
     options << "--revision" << revision_number(revision) if revision



     command << "--non-interactive" unless @interactive
     command << operation
     command += options.compact.flatten
+    command += ['--username', @username, '--password', @password] if @username and @password
     command



搞定!
分享到:
评论

相关推荐

    持续集成之CruiseControl.rb

    CruiseControl.rb是一款开源的持续集成工具,主要用于自动化构建、测试和部署软件项目。它是由ThoughtWorks公司开发的,是CruiseControl.NET的Ruby版本,因此在Ruby社区中被广泛应用。CruiseControl.rb的核心理念是...

    cruisecontrol.rb:Ruby的CruiseControl。 把事情简单化

    是一个服务器。 它使团队中的每个人都了解项目的运行状况和进度。 CC.rb易于安装,易于使用且易于破解。 它是用Ruby编写的,并由软件开发咨询公司的开发人员在业余时间维护。 链接 说明文件: : 资料来源: : ...

    全套汽车巡航系统模糊控制设计Matlab文件-CruiseControl.zip

    全套汽车巡航系统模糊控制设计Matlab文件-CruiseControl.zip 全套m.file文件,包括模型和 CruiseControl.zip 模糊控制器设计。

    cruisecontrol配置定时运行

    CruiseControl通过一个XML配置文件来定义其行为,这个文件通常被称为`cruisecontrol.xml`。在这个文件中,我们可以设置各种属性,包括构建触发器、构建步骤、通知规则等。 **1. 安装与启动CruiseControl** 在开始...

    cruisecontrol_ant_svn持续集成

    如果你用的是 CC2.2 版本,那么在%CC_HOME%\reporting\jsp\dist 目录下已经有一个 cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们...

    持续集成工具CruiseControl.part1

    CruiseControl is both a continuous integration tool and an extensible framework for creating a custom continuous build process. It includes dozens of plugins for a variety of source controls, build ...

    持续集成工具CruiseControl.part2

    CruiseControl is both a continuous integration tool and an extensible framework for creating a custom continuous build process. It includes dozens of plugins for a variety of source controls, build ...

    持续集成工具CruiseControl.part4

    CruiseControl is both a continuous integration tool and an extensible framework for creating a custom continuous build process. It includes dozens of plugins for a variety of source controls, build ...

    持续集成工具CruiseControl.part3

    CruiseControl is both a continuous integration tool and an extensible framework for creating a custom continuous build process. It includes dozens of plugins for a variety of source controls, build ...

    CruiseControl简介及使用举例

    本篇文章将详细介绍CruiseControl的基本概念、安装过程、配置方法以及一个简单的使用示例。 首先,CruiseControl的安装通常涉及下载最新版本的软件包,如V2.6.2,这可以从其官方网站sourceforge.net获取。安装完成...

    cruisecontrol配置文件.rar

    CruiseControl 是一个开源的持续集成工具,用于自动化软件构建、测试和部署的过程。它通过监控版本控制系统中的变更,自动触发构建任务,及时发现并解决代码集成中的问题,从而提高开发团队的效率和软件质量。本...

    cruisecontrol.rar_仿真模型_汽车_汽车PID_汽车控制_汽车模型

    "cruisecontrol.rar"是一个关于汽车控制系统的仿真模型,其中包含了汽车模型以及PID控制模型的整合。本文将详细解析这一主题,帮助读者深入理解PID控制在汽车控制中的原理与应用。 首先,汽车模型是整个控制系统的...

    [CruiseControl]binary安装和启动

    CruiseControl 是一个持续集成工具,用于自动化构建过程并提供实时反馈,帮助开发团队尽早发现问题。它支持多种构建工具如 Ant 和 Maven,并且可以与各种版本控制系统(如 CVS, Subversion 等)集成。 #### 二、...

    cruise_control.zip.zip

    【标题】"cruise_control.zip.zip" 暗示我们正在处理一个被压缩的文件,该文件可能包含有关“巡航控制”系统的数据或软件。在IT领域,巡航控制通常指的是自动化构建和部署的过程,用于持续集成和持续交付(CI/CD)...

    CruiseControl-2.8.4.exe

    CruiseControl-2.8.4.exe

    CruiseControl持续集成

    而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、CruiseControl.ruby等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比你的。而在这里,我只...

    CruiseControl学习教程.pdf

    CruiseControl的核心是一个服务器,它负责监听源代码仓库的变更,并在检测到变更时触发构建过程。这个过程包括编译代码、运行单元测试以及执行其他自动化任务。CruiseControl通过XML配置文件定义其工作流程,并提供...

    CruiseControl使用指南.rar

    这些资料集合为学习和掌握CruiseControl提供了一个全面的学习路径,从基础概念到高级特性,帮助开发者建立高效、可靠的持续集成环境。通过阅读和实践,开发者可以充分利用CruiseControl提高软件开发的质量和效率。

    整车cruise控制.rar_Cruise Control_cruise_traceujz_整车_整车控制

    【整车Cruise控制】是汽车领域中的一个重要技术,它涉及到车辆在行驶过程中的速度自动维持功能,也称为定速巡航。这项技术使得驾驶员无需持续踩踏油门,就能使车辆保持设定的速度,大大减轻了长途驾驶的疲劳。在这个...

    CruiseControl

    - **OpenDoc-CruiseControl.pdf**:这可能是一个开源社区编写的CruiseControl文档,可能包含了社区的最佳实践、最新更新和用户经验分享。 深入学习这些文档,开发者将能更好地理解和应用CruiseControl,提升团队的...

Global site tag (gtag.js) - Google Analytics