Я хочу использовать несколько этапов, чтобы сначала настроить цепочку инструментов для использования на последующих этапах, затем построить код и, наконец, что не менее важно, протестировать приложение. Для этой цели я использую gitlab-runner на windows servercore.
Файл config.toml для gitlab-runner.exe на ядре сервера windows настроен с помощью «mcr.microsoft. com / windows / servercore: ltsc2019 "изображение и имеет параметр" docker - windows "в качестве исполнителя.
Содержимое файла .gitlab-ci.yml, которое я использую, перечислено ниже:
image: mcr.microsoft.com/windows/servercore:ltsc2019
stages:
- build
- test
compile:
stage: build
script:
# install chocolatey
- Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- $env:Path = [System.Environment]::ExpandEnvironmentVariables([System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User"))
- refreshenv
# install cmake and mingw
- choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System'
- refreshenv
- choco install -y mingw
- refreshenv
# make cmake available
- $env:Path = [System.Environment]::ExpandEnvironmentVariables([System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User"))
# build cmake project
- cmake -DCMAKE_BUILD_TYPE=Debug \
-G "CodeBlocks - MinGW Makefiles" -S./ -B./cmake-build-debug/
- cmake --build ./cmake-build-debug --target app -- -j 2
artifacts:
when: on_success
expire_in: 1 hour
paths:
- ./cmake-build-debug
run:
stage: test
script:
- .\cmake-build-debug\app.exe
Для полноты картины вы можете найти содержимое файла CMakeLists.txt и файла main. cpp ниже.
CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(servercore-example-ci LANGUAGES CXX)
add_executable(app main.cpp)
main .cpp;
#include <iostream>
int main(int argc, char** argv)
{
std::cout << "Hello, world!" << std::endl;
return 0;
}
Этапы сборки работают нормально, однако на этапе тестирования возникает следующая ошибка:
ERROR: Job failed (system failure): json: cannot unmarshal number 3221225781 into Go struct field ContainerState.State.ExitCode of type int (docker.go:831:0s)
Есть идеи, как решить эту проблему?