将步骤的输出设置为数组



我在GitHub操作中从我的存储库中获得feature/*分支的列表,使用:

echo ::set-output name=branches::$( git branch -r | grep -i "feature/" | sed -e "s/.*origin///" | tr "n" " " )

但是,这个列表是String输出,我需要它在String数组中,这样我就可以使用它来使用Matrix策略调用另一个工作流。

我尝试过很多策略,包括:

  • 将表达式包装在CCD_ 2中,这导致语法错误("意外令牌:("(
  • 使用导致空字符串的环境变量,无论是否将表达式包装在()
  • 使用一个局部变量,根据我的分配方式,它会产生不同的结果。在我的开发环境中,我有两个功能分支(feature/quality-3和feature/test feature(

使用

branches=($( git branch -r | grep -i "feature/" | sed -e "s/.*origin///" | tr "n" " " ))

echo ::set-output name=branches::${branches[@]} # also ${branches[*]}

给出两个值的错误:";意外类型的值"feature/quality-3 feature/test_feature",应为类型:Sequence">

echo ::set-output name=branches::${branches} # or $branches

给出一个值为1的错误:;值"feature/quality-3"的类型意外,应为类型:Sequence">

您必须在作业之间以JSON的形式传递这样的数据:

使用组合:

  • toJSON
  • 来自JSON以获得您的输出

以下是GitHub的完整示例。

根据Grzegorz Krukowski的说法,我们需要将数组放入JSON,然后将其转换回。由于某些原因,toJSON不起作用,以下是我所做的:

branches=(master dev prod)
JSON="["
for branch in ${branches[@]}; do
echo $branch
JSONline=""$branch","
# we don't need to iterate on the same branch over and over, so
# onnly include it when it wasn't included
if [[ "$JSON" != *"$JSONline"* ]]; then
JSON="$JSON$JSONline"
fi
done
# Remove last "," and add the closing bracket
if [[ $JSON == *, ]]; then
JSON="${JSON%?}"
fi
JSON="$JSON]"
echo $JSON
echo "branches=$( echo "$JSON" )" >> $GITHUB_OUTPUT

相关内容

  • 没有找到相关文章

最新更新