在C#中使用GitLabCI

And*_*uiz 41 c# gitlab gitlab-ci

我一直在研究C#应用程序,并想尝试GitLab CI.我只能看到Ruby,无法找到有关如何使用它构建C#应用程序的任何信息.

当我运行测试设置时,我进行提交,但我没有构建.

在此输入图像描述

我该如何进行简单的构建?我可以使用哪个命令?如果我得到一个失败的构建(但是构建),我不介意.

Jef*_*eff 39

我只想分享我的.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
Run Code Online (Sandbox Code Playgroud)

  • 对于那些阅读此评论的人,您首先要将您的机器配置为跑步者.按照下面的Prasanth Louis指南,特别是链接https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/windows.md(因为有更新).只有这样你才能使用这个.gitlab-ci.yml. (3认同)
  • 请考虑将您的示例提交到[GitLab CI Yml项目](https://gitlab.com/gitlab-org/gitlab-ci-yml/issues/12). (2认同)

小智 20

为了构建C#应用程序,您应该为Gitlab CI中的项目配置Windows Runner(带有shell执行程序).

你的.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
Run Code Online (Sandbox Code Playgroud)

在Windows机器上,您需要以下工具:

  • 跑步者安装
  • git,添加到PATH
  • 最新的nuget.exe在c:\nuget(或其他地方,只需确保你在.gitlab-ci.yml文件中找到了正确的路径)

  • 明白了,Windows 可以知道 git 的位置,以便 git 可以作为 shell 执行。 (2认同)
  • 如果有一个空格,你的msbuild路径不起作用. (2认同)

Pra*_*uis 10

其他答案都很好.但我想解释一下如何安装跑步者.我使用自己的本地系统(Windows),所以我选择运行shell.但如果您愿意,可以使用泊坞窗图像.

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!
Run Code Online (Sandbox Code Playgroud)

资料来源:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/windows.md

之后,您可以像这样使用yml文件:

stages:
    - build
job:
    stage: build
    script: '"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" "something.sln"'
Run Code Online (Sandbox Code Playgroud)


Sol*_*oth 8

我知道,迟到这一点,但我想进一步扩展这一点.

在Windows机器上安装构建运行器有很大帮助,@ prasanth-louis有一个很好的例子来说明如何做到这一点.

至于.gitlab-ci.yml你可以使用Cake Build进一步简化它

stages:
    - build
build:
    stage: build
    script:
        - .\build.ps1 -Target Build
    tags:
        - windows
Run Code Online (Sandbox Code Playgroud)

并且您的build.cake文件可能如下所示(基于示例repo):

#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);
Run Code Online (Sandbox Code Playgroud)


小智 6

这是我的 C# 应用程序的工作 .gitlab-ci.yml 文件,其中 NUnit 作为单元测试框架,mono 作为基本图像。

不是很花哨,但很有效:

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
Run Code Online (Sandbox Code Playgroud)