Add pipline/nuget_build-push.yml
This commit is contained in:
parent
9de2fbdd9b
commit
7aaf88bc67
106
pipline/nuget_build-push.yml
Normal file
106
pipline/nuget_build-push.yml
Normal file
@ -0,0 +1,106 @@
|
||||
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
|
||||
Loading…
x
Reference in New Issue
Block a user