Использование GitLabCI с С#
Я работал над приложением на С# и хотел попробовать его на GitLab CI. Все, что я вижу, это Ruby и не могу найти никакой информации о том, как создать приложение на С#, используя его.
Когда я запускаю настройки теста, я делаю коммит, но у меня нет моей сборки.
![Enter image description here]()
Как мне сделать простую сборку? Какую команду я могу использовать для этого? Я не против, если я получу неудачную сборку (но сборку).
Ответы
Ответ 1
Я просто хотел поделиться своим .gitlab-ci.yml в комплекте с модульным тестированием. Вам нужно будет настроить свой nuget и, возможно, другие пути. Это для одного проекта в решении с тем же именем.
variables:
PROJECT_NAME: "ProjectNameGoesHere"
before_script:
- echo "starting build for %PROJECT_NAME%"
- echo "Restoring NuGet Packages..."
- d:\tools\nuget restore "%PROJECT_NAME%.sln"
stages:
- build
- test
build:
stage: build
script:
- echo "Release build..."
- '"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" /consoleloggerparameters:ErrorsOnly /maxcpucount /nologo /property:Configuration=Release /verbosity:quiet "%PROJECT_NAME%.sln"'
artifacts:
untracked: true
test:
stage: test
script:
- echo "starting tests"
- cd %PROJECT_NAME%Tests/bin/Release
- '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe" /testcontainer:%PROJECT_NAME%Tests.dll'
dependencies:
- build
Ответ 2
Чтобы построить приложение на С#, у вас должен быть установлен Windows Runner (с оболочкой-исполнителем) для проекта в GitLab CI.
Ваш файл .gitlab-ci.yml должен выглядеть примерно так:
stages:
- build
job:
stage: build
script:
- echo "Restoring NuGet Packages..."
- '"c:\nuget\nuget.exe" restore "MySolution.sln"'
- ''
- echo "Release build..."
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /consoleloggerparameters:ErrorsOnly /maxcpucount /nologo /property:Configuration=Release /verbosity:quiet "MySolution.sln"
tags:
except:
- tags
На компьютере с Windows вам понадобятся следующие инструменты:
- Бегун установлен
- Git, добавленный в PATH
- Последний файл nuget.exe в C:\nuget (или где-то еще. Просто убедитесь, что вы правильно указали путь в файле .gitlab-ci.yml)
Ответ 3
Другие ответы хороши. Но я хотел бы объяснить, как установить бегун дополнительно. Я использую свою собственную локальную систему (Windows), поэтому я решил запустить оболочку. Но вы можете использовать изображение Docker, если хотите.
cd C:\Multi-Runner
gitlab-ci-multi-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
Please enter the gitlab-ci token for this runner
xxx
Please enter the gitlab-ci description for this runner
my-runner
INFO[0034] fcf5c619 Registering runner... succeeded
Please enter the executor: shell, docker, docker-ssh, ssh?
shell
INFO[0037] Runner registered successfully. Feel free to start it, but if it's
running already the config should be automatically reloaded!
Источник: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/windows.md
После этого вы можете использовать файл YAML примерно так:
stages:
- build
job:
stage: build
script: '"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" "something.sln"'
Ответ 4
Установка сборщика на Windows-машине очень помогает, и у @prasanth-louis есть отличный пример того, как это сделать.
Что касается .gitlab-ci.yml
, вы можете еще больше упростить его, используя Cake Build:
stages:
- build
build:
stage: build
script:
- .\build.ps1 -Target Build
tags:
- windows
И ваш файл build.cake
может выглядеть так (на основе примера репозитория):
#tool nuget:?package=NUnit.ConsoleRunner&version=3.4.0
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var solution = "./example-project.sln";
var buildDir = Directory("./example-project/bin");
Task("Default")
.IsDependentOn("Unit-Tests")
.Does(() =>
{
Information("Running Default task!");
});
Task("Clean")
.Does(() =>
{
CleanDirectory(buildDir);
});
Task("PackageRestore")
.IsDependentOn("Clean")
.Does(() =>
{
Information("Restoring NuGet packages for {0}", solution);
NuGetRestore(solution);
});
Task("Build")
.IsDependentOn("PackageRestore")
.Does(() =>
{
Information("Restoring NuGet packages for {0}", solution);
MSBuild(solution, settings => settings.SetConfiguration(configuration));
});
Task("Unit-Tests")
.IsDependentOn("Build")
.Does(() =>
{
NUnit3("./example-project.Tests/**/bin/" + configuration + "/*.Tests.dll");
});
Task("Publish")
.Does(() =>
{
});
RunTarget(target);