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.bat
和az
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 脚本中获取天蓝色存储帐户的大小?
git bash 使用vue cli创建项目无法上下切换选项