嗨,如果您曾经使用过 CLI 工具,您可能知道几乎所有工具都带有初始配置方法,允许您保存默认设置和凭据。这通常称为配置文件或上下文。

但是,如果您需要使用从环境或 CI/CD 管道变量中检索的参数动态配置此工具,该怎么办。

CLI 工具可以通过多种方式实现此目的。一些 cli 工具直接接受参数,因此您可以在自动化场景中使用该工具的身份验证命令。

> & myclitool login -url "URL" -username "USERNAME" -secret "PASSWORDorSECRET"

进入全屏模式 退出全屏模式

这允许我们在自动化场景中验证工具,同时使用相应的标志(例如-url-secret)传递所有参数

但是,一些 CLI 工具不附带该选项,并在您调用它们时询问您的参数,并希望您即时输入它们。

如果您知道 CLI 工具最终将保存的配置文件的路径、格式、文件名格式,那么您可以绕过这个初始配置过程,只需在工具期望的路径中生成该配置文件即可,仅此而已。您的 CLI 工具应该读取文件的内容并使用文件中存储的值。

但是,这种方法依赖于很多因素,并且会使您处于依赖于平台的状态,因为 Linux 和 Windows 主机(完整的操作系统或容器)具有不同的文件系统和用户配置文件路径。但是,如果您编写输入脚本,您可以在自动化管道中模仿用户输入。我在基于 Ubuntu 的 Azure DevOps 托管代理上结合使用 PowerShell 和 Bash,完全没有问题,而我可以在 Windows 中进行开发。

我们通常如何为我们的开发机器手动配置 Databricks CLI

一旦我们通过pip3 install databricks-cli命令安装了 databricks cli,我们就可以开始使用databricks configure --token配置我们的工具

❯ databricks configure --token
Databricks Host (should begin with https://): https://somedatabricksworkspace.url
Token: somedatabricksapitoken

进入全屏模式 退出全屏模式

然后 CLI 将要求我们提供 2 个参数,一个用于 Databricks 工作区的 URL 和一个秘密,一个接一个。

一旦我们输入主机名并按回车,我们将被要求输入我们的令牌,一旦我们输入令牌并按回车,Databricks CLI 将文件保存在~\.databricks.cfg下,格式如下:

# Example databricks.cfg file
[DEFAULT]
host = https://somedatabricksworkspace.url
token = somedatabricksapitoken

进入全屏模式 退出全屏模式

[databricksCLI-example](https://res.cloudinary.com/practicaldev/image/fetch/s--i4nzTZr_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://mertsenel.tech /post/powershelltipsclipromptinput/img/databricksCLI-example.gif)

如何为 CI/CD 自动化实现相同的结果

重击

Bash 方法是大多数 bash 编码器和 linux 管理员最熟悉的方法,它被称为heredochere document,用于通过标准输入输入流将多个参数传递给 bash。要了解更多信息,您可以在此处阅读

因此,通过使用它,假设我们可以在运行时检索端点 url 和秘密值,并将它们分配给两个变量。然后我们可以通过将它们用换行符分隔来构造heredoc,因此将它们一个一个地作为输入传递给我们的cli工具Databricks CLI。

dbrclidemo.sh:

#!/bin/bash
DatabricksUrl='https://#{AZURE-DATABRICKS-TENANT-URL}#'
dapiToken='#{AZURE-DATABRICKS-TENANT-DAPI-TOKEN}#'

databricks configure --token <<EOF
${DatabricksUrl}
${dapiToken}
EOF
echo -e "\nDatabricks workspace list:"
databricks workspace list

进入全屏模式 退出全屏模式

[Bash 脚本示例](https://res.cloudinary.com/practicaldev/image/fetch/s---yH_VA14--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/sdqzlld08aaas9lezuxg.png)

电源

在 PowerShell 中有类似的东西,它允许我们定义称为Here-String的多行字符串输入

因此,再次假设我们可以在运行时从秘密保险库中检索我们想要的值。然后我们可以构造一个 Here-String,使用Write-Outputcmdlet 将其打印出来,并使用&PowerShell 调用运算符将输出通过管道传输到我们的外部 cli 命令。

pwshclidemo.ps1:

#Pass Arguments to Input prompt received from external CLI tool inside script
$DatabricksUrl = 'https://#{AZURE-DATABRICKS-TENANT-URL}#'
$dapiToken ='#{AZURE-DATABRICKS-TENANT-DAPI-TOKEN}#'

$args = @"
$DatabricksUrl

$dapiToken

"@

Write-Output $args | & databricks configure --token 

Write-Output "`nDatabricks workspace list:"
& databricks workspace list

进入全屏模式 退出全屏模式

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--nuoJH1ql--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/i/9th757alwstykydf64qf.png)

总结

您可以在 Linux 和 Windows 环境中使用上述方法将多个参数传递给外部工具。我已经介绍了配置 CLI 工具的示例,但这种情况可能适用于我想不到的一大堆应用程序。我希望这可以帮助一些需要并正在寻找一种方法来解决他们需要使用的外部工具的限制的 PowerShell 编码人员。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐