Git Bash 中的 Azure CLI

Posted

技术标签:

【中文标题】Git Bash 中的 Azure CLI【英文标题】:Azure CLI in Git Bash 【发布时间】:2017-08-15 18:34:06 【问题描述】:

我正在尝试在 Windows 上使用 bash (sh) 脚本来运行测试部署。我正在从 gitbash 控制台运行脚本,以便拥有 bash 的副本,但这样做意味着 azure clie 不可用(即找不到 azure 命令)。有谁知道我如何让 Azure cli 在 GitBash 中工作(我假设我只是将它安装在其他地方)或者我应该改变使用 bash 的不同方式

【问题讨论】:

【参考方案1】:

Windows git bash 中的命令有时需要附加 .cmd。另外,另一种安装 Azure-Cli 的方法是通过 Chocolatey https://chocolatey.org/

安装 Azure-Cli 后试试这个命令:

az.cmd --version

Echoing 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

【讨论】:

还可以选择创建 bash 别名,如@citleon github.com/Azure/azure-cli/issues/3445 提供的问题链接中所述。将alias az='az.cmd' 添加到您的 .bashrc 文件中即可。【参考方案2】:

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。

【讨论】:

这是唯一对我有用的东西。上面的解决方案没有。 这行得通。只需稍作改动即可使 mklink 工作 - cmd /c mklink "%SYSTEMROOT%\az" "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" $SYSTEMROOT 指向我电脑中的c:\windows。我不想在那里有az 链接。相反,您也可以将其放入<GIT_INSTALLATION_DIR>\mingw64\bin,它也在您的 git bash 路径中。 我无法使用该解决方案编写 wiql 查询。当我使用"'C:\Program' is not recognized as an internal or external command 使用' 在参数中编写查询时出现az: error: unrecognized arguments: [Id],[Title] FROM WorkItems WHERE [AssignedTo]=@Me 这很好用,除非我们的参数之一是多行字符串。然后引用全部搞砸了,这就是@veritas 代码失败的原因。有关如何修复它的任何建议?【参考方案3】:

如果使用 Git bash,请导航到以下目录:

C:\Program Files\Git\etc\profile.d

编辑aliases.sh,然后为az 添加一个新别名,如下所示:

alias az='az.cmd'

【讨论】:

为我工作!奇怪的是,不知何故,“az.cmd”已经被 Git Bash“知道”了,但不是“az” 这并不奇怪,因为 Windows 使用 .bat、.cmd 和 .exe 作为可执行文件,而 Linux 不使用可执行文件扩展名。因此,为 az.cmd 添加别名非常有意义。此外,如果您查看 az cli 安装的 wbin 文件夹,您会发现它只包含文件 az.cmd。【参考方案4】:

您必须将 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 可通过您的路径变量获得。

【讨论】:

【参考方案5】:

换句话说,Azure CLI for Windows 与 Git Bash for Windows 不兼容

https://github.com/Azure/azure-cli/issues/3445

【讨论】:

所链接问题的摘要:这似乎已解决。当我运行az.cmd 时,它工作正常。【参考方案6】:

在您的 ~/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 工具在交互模式下也运行良好。

【讨论】:

【参考方案7】:

所以我来到这里寻找一种在 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 secured 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 的地方。

【讨论】:

【参考方案8】:

我之前的方法只是将 Azure CLI Scripts 文件夹添加到我的 ~/.bashrc 文件中的 $PATH 中。但是,在通过 MSI 将 Azure CLI 更新为 2.2.0 后,这种方法开始失败并出现以下错误:

C:\Program: 无法打开文件 'Files': [Errno 2] 没有这样的文件或目录

所以,为了解决这个问题,我在~/.bashrc 中有我的$PATH 包含~/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": 

【讨论】:

【参考方案9】:

根本不要使用 MSI 安装程序。由于 Azure CLI 是用 Python 实现的,因此请使用 @blndev 所写的 Python 安装方法。这样会得到az.bataz shell 脚本,而不是az.cmd,并且安装路径不会包含空格。

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

【讨论】:

【参考方案10】:

我尝试了@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% 的扩展值当然不能包含空格

【讨论】:

以上是关于Git Bash 中的 Azure CLI的主要内容,如果未能解决你的问题,请参考以下文章

使用 azure cli/bash 在 Azure VM 的“实时”数据磁盘上更新缓存设置

如何在 Azure CLI 或 Bash 脚本中获取天蓝色存储帐户的大小?

静默安装Azure CLI

git bash 使用vue cli创建项目无法上下切换选项

Vue-cli:在 git bash windows 上创建新项目时箭头键不起作用

[错误] Bash 以代码“1”退出 - Azure YAML 管道中的替换错误