2015-11-04 143 views
29

我一直工作在C#應用程序,並想嘗試的GitLab CI。我只能看到Ruby,並且找不到有關如何使用它構建C#應用程序的任何信息。使用GitLabCI用C#

當我運行測試設置,我做出承諾,但我不有我的身材。

enter image description here

我應該怎樣做一個簡單的構建?我可以使用哪個命令?我不介意如果我得到一個失敗的構建(但構建)。

+3

你有。 gitlab-ci.yml文件,你可以分享? – danielcooperxyz

回答

19

爲了建立你應該有一個Windows亞軍(與外殼執行人)配置在Gitlab CI項目中的C#應用​​程序。

你.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機器上,你需要以下工具:

  • 亞軍安裝
  • 混帳,加入到PATH
  • 位於C最新nuget.exe:\的NuGet(或其他地方,只要確保你有正確的路徑在.gitlab-ci.yml文件)
+0

對不起,你說'git,加入PATH'意味着什麼? –

+0

明白了,這是爲了讓Windows知道git的位置,所以git可以作爲shell來執行。 –

+2

如果msbuild中有空格,則無法使用msbuild。 – Jeremy

30

我只是想分享我的.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

對於那些閱讀此評論的人,您首先要將您的機器配置爲跑步者。請按照下面的Prasanth Louis的指導,特別是鏈接https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/windows.md(因爲有更新)。只有這樣你才能使用這個.gitlab-ci.yml。 – corentinaltepe

+0

@corentin感謝您的包括。是的,您需要在您的構建機器上安裝Visual Studio,因爲我相信MSTest是其中的一部分。 – Jeff

+1

請考慮將您的示例提交給[GitLab CI Yml項目](https://gitlab.com/gitlab-org/gitlab-ci-yml/issues/12)。 – bbodenmiller

5

其他答案都很好。但我想解釋一下如何安裝跑步者。我使用自己的本地系統(Windows),所以我選擇運行shell。但是如果你願意的話,你可以使用一個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

之後,您可以使用一個YML文件是這樣的:

stages: 
    - build 
job: 
    stage: build 
    script: '"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe" "something.sln"' 
+0

請考慮將您的示例提交給[GitLab CI Yml項目](https://gitlab.com/gitlab-org/gitlab-ci-yml/issues/12)。 – bbodenmiller

4

晚歸這我知道,但我想在這更加擴大。

安裝在Windows機器上構建亞軍有很大幫助,@ prasanth路易對如何做一個很好的例子。

至於.gitlab-ci.yml您可以通過使用Cake Build

stages: 
    - build 
build: 
    stage: build 
    script: 
     - .\build.ps1 -Target Build 
    tags: 
     - windows 

而且你build.cake文件可以是這樣的(基於example 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); 
+0

Cake是絕對要走的路,特別是如果你正在從TeamCity,Jenkins等過渡到爲你處理大量這些東西的服務器。 –