背景介绍:定义了一个/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,会发现他们不是同一个,所以值自然不能互相传递。
解决方法可以通过数据库。