摘要
本文详细描述了运行在Windows商的Gitlab Runner,如何自动集成.NET Framework的项目。
Gitlab中的变量
变量1:NUPKG_OUTPUT_ROOT
这个目录是在git获取的解决方案根目录之外,因为stages变了以后,当前Gitlab Runner工作的当前解决方案根目录下会被清空。我们希望build了以后经过单元测试,测试通过了才push到仓库。所以这个目录必须是在Gitlab Runner的build目录之外。
变量2:BUILD_LIBRARY_SCRIPT
Windows服务器上存放PowerShell的文件路径。
变量3:MSBUILD_PATH
Windows服务器上,msbuild.exe文件所在的目录。
Gitlab Runner服务器上的PowerShell
function Build-Project {
param (
[string]$msbuild_dir,
[string]$ci_project_dir,
[string]$project_path,
[string]$version,
[string]$output_path
)
$project_file = $ci_project_dir + "\\" + $project_path
if(( $project_path -like "/*") -or ($project_path -like "\\*")){
$project_file = $ci_project_dir + $project_path
}
if (-not $output_path) {
Write-Host "没有传入第5个参数,nupkg包将放在解决方案根目录的nupkg中"
$output_path =$ci_project_dir + "/nupkg"
} else {
Write-Host "指定了nupkg包的输出目录"
}
Write-Host "nupkg包的输出目录是:" + $output_path
echo "项目文件"$project_file
echo "版本号"$version
echo "输出路径"$output_path
cd $msbuild_dir
dotnet nuget locals http-cache -c
.\msbuild -restore $project_file
.\msbuild $project_file /p:OutputPath=$output_path /p:Version=$version
.\msbuild -t:pack $project_file /p:Configuration=Release /p:OutputPath=$output_path /p:PackageOutputPath=$output_path /p:PackageVersion=$version
}
Visual Studio中编写.gitlab-ci.yml
stages: # List of stages for jobs, and their order of execution
- build
variables:
YEE_CLOUD_VERSION_ID : 2024.5.$CI_PIPELINE_IID
YEE_CLOUD_NUPKG_DIR : $NUPKG_OUTPUT_ROOT\\Yee.Cloud\\$YEE_CLOUD_VERSION_ID
build-job: # This job runs in the build stage, which runs first.
stage: build
tags:
- zhongfang-windows
before_script:
- .$BUILD_LIBRARY_SCRIPT
script:
- echo "Compiling the code..."
# Yee.Cloud
- Build-Project $MSBUILD_PATH $CI_PROJECT_DIR "Yee.Cloud/Yee.Cloud.csproj" $YEE_CLOUD_VERSION_ID $YEE_CLOUD_NUPKG_DIR
执行效果
有图有真相:
存在的问题:
如果编译出错,PowerShell不能让Gitlab Runner控制台认为是任务失败了。
本文还会有后续更新。
标签:4.6,Windows,Gitlab,project,Framework,msbuild,Runner,path,output From: https://www.cnblogs.com/amisoft/p/18179147/gitlab-runner-build-project-based-on-net461