106 lines
3.7 KiB
YAML
106 lines
3.7 KiB
YAML
stages:
|
||
- build
|
||
- test
|
||
- publish
|
||
|
||
variables:
|
||
DOTNET_ROOT: "/opt/dotnet/dotnet"
|
||
PATH: "${PATH}:${DOTNET_ROOT}:${DOTNET_ROOT}/tools"
|
||
BUILD_ARTIFACTS: "${CI_PROJECT_DIR}/artifacts"
|
||
NUGET_CONFIG: "/opt/tt/NuGet_microservice.Config"
|
||
|
||
# Кэширование пакетов NuGet между запусками (опционально)
|
||
cache:
|
||
key: nuget
|
||
paths:
|
||
- .nuget/packages
|
||
|
||
# Образ должен быть предварительно собран и загружен в ваш реестр
|
||
image: your-registry.com/your-dotnet-sdk:7.0
|
||
|
||
before_script:
|
||
- mkdir -p $BUILD_ARTIFACTS
|
||
- echo "Очистка локальных кэшей NuGet"
|
||
- dotnet nuget locals all --clear
|
||
|
||
build-and-test:
|
||
stage: build
|
||
script:
|
||
# Шаг 02: Восстановление зависимостей с кастомным NuGet.config
|
||
- dotnet restore Packages.sln -ConfigFile $NUGET_CONFIG
|
||
|
||
# Шаг 04: Загрузка PFX-файла (пример из CI Variable)
|
||
- echo "$PFX_FILE_BASE64" | base64 -d > ./certs/signing.pfx
|
||
- export PFX_PATH="$CI_PROJECT_DIR/certs/signing.pfx"
|
||
- export PFX_PASSWORD="$PFX_CERT_PASSWORD" # Должна быть в CI Variables
|
||
|
||
# Шаг 05: Добавление appsettings.json (если нужен для тестов)
|
||
- mkdir -p Packages.Tests
|
||
- echo "$APPSETTINGS_JSON" > Packages.Tests/appsettings.json
|
||
|
||
# Шаг 03: Сборка всех проектов
|
||
- dotnet build **/*.csproj --configuration Release --no-restore --no-restore
|
||
|
||
# Шаг 06: Запуск тестов с генерацией TRX-отчётов
|
||
- dotnet test Packages.Tests/Packages.Tests.csproj \
|
||
--configuration Release \
|
||
--no-restore \
|
||
--logger trx \
|
||
--results-directory ./test-results \
|
||
/p:CollectCoverage=true \
|
||
/p:CoverletOutputFormat=cobertura
|
||
|
||
artifacts:
|
||
paths:
|
||
- $BUILD_ARTIFACTS/*.nupkg
|
||
- ./test-results/**/*.trx
|
||
- ./coverage.cobertura.xml
|
||
reports:
|
||
junit: ./test-results/**/*.trx # GitLab может конвертировать TRX → JUnit
|
||
coverage_report:
|
||
coverage_format: cobertura
|
||
path: ./coverage.cobertura.xml
|
||
expire_in: 1 week
|
||
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "develop"
|
||
when: always
|
||
- if: $CI_COMMIT_TAG
|
||
when: always
|
||
|
||
# Опционально: отдельный шаг для публикации (лучше контролировать)
|
||
publish-nuget:
|
||
stage: publish
|
||
image: your-registry.com/your-dotnet-sdk:7.0
|
||
script:
|
||
# Копирование nupkg в артефактную директорию
|
||
- mkdir -p $BUILD_ARTIFACTS
|
||
- find . -name "Packages*.nupkg" -not -name "*.symbols.nupkg" -exec cp {} $BUILD_ARTIFACTS/ \;
|
||
|
||
# Проверка наличия пакетов
|
||
- ls -la $BUILD_ARTIFACTS/
|
||
|
||
# Настройка источника NuGet (Nexus)
|
||
- dotnet nuget add source "$NUGET_FEED_URL" --name "nexus" --username "$NUGET_USER" --password "$NUGET_API_KEY" --store-password-in-clear-text
|
||
|
||
# Публикация всех nupkg, кроме symbols, с маской Packages.TST*
|
||
- |
|
||
for pkg in $BUILD_ARTIFACTS/Packages.TST*.nupkg; do
|
||
if [[ -f "$pkg" && "$pkg" != *".symbols.nupkg" ]]; then
|
||
echo "Pushing $pkg to Nexus..."
|
||
dotnet nuget push "$pkg" \
|
||
--source nexus \
|
||
--api-key "$NUGET_API_KEY" \
|
||
--skip-duplicate
|
||
fi
|
||
done
|
||
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "develop"
|
||
when: manual # Ручной запуск публикации
|
||
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+/ # Авто-публикация по тегу
|
||
when: always
|
||
|
||
environment:
|
||
name: production
|
||
url: $NUGET_FEED_URL |