我将从 git commit 中获取更改后的项目并基于此安装包。 这是我的代码
bash 'get_project' do
code <<-EOH
filelist=$(git diff-tree --no-commit-id --name-only -r $1)
for file in ${filelist[@]}; do
project=$(echo $file | cut -d "/" -f1)
projectList+=($project)
done
for changedProject in $(echo "${projectList[@]}" | sort | uniq); do
INSTALLABLE_RPM=application-$changedProject
done
EOH
environment 'INSTALLABLE_RPM' => '$INSTALLABLE_RPM'
end
zypper_package ENV['INSTALLABLE_RPM']
我的想法是用 bash 生成 INSTALLABLE_RPM
变量并用 zypper 安装包。不幸的是它不起作用。 zypper_package 资源无法识别。
我的想法用完了:-(
答案 0 :(得分:0)
bash resource 的 environment
属性是提供现有环境变量来执行 bash 命令。
(这些变量必须存在才能成功运行命令。)
在此处指定环境变量不会在 shell 中设置它们。同样在 code
块内,您将无法访问 Ruby 的 ENV
哈希。
可能没有直接的方法来做到这一点。选项之一是将此包(列表?)写入文件。然后我们可以将文件内容读入变量,并与 zypper_package
资源一起使用。
示例:
由于您在 Shell 中使用了 for
循环,我相信您会得到一个包列表,因此我将 pkg_list
视为数组。我已将 compile_time
设置为 true
,因为 bash
资源下面的变量赋值将仅在编译时运行。
bash 'get_project' do
code <<-EOH
# your code as-it-is
for changedProject in $(echo "${projectList[@]}" | sort | uniq); do
echo "application-$changedProject" >> /tmp/rpm_packages
done
EOH
compile_time true
end
pkg_list = File.read('/tmp/rpm_packages').split
zypper_package pkg_list
# remove the file for good measure :)
file '/tmp/rpm_packages' do
action :delete
end