Azure Pipelines编译C++:生成指定格式Readme构件的技术问题
解决Azure Pipelines生成指定格式Readme文件的问题
我帮你梳理下当前配置里的问题,然后直接给出修正后的方案,完美匹配你的需求:
问题定位
- 变量语法错误:你写的
commitsha变量取值$['Build.SourceVersion']是错的,正确的表达式语法应该是$[Build.SourceVersion](不需要单引号包裹)。 - 版本格式不匹配需求:当前
buildnumber用了variables['build'](值是mybuild),但你要的$a是可配置的Version变量,得把这部分替换成variables['Version']。 - Readme格式不对:你现在只是把
buildnumber输出到test.txt,没有按照buildnumber = $a.$d.$e的要求生成文件。
修正后的完整配置
variables: - name: Version value: 1 # 对应需求里的$a,可按需修改 - name: VersionRevision value: $[counter(variables['Version'], 0)] # 对应需求里的$d,增量计数器 - name: commitsha value: $[Build.SourceVersion] # 对应需求里的$e,正确获取Git提交SHA - name: buildnumber value: $[ format('{0}.{1}.{2}', variables['Version'], variables['VersionRevision'], variables['commitsha']) ] trigger: - master jobs: - job: gcctest pool: vmImage: 'ubuntu-16.04' steps: - script: sudo apt-get update && sudo apt-get install libboost-all-dev displayName: '安装Boost依赖库' - script: g++ -std=c++11 -I/usr/include/boost/asio -I/usr/include/boost -o result.out m.cpp c.cpp d.cpp f.cpp displayName: '编译C++代码生成二进制文件' - bash: echo "buildnumber = $(buildnumber)" > Readme.md displayName: '生成指定格式的Readme文件' - task: CopyFiles@2 inputs: sourceFolder: '$(Build.SourcesDirectory)' contents: '?(*.out|*.md)' # 包含二进制文件和Readme targetFolder: $(Build.ArtifactStagingDirectory) displayName: '复制构件到暂存目录' - task: PublishBuildArtifacts@1 inputs: pathToPublish: $(Build.ArtifactStagingDirectory) artifactName: result displayName: '发布最终构件'
核心改动说明
- 变量修复:修正了
commitsha的取值语法,同时调整buildnumber的格式,用Version变量作为版本号的第一部分,完全贴合$a.$d.$e的要求。 - Readme生成:通过bash命令直接生成符合格式的
Readme.md,内容严格遵循buildnumber = 版本号的样式。 - 构件范围调整:修改
CopyFiles任务的内容匹配规则,把.md文件纳入其中,确保Readme和二进制文件一起被发布为构件。
这样配置后,流水线运行完成后会生成你需要的两个构件:result.out二进制文件和符合格式要求的Readme.md,而且全程不需要使用##vso[build.updatebuildnumber]命令。
内容的提问来源于stack exchange,提问作者Vijay Verma
相关产品推荐
相关产品推荐

