github runner в Windows не находит исполняемые файлы в PowerShell

Я пытаюсь использовать локальную виртуальную машину Windows для запуска на западе для управления репо, python для запуска некоторых скриптов и git для возврата в репо.

Работа заключается в создании файлов с использованием python из repo-A как артефакты для регистрации repo-B. Мне пришлось использовать Windows, потому что инструменты для создания файлов работают только в Windows.

У меня есть установка агента сборки на собственном сервере, и я могу запускать на нем действия github.

На стороне виртуальной машины это путь к соответствующим командам (показывая, что они правильно добавлены в $PATH)

      PS C:\TouchGFXProjects\wallSwitch-gui-hesPrototype-480-272> gcm west; gcm tgfx.exe; gcm python; gcm git

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     west.exe                                           0.0.0.0    C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Scripts\west.exe
Application     tgfx.exe                                           4.16.1.0   C:\TouchGFX\4.16.1\designer\tgfx.exe
Application     python.exe                                         3.9.515... C:\Users\tgfx\AppData\Local\Programs\Python\Python39\python.exe
Application     git.exe                                            2.31.1.1   C:\Program Files\Git\cmd\git.exe

Политика выполнения виртуальной машины установлена ​​на:

      PS C:\Windows\system32> Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine          Bypass

Все сценарии и шаги выполнения выполнялись хорошо при выполнении из PowerShell на самой виртуальной машине. Но когда я вызываю бегун github, поведение указывает, что он не знает, где находятся исполняемые файлы, несмотря на то, что он известен в $PATH (см. вывод отладки ниже).

скрипт бегуна github:

      name: CI

on:
    workflow_dispatch:
    pull_request:
        branches:
            - master
            - 'feature/**'

jobs:
  # Test-path access using powerShell shell
  test-path-powerShell:
    runs-on: [self-hosted, Windows, X64, touchGFX]
    steps:
      - name: Display the path
        run: echo ${env:PATH}
        shell: powershell
        continue-on-error: true

      - name: Check that we know where python is
        run: gcm python
        shell: powershell
        continue-on-error: true

      - name: Test calling "python.exe --version" via powershell
        run: python.exe --version
        shell: powershell
        continue-on-error: true
  
      - name: Test calling "python.exe --version" via powershell (abs path)
        run: C:\Users\tgfx\AppData\Local\Programs\Python\Python39\python.exe --version
        shell: powershell
        continue-on-error: true

При запуске на github runner команда echo ${env:PATH} показывает:

      Run echo ${env:PATH}
C:\TouchGFX\4.16.1\designer;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Lib\site-packages;C:\Program Files\Git\cmd;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\WindowsApps

Это означает, что в нем должно быть место для python.exe

Однако все команды, которые пытаются получить к нему доступ (даже с абсолютным путем), возвращают такие ошибки:

      Run gcm python
gcm : The term 'python' is not recognized as the name of a cmdlet, function, script file, or operable program. Check 
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\actions-runner\_work\_temp\c19697cd-d5e0-4102-a7b6-5f357f82aa91.ps1:2 char:1
+ gcm python
+ ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (python:String) [Get-Command], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand

Я также попытался добавить python в $GITHUB_PATH с помощью:

      echo "C:\Users\tgfx\AppData\Local\Programs\Python\Python39" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

Но это просто расширяет вывод echo ${env:PATH} и по-прежнему приводит к той же ошибке при выполнении.

Что мне не хватает?

Спасибо за уделенное время.

1 ответ

В моей настройке недостающий элемент - это права доступа для Github Action Runner Service. По умолчанию NT AUTHORITY\NETWORK SERVICEИспользуется при установке раннера как сервис не работает. Я тестировал изменение разрешения службы на оба Local Service и обнаружил, что Local System работает.

Вам необходимо перезапустить службу при изменении разрешений, чтобы она вступила в силу.

В рабочем процессе github runner вы можете проверить настройки с помощью whoami команда из PowerShell.