摘要
本文详细描述了运行在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_pathecho "项目文件"$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- buildvariables:YEE_CLOUD_VERSION_ID : 2024.5.$CI_PIPELINE_IIDYEE_CLOUD_NUPKG_DIR : $NUPKG_OUTPUT_ROOT\\Yee.Cloud\\$YEE_CLOUD_VERSION_IDbuild-job: # This job runs in the build stage, which runs first.stage: buildtags:- zhongfang-windowsbefore_script:- .$BUILD_LIBRARY_SCRIPTscript:- 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控制台认为是任务失败了。
本文还会有后续更新。