【问题标题】:Read version of project in yaml file from pom.xml in azure-pipelines从 azure-pipelines 中的 pom.xml 读取 yaml 文件中的项目版本
【发布时间】:2019-09-23 21:06:37
【问题描述】:

我有一个 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。我想更改它集中在一处,随处变化。

【问题讨论】:

  • YAML 规范中没有提到自动生成。可能是 azure-pipelines 基于从 YAML 文档加载的数据通过解释其标量来实现类似自动生成的功能,但将其描述为“自动生成的 YAML 文件”与编写“生成的 ASCII 文件”一样不正确

标签: xml azure-devops pom.xml azure-pipelines


【解决方案1】:

您可以创建一个 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)

【讨论】:

  • 嗨,我似乎没有得到任何好的结果,我总是在 Select-String 上得到一个错误,而我的版本没有任何帮助?我将它们添加到一个文件中并在之后阅读它
  • $filePath 是否正确?你能运行Write-Host $filePath 并检查结果吗?
  • 好的,非常感谢你,但问题是我从脚本中什么也得不到,我也在 ubuntu 机器上,不能现场试用:/ 文件路径也是正确的,因为我设法打印了第一个我的 pom.xml 文件的行
  • 第一行的结果是什么?可以分享一下吗?
  • 只是 pom.xml 我找到了一个更好的脚本 ` [xml]$pomXml = Get-Content .\pom.xml # version Write-Host $pomXml.project.version $version= $pomXml.project.version Write-Host "##vso[task.setvariable variable=version]$version"` 运行良好
【解决方案2】:

所以我想出了一个脚本来解决我的问题并读取所有 pom.xml 中的&lt;version&gt;1.14.1&lt;/version&gt;

这是一个 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 获取版本的方式

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 2023-03-20
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多