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

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

【问题讨论】:

    标签: bash azure git-bash azure-cli


    【解决方案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
    

    【讨论】:

    【解决方案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% 的扩展值当然不能包含空格

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-04-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-01-20
                相关资源
                最近更新 更多