1

Я пытаюсь использовать Ansible для автоматизации развертывания на удаленной машине Windows, и у меня возникли трудности с выполнением команд git на удаленном компьютере. Если я физически на удаленной машине, я использую git через инструмент командной строки posh-git, предоставляемый клиентом Github для Windows. Я сделал мерзавец исполняемым доступны из стандартного PowerShell, добавляяЗапуск github для windows powershell на удаленном сервере

. (Resolve-Path "$env:LOCALAPPDATA\GitHub\shell.ps1") 
. $env:github_posh_git\profile.example.ps1 

к моему профилю в %USERPROFILE%\Documents\WindowsPowerShell\Profile.ps1.

Когда я пытаюсь выполнить команды git в сценарии powershell через Ansible, похоже, что профиль не находится под «источником» (с использованием языка Linux, который я гораздо больше знаю) на удаленном сеансе. Согласно these docs, существует профиль для «Текущий пользователь, все хосты», который считывается с $Home\Documents\Profile.ps1, но поиск того же файла там, похоже, не решает проблему.

Любые идеи о том, как настроить мою среду правильно, чтобы я мог запускать скрипты powershell, которые ссылаются на команду Github posh-git git из сценария powershell, выполняемого Ansible, который использует оболочку python вокруг WinRM?

ответ

1

PowerShell не загружает профиль при использовании удаленного доступа.

posh-git на самом деле не добавляет git в PowerShell, он в основном дает пользовательское приглашение в git repos и завершение вкладки для команд git. Фактическая функциональность git предоставляется msysgit, поэтому есть где-то исполняемый файл git.exe.

Если вы добавите путь (для меня это C:\Program Files (x86)\Git\bin) к переменной окружения PATH на удаленном хосте или включите полный путь к git в ваших командах, он должен работать; поэтому вместо git push, может сделать:

& "${env:ProgramFiles(x86)}\Git\Bin\git.exe" push 

Не очень красиво, но это должен делать эту работу. Вы также можете сделать псевдоним:

New-Alias -Name git -Value "${env:ProgramFiles(x86)}\Git\Bin\git.exe" 
git push 

Но вы все еще не можете загрузить это автоматически без профиля, если вы не создать новую конфигурацию сеанса и создать новую Powershell конечную точку, но я не уверен, что если анзибль может использовать это. Вы можете попытаться заменить конфигурацию конечной точки по умолчанию Microsoft.PowerShell, но это похоже на плохую идею.

+0

Это выглядит как если версия мерзавца, который используется " Github Shell "фактически находится в' \ AppData \ Local \ GitHub \ PortableGit_ ' – JoshAdel

1

Вместо того, чтобы пытаться полагаться на профиль, я в конечном итоге просто звоню линию, которая устанавливает ублюдка непосредственно в моем Powershell скрипт:

function SetupGit() { 
    Write-Host "Setting up powershell git access" 

    if (Get-Command git -errorAction SilentlyContinue) { 
     Write-Host "git is already accessible" 
     return 
    } 

    . (Resolve-Path "$env:LOCALAPPDATA\GitHub\shell.ps1") 

    if (-Not (Get-Command git -errorAction SilentlyContinue)) { 
     Write-Host "Cannot find git command" 
     Exit 1 
    } 
} 
Смежные вопросы