背景介绍:定义了一个/root/haiyu/jenkins.rb 文件,用来控制jenkins的相关操作,其中定义了两个方法:_prepare_start和_run
在_prepare_start里定义了一个变量 @testu,并且可以保证_prepare_start会运行在_run之前,但是在_run里面怎么也得不到@testu。
原因很简单,但是有时候很容易忽略。略记一下,谨防犯傻的你~
in /haiyu/jenkins.rb 29: 30: def _prepare_start(task = nil, user=nil) 31: byebug 32: @user = user 33: @testu="test" => 34: task.started! if task.prepared? or task.error? 35: end 36: (byebug) @testu "test"
37: def _run(task = nil) 38: byebug => 39: u=@testu 40: puts u 41: jenkins_project = JenkinsProject.find(task.settings[:project]) 42: jenkins_job = jenkins_project.jenkins_jobs.new(reference: task, parameters: jenkins_project.process_jenkins_parameters(task.jenkins_parameters)) 43: jenkins_job.save (byebug) @testu nil
原因是:他们是独立的进程,在byebug的地方查看self.object_id,会发现他们不是同一个,所以值自然不能互相传递。
解决方法可以通过数据库。



