web-dev-qa-db-fra.com

Utiliser GitLabCI avec C #

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.

Enter image description here

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).

41

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
39
Jeff

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:

  • Runner installé
  • Git, ajouté à PATH
  • Le dernier fichier nuget.exe sur C:\nuget (ou ailleurs. Assurez-vous d’avoir le chemin exact dans le fichier .gitlab-ci.yml).
20
Grisha

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"'
9
Prasanth Louis

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);
8
SolThoth

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
2
user1747547