Je travaillais sur une application C # et je voulais l'essayer avec GitLab CI. Tout ce que je peux voir, c’est Ruby) et je ne trouve aucune information sur la façon de créer une application C # qui l’utilise.
Lorsque je lance les paramètres de test, je valide, mais je n'ai pas ma construction.
Comment dois-je faire une construction simple? Quelle commande pourrais-je utiliser pour cela? Cela ne me dérange pas si je reçois une version échouée (mais une version).
Je voulais simplement partager mon fichier .gitlab-ci.yml avec les tests unitaires. Vous devrez ajuster votre pépite et éventuellement d’autres chemins. Ceci est pour un seul projet dans une solution du même nom.
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
Pour créer une application C #, vous devez avoir un coureur Windows (avec un exécuteur Shell) configuré pour un projet dans GitLab CI.
Votre fichier .gitlab-ci.yml devrait ressembler à quelque chose comme ça:
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
Sur une machine Windows, vous avez besoin des outils suivants:
Les autres réponses sont bonnes. Mais j'aimerais expliquer comment installer un coureur en plus. J'utilise mon propre système local (Windows), j'ai donc choisi d'exécuter Shell. Mais vous pouvez utiliser une image Docker si vous le souhaitez.
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!
Source: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/windows.md
Ensuite, vous pouvez utiliser un fichier YAML comme ceci:
stages:
- build
job:
stage: build
script: '"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" "something.sln"'
L'installation du programme de construction sur une machine Windows aide beaucoup, et @ prasanth-louis a un excellent exemple sur la façon de le faire.
Quant au fichier .gitlab-ci.yml
, Vous pouvez le simplifier encore davantage en utilisant Cake Build :
stages:
- build
build:
stage: build
script:
- .\build.ps1 -Target Build
tags:
- windows
Et votre fichier build.cake
Peut ressembler à ceci (basé sur le exemple du référentiel ):
#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);
Voici mon fichier de travail .gitlab-ci.yml pour application c # avec NUnit en tant que framework de test unitaire et mono en tant qu’image de base.
Pas très chic mais fonctionnel:
image: mono:latest
stages:
- build
- test
variables:
solution: "Project.sln"
test: "Project.Test"
before_script:
- nuget restore
build:
stage: build
script:
- msbuild /p:Configuration=Release $solution
test:
stage: test
script:
- msbuild /p:Configuration=Release $solution
- mono ./packages/NUnit.ConsoleRunner.3.10.0/tools/nunit3-console.exe ./$test/bin/Release/$test.dll