在 Github Actions 中获取 Maven 项目版本

Posted

技术标签:

【中文标题】在 Github Actions 中获取 Maven 项目版本【英文标题】:Getting Maven Project version within Github Actions 【发布时间】:2020-12-18 05:22:28 【问题描述】:

我正在尝试获取我的 maven 项目的版本作为部署过程的一部分,但我似乎在命令的输出中遇到了错误。有什么想法吗?

我的 pom.xml 插件中有 Maven 帮助。

这是我正在运行的步骤:

 - name: Get version
        run: |
          VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout )
          echo "::set-output name=version::$VERSION"
        id: get_version

这是输出(注意:我在这里删除了 -q 以便我可以看到输出)。请注意,默认的项目是我正在寻找的。我正在尝试将 v0.1 作为我的输出!

[INFO] No artifact parameter specified, using 'com.xyz:abc-123:war:v0.1' as project.
[INFO] 
null object or invalid expression
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13.569 s
[INFO] Finished at: 2020-08-29T13:52:22Z
[INFO] ------------------------------------------------------------------------

我正在使用帮助 3.2.0

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-help-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>

【问题讨论】:

您配置使用哪个版本的 maven-help-plugin?除此之外,为什么要使用v1.0 而不是1.0 这么奇怪的版本? 也许尝试使用类似这样的东西而不是插件的***.com/a/26514030 这能回答你的问题吗? How to get Maven project version to the bash command line Ed -- 您的第一个链接最终与我最初拥有的命令一样有效。最终归结为脚本中的错误排序。 【参考方案1】:

原来问题不在于命令,而在于我的命令。我最初并没有在第一条评论中粘贴这个,但我有一个步骤需要手动安装 jars(是的,这些应该在某个时候发布到某种内部包管理器......)。

一旦我将手动库步骤放在版本步骤之前,一切都会顺利执行。

      - name: Install manual libraries
        run: |
          mvn install:install-file -Dfile=lib/xyz.jar -DgroupId=com.xyz-DartifactId=xyz -Dversion=8.3.0 -Dpackaging=jar

      - name: Get version
        run: |
          VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout )
          echo "::set-output name=version::$VERSION"
        id: get_version

【讨论】:

【参考方案2】:

还有这种方法使用mvn exec 目标和set-output variable definition:

  - name: Extract Maven project version
    run: echo ::set-output name=version::$(mvn -q -Dexec.executable=echo -Dexec.args='$project.version' --non-recursive exec:exec)
    id: project

  - name: Show extracted Maven project version
    run: echo $ steps.project.outputs.version 

【讨论】:

【参考方案3】:

如果您只需要在工作的后续步骤中使用该版本,那么您可以在GITHUB_ENV 上将其设置为environment variable,并通过$ env.var_name 访问它。例如:

  - name: Set Release version env variable
    run: |
      echo "RELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV

  - name: Create Release
    id: create_release
    uses: actions/create-release@v1
    env:
      GITHUB_TOKEN: $ secrets.GITHUB_TOKEN 
    with:
      tag_name: $ env.RELEASE_VERSION 
      release_name: Release $ env.RELEASE_VERSION 
      draft: false
      prerelease: false

【讨论】:

以上是关于在 Github Actions 中获取 Maven 项目版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Github Actions 中获取 SECRETS 的值?

GitHub Actions API:获取查看工作流运行历史记录

我想从 Github Actions 中的 pom.xml 获取项目版本

如何从 GitHub Actions 获取我的日志文件?

在 Github Actions 中使用 Powershell 的输出

在 GitHub Actions 中添加基于日期的标签