0

所以我不确定这实际上是 Bash 问题还是 Tekton 问题。问题出现在我的 OpenShift (Tekton) 管道中。部署我的应用程序后,我有一个步骤需要检查是否Deployment已实际创建。

这样做是这样的:

until oc get deployment.apps/my-app-foo &> /dev/null
do
  echo . 
  sleep 2
done

在上面的代码片段中,我硬编码了Deployment“my-app”的名称。后缀“-foo”是每个Deployment资源的一部分。当硬编码时,它可以工作,并且我得到了我的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

谁能告诉我做错了什么?

4

1 回答 1

0

不完全确定问题出在哪里,但似乎与 Tekton 变量替换语法有关。

无论如何,我设法通过将 Tekton 参数分配给 bash 变量来解决它,如下所示:

POD_NAME=$(params.pod-name)
SUFFIX='-foo'

然后我在 until 循环中直接使用这些变量,如下所示:

until oc get deployment.apps/${POD_NAME}${SUFFIX} &> /dev/null
do
  echo . 
  sleep 2
done

PS。后缀可能会在不放入变量的情况下正常工作,但我在同一个脚本中的其他地方使用它,所以这就是我把它放在那里的原因。

于 2021-12-07T09:55:16.303 回答