Azure CLI в Git Bash
Я пытаюсь использовать скрипт bash (sh) в Windows для запуска тестового развертывания. Я запускаю скрипт из консоли gitbash, чтобы у меня была копия bash, но это означает, что Azure Clie недоступен (то есть команда Azure не найдена). Кто-нибудь знает, как я могу заставить работать Azure cli в GitBash (я предполагаю, что просто устанавливаю его где-то в другом месте), или мне следует перейти на другой способ использования bash?
5 ответов
Иногда команды в windows git bash требуют добавления.cmd. Кроме того, другой способ установки Azure-Cli - через Chocolatey https://chocolatey.org/
Попробуйте эту команду после установки Azure-Cli:
az.cmd --version
Повторяя mscrivo, вы можете запустить строку ниже в Git bash (повышен /admin)
ln -s "C:\Program Files (x86)\Microsoft SDKs"/Azure/CLI2/wbin/az.cmd "$SYSTEMROOT\az"
Теперь вы должны быть в состоянии выполнить:
az --version
Настройка псевдонима bash для az.cmd
в вашем .profile
или же .bashrc
работает, если вам просто нужно запустить az в интерактивной оболочке bash.
Однако, если вы хотите использовать команду az
из сценариев bash псевдоним не будет работать. Я остановился на создании символической ссылки на az.cmd где-то на вашем пути, то есть:
mklink "%SYSTEMROOT%\az" "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd"
В случае использования Git bash перейдите в следующий каталог:
C:\Program Files\Git\ etc \ profile.d
редактировать aliases.sh
, затем добавьте новый псевдоним для az
как показано ниже:
alias az='az.cmd'
Вы должны установить CLI на свой компьютер. Есть несколько способов сделать это.
Я друг NodeJS, поэтому я использую npm для установки:
npm install -g azure-cli
Более подробная информация здесь: https://www.npmjs.com/package/azure-cli
Но вы можете сделать это и другими способами. Очень хороший способ - использовать докер. Существуют контейнеры от Microsoft с предустановленной версией Azure CLI.
docker run -it --name azure microsoft/azure-cli
В Windows 10 с Ubuntu Bash вы можете использовать:
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
Или как питонский энтузиаст
pip install --user azure-cli
Наиболее важным является то, что корзина "az"/"az.bat" или "azure" доступна через вашу переменную пути.
Другими словами, Azure CLI для Windows не совместим с Git Bash для Windows
В вашем ~/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 не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл".
РЕДАКТИРОВАТЬ:
Я закончил использовать Ubuntu через WLS. Для всех инструментов, таких как az, terraform, kubectl, istioctl. Инструмент az хорошо работает и в интерактивном режиме.
Мой предыдущий подход заключался в том, чтобы просто добавить папку сценариев Azure CLI Scripts в папку $PATH
внутри моего ~/.bashrc
файл. Но после обновления Azure CLI до2.2.0
через MSI этот подход начал давать сбой с этой ошибкой:
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": {}
}
Итак, я прибыл сюда в поисках способа запускать одни и те же команды z в сценарии оболочки bash в агентах сборки Azure DevOps Linux и Windows (git bash), чтобы я мог использовать один и тот же код для обоих типов агентов. Это также работает для оболочки git bash в Windows 10. Мой более длинный ответ здесь: Azure DevOps Build Pipeline не может получать секреты из Key Vault при защите с помощью vnet и брандмауэра.
Суть этого:
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
после выполнения кода начальной загрузки.
Не используйте MSI установщик вообще. Поскольку интерфейс командной строки Azure реализован на Python, используйте метод установки Python, как писал @blndev. Таким образом, вместо az.cmd
ты получаешь az.bat
а также az
сценарий оболочки, и путь установки не будет содержать пробелов.
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. Однако при использовании команды az в сценарии оболочки у вас по-прежнему возникают проблемы из-за пробелов в пути. Для этого я создал файл azproxy.cmd в%SYSTEMROOT%, содержащий
@echo off
"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" %*
А затем создать ссылку на этот файл
mklink "%SYSTEMROOT%\az" "SYSTEMROOT%\azproxy.cmd"
PS расширенное значение%SYSTEMROOT% не должно содержать пробелов, конечно