如何在Jenkins自由风格任务中为C#方案更新日期+构建号组合的Assembly Version
实现方案
你需要的年.月.日.当日自增序号版本格式完全匹配给出的示例要求,可按照以下步骤在Jenkins自由风格任务中实现:
具体操作步骤
- 步骤1:选择对应节点的执行脚本
根据你的Jenkins构建节点操作系统,在构建步骤中添加对应脚本步骤,建议将脚本步骤放在拉取代码之后、执行C#编译之前。- Windows节点(推荐用PowerShell):
# 1. 生成版本号 $datePart = Get-Date -Format "yyyy.MM.dd" $cacheFile = "build_version_cache.txt" $currentDate = Get-Date -Format "yyyyMMdd" # 处理当日自增序号,跨天自动重置为0 if(Test-Path $cacheFile){ $cache = Get-Content $cacheFile $lastDate = $cache[0] $lastSeq = [int]$cache[1] $currentSeq = $lastDate -eq $currentDate ? ($lastSeq + 1) : 0 }else{ $currentSeq = 0 } $buildSeq = $currentSeq.ToString().PadLeft(2,'0') $targetVersion = "$datePart.$buildSeq" # 2. 写回缓存文件 @($currentDate, $currentSeq) | Out-File $cacheFile -Encoding utf8 # 3. 替换AssemblyInfo.cs中的版本号 $assemblyPath = "你的项目目录/Properties/AssemblyInfo.cs" (Get-Content $assemblyPath -Encoding utf8) ` -replace 'AssemblyVersion\(".*?"\)', "AssemblyVersion(`"$targetVersion`")" ` -replace 'AssemblyFileVersion\(".*?"\)', "AssemblyFileVersion(`"$targetVersion`")" ` | Out-File $assemblyPath -Encoding utf8 - Linux节点(用Bash脚本):
# 1. 生成版本号 DATE_PART=$(date +%Y.%m.%d) CACHE_FILE="build_version_cache.txt" CURRENT_DATE=$(date +%Y%m%d) if [ -f $CACHE_FILE ]; then LAST_DATE=$(sed -n '1p' $CACHE_FILE) LAST_SEQ=$(sed -n '2p' $CACHE_FILE) if [ $LAST_DATE == $CURRENT_DATE ]; then CURRENT_SEQ=$((LAST_SEQ + 1)) else CURRENT_SEQ=0 fi else CURRENT_SEQ=0 fi BUILD_SEQ=$(printf "%02d" $CURRENT_SEQ) TARGET_VERSION="$DATE_PART.$BUILD_SEQ" # 2. 写回缓存 echo -e "$CURRENT_DATE\n$CURRENT_SEQ" > $CACHE_FILE # 3. 替换版本号 ASSEMBLY_PATH="你的项目目录/Properties/AssemblyInfo.cs" sed -i 's/AssemblyVersion(".*")/AssemblyVersion("'$TARGET_VERSION'")/g' $ASSEMBLY_PATH sed -i 's/AssemblyFileVersion(".*")/AssemblyFileVersion("'$TARGET_VERSION'")/g' $ASSEMBLY_PATH
- Windows节点(推荐用PowerShell):
- 步骤2:修改路径配置
将脚本中你的项目目录/Properties/AssemblyInfo.cs替换为你实际项目中AssemblyInfo.cs的相对路径,如果有多个项目需要修改,可以加遍历逻辑批量替换所有项目的对应文件。 - 步骤3:执行正常构建
后续正常执行MSBuild/dotnet build编译命令即可,编译出的程序集版本就会是你要求的2021.09.01.00、2021.09.01.01格式。
特殊场景适配
- 如果你使用的是SDK风格项目(.NET Core/.NET 5+),版本信息默认存放在.csproj文件中,只需要将脚本中的替换规则修改为匹配
<Version>和<FileVersion>节点即可。 - 不需要跨天重置构建序号的场景,可以直接用Jenkins内置的
BUILD_NUMBER环境变量作为第四位,去掉缓存逻辑即可,使用更简单。 - 不需要提交版本号修改到代码库的话,将AssemblyInfo.cs的修改放在构建结束后自动还原即可,避免本地修改冲突。
内容的提问来源于stack exchange,提问作者Suresh Kumar Panneer
相关产品推荐
相关产品推荐

