我有一个私有的gitlab repo,我想克隆它。我在Environment变量中有密码。带有用户名和密码变量的gitlab repo URL来自XML文件。
sample.xml
<git>
<name>repo</name>
<link>https://user:#{ENV['password']}@gitlab.com/myrepo.git</link>
</git>
Ruby代码:
@sample = Nokogiri::XML(File.open("sample.xml")
repo_link = @sample.xpath("/git/link/text()")
Git.clone(repo_link, 'repodir').checkout('master')
当我尝试上面的代码时,#{ENV['password']没有得到解决并按原样传递给GIT模块。
电流:https://user:#{ENV[密码]}@gitlab.com/myrepo.git
期望值:https://user:<actual_password>gitlab.com/myrepo.git
请帮忙解决这个问题。。
我可以修改XML文件、Ruby代码或GITLAB URL格式。但是流是固定的,URL将在XML中,我必须解析它并使用Ruby克隆repo。
提前感谢!!
#{}
在XML中没有任何意义;XML解析器不会(也不应该(插入它…
您可以使用ERB模板,如下所示:
sample.xml
<% require 'cgi' %>
<git>
<name>repo</name>
<link>https://user:<%= CGI.escapeHTML ENV['password'] %>@gitlab.com/myrepo.git</link>
</git>
重要:我使用CGI#escapeHTML
来确保您的密码不会破坏XML
Ruby代码:
require 'erb'
xml = ERB.new(File.read('sample.xml'), nil, "<>").result
@sample = Nokogiri::XML(xml)
...
另一种解决方案是在XML中放置占位符,如下所示:
sample.xml
<% require 'cgi' %>
<git>
<name>repo</name>
<link>https://user:%{password}@gitlab.com/myrepo.git</link>
</git>
并将其替换为Ruby代码中的值:
require 'cgi'
xml = File.read.sub(/%{password}/, CGI.escapeHTML ENV['password'])
@sample = Nokogiri::XML(xml)
...