如何在 ruby / chef 中打印 git latest_tag 命令的值
Posted
技术标签:
【中文标题】如何在 ruby / chef 中打印 git latest_tag 命令的值【英文标题】:How to print the value of a git latest_tag command in ruby / chef 【发布时间】:2018-12-21 19:45:51 【问题描述】:我正在尝试从 git repo 中获取最新的 git 标签,它是克隆到我的 EC2 Ubuntu 实例的。下面是我正在使用的厨师食谱,即 git.rb
execute 'test' do
cwd 'myapp-codecommit/myfiles'
#command 'git clone https://'+node[:awscli][:GIT_USER]+':'+node[:awscli][:GIT_PASS]+'@git-codecommit.us-east-1.amazonaws.com/v1/repos/xxxxxxxx'
command '$(git describe --abbrev=0 --tags)'
puts "output is #command"
end
输出:EC2 日志
Use `bundle show [gemname]` to see where a bundled gem is installed.
output is $(git describe --abbrev=0 --tags)
[2018-07-13T12:04:28+00:00] INFO: Processing execute[test] action run
Error executing action `run` on resource 'execute[test]'
Mixlib::ShellOut::ShellCommandFailed
Expected process to exit with [0], but received '127'
---- Begin output of $(git describe --abbrev=0 --tags) ----
STDOUT:
STDERR: sh: 1: master-1.0.177: not found
---- End output of $(git describe --abbrev=0 --tags) ----
Ran $(git describe --abbrev=0 --tags) returned 127
Resource Declaration:
# In /var/chef/runs/bb7cdd55-4fa8-4979-8485-dc5706d9db32/local-mode-cache/cache/cookbooks/deployfile/recipes/git.rb
3: execute 'test' do
4: cwd 'myapp-codecommit/myfiles'
5: #command 'git clone https://'+node[:awscli][:GIT_USER]+':'+node[:awscli][:GIT_PASS]+'@git-codecommit.us-east- 1.amazonaws.com/v1/repos/xxxxxxxx'
6: command '$(git describe --abbrev=0 --tags)'
7:
8: puts "output is #command"
9:
10: end
正如我们在输出日志中看到的,我能够在 (STDERR) 下获取最新标签,即 master-1.0.177 但我希望最新的标签,即 (master-1.0.177) 打印为
output is master-1.0.177
我在哪里
output is $(git describe --abbrev=0 --tags)
【问题讨论】:
不清楚您尝试了什么以及您要问什么,请明确定义问题。 请编辑您的问题(通过单击其正下方的编辑链接)并将相关代码和错误消息直接放入其中。请不要发布代码或错误消息的屏幕截图。 嗨@mjwatts,我想从命令中获取值并将其存储在一个变量中,但目前我只想让它显示puts中的值。第一次写给*** 请耐心等待并感谢您的帮助 嗨@HolgerJust 感谢您的帮助终于弄清楚了如何在没有问题截图的情况下获取代码。 :) 【参考方案1】:厨师资源没有输出值。您可能想要的是 shell_out!
辅助方法的一些用法,但您必须更具体地了解您最终要完成的工作。这是为了快速调试吗?
编辑:
你想要这样的东西:
# You can swap in some other resource like s3_file, the principle is the same.
remote_file "download the artifact" do
source lazy
git_describe = shell_out!('git describe --abbrev=0 --tags', cwd: '/path/to/myapp-codecommit/myfiles').stdout.strip
"https://something/path/to/myapp-#git_describe.jar"
end
【讨论】:
所以,我将构建工件存储在 S3 中,它们被命名为 git 版本,例如master-1.0.177.jar ,所以我想编写一个配方,它采用最新的 git 版本并将其与构建 jar 名称进行比较,然后下载该特定 jar 以在 opsworks 中部署。有什么更好的方法来做到这一点? 如果您的意思是 OpsWorks Stacks,它会使事情稍微复杂化,因为那里没有可用的 Chef 版本受支持,但大多数相同的 API 都存在。我将在一个示例中进行编辑。 是的,它对我有用,只有我在第一行所做的更改,即带有 jar 扩展名的 remote_file 'test.jar' 文件名,它工作正常 :) 谢谢以上是关于如何在 ruby / chef 中打印 git latest_tag 命令的值的主要内容,如果未能解决你的问题,请参考以下文章
Cookbook 的深度依赖需要一个不可用的 Ruby 版本。如何通过 Chef for Amazon Linux 规避?
在 chef lwrp 中安装、要求和使用 ruby 库
ruby 示例Chef扩展,用于从HashiCorp的Vault中提取秘密