devops/pipline/nuget_build-push.yml

106 lines
3.7 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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