【发布时间】:2019-06-20 13:08:24
【问题描述】:
设置说明
我有以下场景:在 Azure DevOps 中创建了一个构建管道,在设置我的 Kubernetes 集群后,我想使用 kubectl 获取特定的 pod 名称。我通过“部署到 Kubernetes”任务 V1 执行此操作,如下所示:
steps:
- task: Kubernetes@1
displayName: 'Get pod name'
inputs:
azureSubscriptionEndpoint: 'Azure Pay-as-you-Go (anonymized)'
azureResourceGroup: MyK8sDEV
kubernetesCluster: myCluster
command: get
arguments: 'pods -l "app=hlf-ca,release=ca" -o jsonpath="{.items[0].metadata.name}"'
所以任务运行成功,我想得到上面命令的输出字符串。在 Pipeline 可视化设计器中,它向我显示了一个正在写入的 undefined.KubectlOutput 输出变量。
问题陈述
我在上面的 kubectl 任务之后直接创建了一个后续的 Bash 脚本任务。如果我读取变量 $KUBECTLOUTPUT 或 $UNDEFINED_KUBECTLOUTPUT 它只会返回一个空字符串。我究竟做错了什么?我只需要上一个命令的输出作为变量。
我的行动目标
我正在尝试确保我在上一步中使用 helm 图表部署的应用程序已启动并正在运行。在下一步中,我需要在应用程序 pod 中运行一些脚本(使用 kubectl exec),因此我想确保至少 1 个托管应用程序的 pod 已启动并运行,以便我可以对其执行命令。与此同时,我意识到如果在部署 helm chart 时使用 --wait 标志,我可以跳过检查步骤,但我仍然在 bash 脚本中使用 kubectl 时遇到问题。
【问题讨论】:
-
你能退后一步,描述一下你想要达到的目标吗
-
当然,我正在努力确保我在上一步中使用 helm 图表部署的应用程序已启动并正在运行。在下一步中,我需要在应用程序 pod 中运行一些脚本(使用 kubectl exec),因此我要确保至少 1 个托管应用程序的 pod 已启动并运行,以便我可以对其执行命令。
-
您为什么不想一口气完成所有操作?所以你不必在步骤之间传递变量?
-
如果我知道怎么做,我会很乐意这样做,因为我以后的管道需要几个额外的这样的步骤,所以我会付出相当多的努力。我可以通过以某种方式或使用 kubernetes 自己的方法参数化掌舵图来做到这一点吗?