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
|