Maven 从 Github Actions 发布版本

5

我想知道是否可以使用Github Actions在关闭一个里程碑后提交发布的提交。

以前我所做的是在我的本地计算机上提交mvn release:prepare && mvn release:perform,然后推送它。 但是,使用Github Actions,我希望可以从工作流本身自动化发布提交。

到目前为止,所有关于在Github Actions中使用Maven的教程都仅限于运行clean install或测试检查或部署,从未涉及发布。

有人在Github Actions中设置Maven发布方面有经验吗?谢谢


这个的第一个挑战是你需要执行一个非交互式发布。工作流程从哪里提取发布版本?https://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html - peterevans
相关 https://dev59.com/SlMH5IYBdhLWcg3w4VB5 - OneCricketeer
2
在 Github Actions 市场中,您可以找到一些模板,这是其中之一:https://github.com/marketplace/actions/maven-release 不确定这是否是您要寻找的。 - Javier Montón
2个回答

9
通过增加workflow_dispatch事件,您现在可以创建手动触发的GitHub Actions工作流程。此外,您还可以指定输入参数,GitHub将在UI中以表单元素的形式呈现。当使用Maven进行版本发布时,这一点尤其有用。
以下是操作步骤:
  1. 创建一个包含两个输入字段:releaseVersiondevelopmentVersion的新工作流。
on:
  workflow_dispatch:
    inputs:
      releaseVersion:
        description: "Default version to use when preparing a release."
        required: true
        default: "X.Y.Z"
      developmentVersion:
        description: "Default version to use for new local working copy."
        required: true
        default: "X.Y.Z-SNAPSHOT"
  1. 设置一个任务,使用给定的releaseVersiondevelopmentVersion来进行Maven版本发布。
jobs:
  release:
    runs-on: ubuntu-latest

    steps:
      # Checkout source code, set up Java, etc. Then...

      - name: Configure Git User
        run: |
          git config user.email "actions@github.com"
          git config user.name "GitHub Actions"

      - name: Maven Release
        run: mvn release:prepare release:perform -B -s .maven_settings.xml -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -DdevelopmentVersion=${{ github.event.inputs.developmentVersion }}
        env:
          CI_DEPLOY_USERNAME: ${{ secrets.CI_DEPLOY_USERNAME }}
          CI_DEPLOY_PASSWORD: ${{ secrets.CI_DEPLOY_PASSWORD }}

你必须在项目根目录下保存一个名为.maven_settings.xml的文件,其中包含usernamepassword信息,以便在下载或上传存储库中的构件之前进行身份验证。这些存储库在repositoriesdistributionManagement部分配置。

<settings>
  ...
  <servers>
    <server>
      <id>server.id</id>
      <username>${env.CI_DEPLOY_USERNAME}</username>
      <password>${env.CI_DEPLOY_PASSWORD}</password>
    </server>
  </servers>
</settings>

你可以在项目设置页面配置 CI_DEPLOY_USERNAMECI_DEPLOY_PASSWORD 两个密钥,这两个密钥都是加密的秘密变量
以下是一个完整的Maven发行版工作流程配置示例,供参考。

我该如何获取actions@github.com的密码?CI_DEPLOY_PASSWORD?我想通过ssh来完成。 - lak

1

您不需要手动声明服务器配置。我们可以简单地利用 actions/setup-java 来创建带有 server-id 的服务器配置。

      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '11'
          cache: 'maven'
          server-id: github

然后我们可以查看settings.xml文件

      - name: View settings.xml
        run: cat /home/runner/.m2/settings.xml

执行发布操作

      - name: Configure Git user
        run: |
          git config user.email "actions@github.com"
          git config user.name "GitHub Actions"
      - name: Publish JAR
        run: ./mvnw -B release:prepare release:perform
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接