Чтобы помочь изучить сборки конвейера Azure, я пытаюсь перенести действие GitHub в Azure Windows-2022 yml. Я прошел через это, и сейчас у меня есть несколько сборок Linux, работающих в Azure. Это для Windows, и как только я начну работать, я смогу попробовать сборки macOS.
Ошибка первая:
CMake Error: CMake was unable to find a build program corresponding to "Ninja".
CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
Файл azure-pipeline.yml:
- job: mingw
pool:
vmImage: windows-2022
# bash?
steps:
- checkout: self
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
addToPath: true
- bash: |
curl -LO https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip
mkdir -p C:/ninja
unzip -q ninja-win.zip -d C:/ninja
export PATH = "/c/ninja:$PATH"
which ninja
ls -la /c/ninja
displayName: 'Install Ninja'
- bash: |
C:/msys64/usr/bin/pacman -Sy --noconfirm --needed mingw-w64-x86_64-uasm
export GITHUB_PATH = "/c/msys64/mingw64/bin:$GITHUB_PATH"
export PATH = "/c/msys64/mingw64/bin:$PATH"
C:/msys64/mingw64/bin/uasm -?
displayName: Install UASM
- bash: |
cmake -S. -B build \
-D UPDATE_DEPS=ON \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_WERROR=ON \
-DCMAKE_MAKE_PROGRAM=/c/ninja/ninja \
-G Ninja
displayName: 'Configure CMake'
- bash: cmake --build build
displayName: CMake build Build
- bash: cmake --install build --prefix /tmp
displayName: CMake Install Build
Вывод из:
which ninja
ls -la /c/ninja
Является:
/c/ninja/ninja
total 540
drwxr-xr-x 1 VssAdministrator 197121 0 Apr 18 02:15 .
drwxr-xr-x 1 VssAdministrator 197121 0 Apr 18 02:15 ..
-rwxr-xr-x 1 VssAdministrator 197121 538112 Nov 28 2020 ninja.exe
Итак, мы знаем, что ниндзя существует.
Когда аналогичный конвейер запускается в GitHub Actions, все просто работает, но мне бы очень хотелось, чтобы это работало в Azure. Это эквивалент действий GitHub, который работает:
mingw:
runs-on: windows-2022
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.8'
- uses: lukka/get-cmake@latest
- name: Setup uasm
run: |
C:/msys64/usr/bin/pacman -Sy --noconfirm --needed mingw-w64-x86_64-uasm
printf '%s\n' 'C:/msys64/mingw64/bin' >> $GITHUB_PATH
- name: UASM Check
run: uasm -?
- run: |
cmake -S. -B build \
-D UPDATE_DEPS=ON \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_WERROR=ON \
-G Ninja
- run: cmake --build build
- run: cmake --install build --prefix /tmp
Я попробовал эту строку -DCMAKE_MAKE_PROGRAM=/c/ninja/ninja \
использовать:
-DCMAKE_MAKE_PROGRAM=/c/ninja/ninja.exe \
и я попробовал добавить его перед cmake, например:
export CMAKE_MAKE_PROGRAM=/c/ninja/ninja
а также перемещение -DCMAKE_MAKE_PROGRAM в разные места в порядке выполнения команды cmake.
Пока ничего не помогло. У меня нет локального агента Windows, поэтому я не могу играть с ним локально, что делает отладку очень сложной и медленной. Потратил несколько часов, перепробовав все, что смог найти в Интернете, но ничего не получилось. Я думаю, что решение, вероятно, заключается в чем-то крошечном, о чем я не знал в cmake.
Кто-то из нашей группы написал оригинальный yaml GitHub Actions, и он хорошо работает с изображениями окон GitHub, как показано. Я предполагаю, что Ninja по умолчанию установлен на изображениях GitHub? Для сборок Linux мы используем lukka/get-cmake@latest, в который, как мне кажется, включен Ninja.
В конвейере Azure каждая задача Bash имеет отдельный сеанс для запуска команд или сценариев, установленных для этой задачи. И сессия закроется, когда задача будет выполнена.
Переменные среды, установленные/обновленные командой «export
», кажутся доступными только в сеансе текущей задачи, а не для сеанса последующих задач.
Чтобы переменные среды были доступны для последующих задач, вы можете использовать команду регистрации «SetVariable», чтобы установить/обновить их. См. пример ниже в качестве ссылки.
steps:
. . .
- task: Bash@3
displayName: 'Install Ninja'
inputs:
targetType: inline
script: |
installDir = "C:/ninja"
curl -LO https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip
mkdir -p $installDir
unzip -q ninja-win.zip -d $installDir
echo "##vso[task.setvariable variable=PATH]$installDir;$(PATH)"
echo "##vso[task.setvariable variable=CMAKE_MAKE_PROGRAM]$installDir/ninja.exe"
Это кажется запутанным, и это заставляет меня задуматься, не подхожу ли я к этому совершенно неправильно? Собираюсь попробовать ваше предложение, и если оно отлично сработает. Поскольку я только учусь, я надеюсь, что есть более простой способ создания сборок на Windows. Тем более, что это один из 6 билдов в yaml, некоторые с матрицей билдов.
@OutofControl, окей. Попробуйте это сделать.
Да, это сработало, и эта работа завершена успешно! Документов очень много, и я никогда не умел читать от А до Я, но я вижу в этом выгоду :) Спасибо, что помогли. Для тех, кто это видит: Learn.microsoft.com/en-us/azure/devops/pipelines/process/…
В ваших действиях GitHub не видно никаких действий по установке ниндзя.