背景介绍:定义了一个/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,会发现他们不是同一个,所以值自然不能互相传递。
解决方法可以通过数据库。
本文记录了在Ruby中,由于进程独立性导致的变量无法在不同方法间共享的问题。在_/root/haiyu/jenkins.rb_文件中,_prepare_start_方法定义了变量@testu,但在_run_方法中该变量值变为nil。原因在于两个方法运行在不同的进程中,因此无法直接传递变量。为了解决这个问题,作者建议使用数据库来存储和传递变量值。

被折叠的 条评论
为什么被折叠?



