Raz*_*van 7 kubernetes azure-devops
我有以下场景:在 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}"'
Run Code Online (Sandbox Code Playgroud)
所以任务运行成功,我想获取上述命令的输出字符串。在管道可视化设计器中,它向我显示了正在写入的undefined.KubectlOutput输出变量。
我在上面的 kubectl 任务之后直接创建了一个后续的 Bash 脚本任务。如果我读取变量$KUBECTLOUTPUT或$UNDEFINED_KUBECTLOUTPUT它只会返回一个空字符串。我究竟做错了什么?我只需要上一个命令的输出作为变量。
我试图确保在上一步中使用 Helm Chart 部署的应用程序已启动并运行。在下一步中,我需要在应用程序 pod 内运行一些脚本(使用 kubectl exec),因此我想确保至少有 1 个托管该应用程序的 pod 已启动并正在运行,以便我可以对其执行命令。与此同时,我意识到如果在部署 helm 图表时使用 --wait 标志,我可以跳过检查步骤,但在 bash 脚本中使用 kubectl 时仍然遇到问题。
小智 7
如果您给出 kubectl 任务的名称,例如。SomeNameForYourTask 如下所示
- task: Kubernetes@1
name: SomeNameForYourTask
displayName: some display name
inputs:
connectionType: Kubernetes Service Connection
...
Run Code Online (Sandbox Code Playgroud)
您将能够使用以下命令访问 kubectl 命令输出
echo $(SomeNameForYourTask.KubectlOutput)
Run Code Online (Sandbox Code Playgroud)
或者
echo $(SomeNameForYourTask.KUBECTLOUTPUT)
Run Code Online (Sandbox Code Playgroud)
或者
echo $SOMENAMEFORYOURTASK_KUBECTLOUTPUT
Run Code Online (Sandbox Code Playgroud)
在以下脚本任务中。当然,输出不应超过32766个字符(根据代码https://github.com/microsoft/azure-pipelines-tasks/blob/b0e99b6d8c7d1b8eba65d9ec08c118832a5635e3/Tasks/KubernetesV1/src/kubernetes.ts)。
经过几个小时的不同尝试来弄清楚 azure devops 如何连接到 AKS 集群,据我所知,我发现它正在使用 OAuth 访问令牌。可以使用 System.AccessToken 变量访问此令牌(如果允许代理作业访问令牌 - 这是一个配置选项,默认情况下关闭)。我不知道如何在脚本中将这个令牌与 kubectl 一起使用,所以我暂时放弃了这条路径。
\n\n此外,该作业在托管的 Ubuntu 代理上运行(如在 Microsoft 托管中),因此出于安全原因,它可能会避免下载配置文件,尽管 Microsoft 本身坚称代理是一次性虚拟机,并且“虚拟机已被丢弃”使用一次后”请参阅此处的 MS 文档。
\n\n在托管代理上有效的方法(我仍然建议对生产场景进行一些加密)- 使用 azure CLI 命令登录并获取集群凭据:
\n\naz login\naz aks get-credentials --resource-group=MyClusterDEV --name myCluster\nkubectl [\xe2\x80\xa6]\nRun Code Online (Sandbox Code Playgroud)\n\n我使用的替代解决方案是在已预先配置 Kubernetes 配置文件的本地代理上运行脚本。为此,我只是创建了一个额外的代理作业来运行我的脚本,所以现在我有:
\n\n| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |