我正在尝试在 Windows 上使用 bash (sh) 脚本来运行测试部署。我正在从 gitbash 控制台运行脚本,以便拥有 bash 的副本,但这样做意味着 azure clie 不可用(即找不到 azure 命令)。有谁知道我如何让 Azure cli 在 GitBash 中工作(我假设我只是将它安装在其他地方)或者我应该更改为使用 bash 的不同方式
10 回答
有时 Windows git bash 中的命令需要附加 .cmd。此外,另一种安装 Azure-Cli 的方法是通过 Chocolatey https://chocolatey.org/
安装 Azure-Cli 后尝试此命令:
az.cmd --version
与mscrivo 相呼应,您可以在 CMD而不是 PowerShell中运行以下行(提升/管理员)
echo "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} > "C:\Program Files\Git\mingw64\bin\az"
现在你应该可以在 Git bash 中运行了:
az --version
artberri 在评论中指出了最佳解决方案:
将以下内容添加到您的%USERPROFILE%\.bashrc
或%USERPROFILE%\.profile
alias az='az.cmd'
但是,如果您希望能够在 bash 脚本中使用 az,则需要一些更激烈的东西,从 cmd 提示符运行以下命令:
echo "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} > "%SYSTEMROOT%\az"
这实际上将在您的 windows 文件夹中创建一个 passthrough az 命令,该命令可以从任何地方运行并将参数传递给 az.cmd。
您必须将 CLI 安装到您的计算机上。有多种方法可以做到这一点。
我是 NodeJS 的朋友,所以我使用 npm 进行安装:
npm install -g azure-cli
更多详细信息:https ://www.npmjs.com/package/azure-cli
但你也可以通过其他方式做到这一点。一个非常好的方法是使用 docker。Microsoft 提供的容器预装了 Azure CLI 版本。
docker run -it --name azure microsoft/azure-cli
在带有 ubuntu bash 的 Windows 10 上,您可以使用:
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | \
sudo tee /etc/apt/sources.list.d/azure-cli.list
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 417A0893
sudo apt-get install apt-transport-https
sudo apt-get update && sudo apt-get install azure-cli
或者作为 python 爱好者运行
pip install --user azure-cli
最重要的是“az”/“az.bat”或“azure”bin 可通过您的路径变量获得。
在您的~/bin
目录中(在 Windows 中,这意味着c:\Users\<username>\bin
)我刚刚创建了一个名为az
:
"C:/Program Files (x86)/Microsoft SDKs/Azure/CLI2/python.exe" -IBm azure.cli "$@"
然后使文件可执行
chmod a+x az
内容是从 az.cmd“借来的”。
在尝试之前提到的别名方法时,我遇到了长命令的问题,很多参数抛出错误“'C:\Program' 不被识别为内部或外部命令、可运行程序或批处理文件。”
编辑:
我已经结束了通过 WLS 使用 Ubuntu。适用于所有工具,如 az、terraform、kubectl、istioctl。az 工具在交互模式下也运行良好。
换句话说,适用于 Windows 的 Azure CLI 与适用于 Windows 的 Git Bash 不兼容
因此,我来到这里寻找一种在 Azure DevOps Linux 和 Windows (git bash) 构建代理上的 bash shell 脚本中运行相同 az 命令的方法,这样我就可以在两种类型的代理之间共享相同的代码。这也适用于 Windows 10 上的 git bash shell。我更长的答案在这里:Azure DevOps Build Pipeline can't get secrets from Key Vault when protected with vnet and firewall
它的要点是:
if [[ $(uname -s) == "Linux" ]]; then
azcmd="az"
else
# If we're in a bash shell on Windows, az commands don't work, but we can call the az.cmd batch file directly from git Bash if we can find it...
azcmd=$(where az.cmd)
fi
# Remember to specify CIDR /32 for removal
"$azcmd" keyvault network-rule remove -n <MyKeyVault> --ip-address 50.1.1.1/32
基本上只要在引导代码执行后替换"$azcmd"
您通常使用的任何地方。az
我以前的方法只是将 Azure CLI Scripts 文件夹添加到$PATH
我的~/.bashrc
文件内部。但是,在2.2.0
通过 MSI 更新 Azure CLI 后,这种方法开始失败并出现以下错误:
C:\Program: 无法打开文件 'Files': [Errno 2] 没有这样的文件或目录
所以,为了解决这个问题,我有我$PATH
的~/.bashrc
包含~/bin
,然后我创建了一个包含以下内容的文件~/bin/az
(不要忘记chmod 0755
新文件):
#!/usr/bin/env bash
AZURE_CLI_PATH="/c/Program Files (x86)/Microsoft SDKs/Azure/CLI2"
export PATH="${PATH}:${AZURE_CLI_PATH}:${AZURE_CLI_PATH}/Scripts"
export PYTHONPATH="${AZURE_CLI_PATH}/src"
export PYTHON_CMD="$(which python)"
winpty "${PYTHON_CMD}" -m 'azure.cli' "${@}"
关闭我的 GIT Bash 窗口并重新打开它后,我现在可以az
再次运行:
$ az version
This command is in preview. It may be changed/removed in a future release.
{
"azure-cli": "2.2.0",
"azure-cli-command-modules-nspkg": "2.0.3",
"azure-cli-core": "2.2.0",
"azure-cli-nspkg": "3.0.4",
"azure-cli-telemetry": "1.0.4",
"extensions": {}
}
根本不要使用 MSI 安装程序。由于 Azure CLI 是用 Python 实现的,因此请使用 @blndev 所写的 Python 安装方法。这种方式代替az.cmd
你getaz.bat
和az
shell脚本,而且安装路径不会包含空格。
pip install --user azure-cli
有关此方法的更多详细信息,请参见https://blogs.msdn.microsoft.com/brijrajsingh/2017/03/02/installing-azure-cli-2-0-on-windows/
符号链接大部分时间都对我有用,但有些命令仍然失败,例如
az dls fs access set-entry ...
'C:\Program' is not recognized as an internal or external command, operable program or batch file
我尝试了@mscrivo 的解决方案。但是,在 shell 脚本中使用 az 命令时,由于路径中的空格,您仍然会遇到问题。因此,我在 %SYSTEMROOT% 中创建了一个 azproxy.cmd,其中包含
@echo off
"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" %*
然后创建指向该文件的 mklink
mklink "%SYSTEMROOT%\az" "SYSTEMROOT%\azproxy.cmd"
PS %SYSTEMROOT% 的扩展值当然不应该包含空格