所以我不确定这实际上是Bash问题还是Tekton问题。这个问题发生在我的OpenShift(Tekton(管道中。部署完应用程序后,我有一个步骤需要检查Deployment
是否真的已经创建。
这是这样做的:
until oc get deployment.apps/my-app-foo &> /dev/null
do
echo .
sleep 2
done
在上面的片段中,我已经硬编码了Deployment
〃的名称;我的应用程序";。后缀"-foo";是每个CCD_ 3资源的一部分。当进行硬编码时,它可以工作,并且我得到了Deployment
,正如预期的那样。
当我尝试参数化Deployment
的名称时,我的管道失败,并出现以下错误:
Error from server (NotFound): deployments.apps "my-app" not found
.
Error from server (NotFound): deployments.apps "my-app" not found
.
Error from server (NotFound): deployments.apps "my-app" not found
.
因此,问题显然是-foo";后缀并没有添加到我的变量中,我也不知道该怎么做。尝试用大括号替换括号,尝试在整个表达式周围使用双引号,以及其他一些变体。
这是我的变量替换代码:
until oc get deployment.apps/$(params.pod-name)-foo &> /dev/null
do
echo .
sleep 2
done
有人能说出我做错了什么吗?
不完全确定问题是什么,但似乎与Tekton变量替换语法有关。
无论如何,我设法通过将Tekton参数分配给bash变量来解决这个问题,如下所示:
POD_NAME=$(params.pod-name)
SUFFIX='-foo'
然后我在直到循环中直接使用了这些变量,如下所示:
until oc get deployment.apps/${POD_NAME}${SUFFIX} &> /dev/null
do
echo .
sleep 2
done
PS。后缀如果不放在变量中可能会很好,但我在同一脚本的其他地方使用它,所以我把它放在那里。