【问题标题】:How to run a github-action conditional based on the maven pom version?如何根据 maven pom 版本运行 github-action 条件?
【发布时间】:2021-08-28 00:51:15
【问题描述】:

我们正在尝试将 CI 从 Jenkins 迁移到 Maven 项目的 Github 操作。 Maven 存储库允许将 POM 版本精确推送一次,除非版本以 -SNAPSHOT 结尾。 因此,在我们当前的流程中,我们区分推送到develop,仅当项目版本以-SNAPSHOT 结尾时才推送到Maven 存储库,推送到main,如果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 操作中,我们知道如何在特定分支上运行操作,但我们如何:

  • 将 POM 版本放入 env(或其他变量)中?
  • 根据 POM 版本有条件地运行步骤?

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

【问题讨论】:

    标签: maven jenkins github-actions


    【解决方案1】:

    我们想通了:

    • 要将版本导入环境,请使用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}}
    

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2017-02-22
      相关资源
      最近更新 更多