我有一个
pom.xml
文件,其中包含我的项目版本,如下所示
<version> 1.14.0 </version>
我还有一个 YAML 文件,当测试通过时它会自动生成 GitHub 标签,就像这样
- job: createTag
dependsOn: ifBranchIsMaster
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')
steps:
- task: GitHubRelease@0
displayName: ‘Create GitHub Release’
inputs:
gitHubConnection: $(GITHUB_CONNECTION)
repositoryName: $(GITHUB_REPO)
action: create
tag: 1.14.0
并且我想从我的 YAML 文件中删除硬编码版本标签并立即从
pom.xml
读取它是否有可能发生我尝试将硬编码版本最小化为 1。我想在 1 中更改它到处放置和改变。
所以我想出了一个脚本来解决我的问题并读取所有pom.xml中的
<version>1.14.1</version>
这是一个 powershell 脚本
[xml]$pomXml = Get-Content .\pom.xml
# version
Write-Host $pomXml.project.version
$version=$pomXml.project.version
Write-Host "##vso[task.setvariable variable=version]$version"
我还会提供 bash 脚本,以防有人需要
#!/usr/bin/env bash
version=$(grep version pom.xml | grep -v '<?xml' | grep '<version>'|head -n 1|awk '{print $1}'| cut -d'>' -f 2 | cut -d'<' -f 1)
echo "##vso[task.setvariable variable=version]$version"
这就是我发现可以从 pom.xml 获取版本的方法
您可以创建一个 PowerShell 脚本,从
pom.xml
文件中读取变量并设置管道变量。在 tag:
使用此变量。
例如:
$filePath = "path/to/pom.xml"
$version = (Select-String -Path $filePath -Pattern "<version>").Line
$version = $version.Split(" ")[1]
Write-Host "##vso[task.setvariable variable=version]$version"
阅读版本的另一个选项是:
[xml]$pomXml = Get-Content $filePath
$version = $pomXml.project.version
在
GitHubRelease@
任务中使用变量:
tag: $(version)
这将获取不带 -SNAPSHOT 的版本并将其保存在变量中
versionFromPom
:
steps:
- bash: echo "##vso[task.setvariable variable=versionFromPom]$(cat ./pom.xml | grep -m 1 "<version>" | grep -Po '<version>\K\d{1,}\.\d{1,}\.\d{1,}')"