如何 运行 github-action 条件基于 maven pom 版本?

How to run a github-action conditional based on the maven pom version?

我们正在尝试将 CI 从 Jenkins 移动到 Maven 项目的 Github 操作。 Maven 存储库允许将 POM 版本精确地推送一次,除非版本以 -SNAPSHOT 结尾。 因此,在我们当前的流程中,我们区分推送到 develop,仅当项目版本以 -SNAPSHOT 结尾时才推送到 Maven 存储库,而推送到 main 时,我们仅推送到 Maven,如果NOT-SNAPSHOT.

结尾

在 Jenkins 中它看起来像这样:

stage("on Merge to develop") {
            when {
                anyOf {
                    branch "develop"
                }
                expression {
                    return env.POM_VERSION ==~ /.*-SNAPSHOT/
                }
                not {
                    changeRequest()
                }
            }
            steps {
                echo "======== Merge into Develop ========"
            }
        }
        stage("on publish release (merge to main)") {
            when {
                anyOf {
                    branch "master"
                    branch "main"
                }
                not {
                    expression {
                        return env.POM_VERSION ==~ /.*-SNAPSHOT/  
                    }
                }
                not {
                    changeRequest()
                }
            }
            steps {
                echo "======== Merge into Master & PUSH ========"
            }
       }

在 GitHub 操作中,我们知道如何 运行 特定分支上的操作,但我们如何:

当然 - 如果有更好的方法,我们会改造我们的流程

我们想通了:

  • 要将版本添加到环境中,请使用 mvn help:evaluate
  • 步骤中的条件使用 if: 指令和 endsWith(...)

一个完整的例子:推送到 master,如果不是快照则部署:

name: Build on master

on:
  push:
    branches:
      - main
      - master

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
          server-id: JNX
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Cache Maven packages
        uses: actions/cache@v2
        with:
         path: ~/.m2
         key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
         restore-keys: ${{ runner.os }}-m2
      - name: Extract Project version
        id: project
        run: echo ::set-output name=version::$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
      - name: Build with Maven deploy
        if:  ${{ !endsWith(steps.project.outputs.version, '-SNAPSHOT') }}
        run: mvn --batch-mode --update-snapshots clean deploy
        env:
          MAVEN_USERNAME: ${{secrets.MAVEN_USERNAME}}
          MAVEN_PASSWORD: ${{secrets.MAVEN_TOKEN}}