如何根据 maven pom 版本运行 github-action 条件?

Posted

技术标签:

【中文标题】如何根据 maven pom 版本运行 github-action 条件?【英文标题】:How to run a github-action conditional based on the maven pom version? 【发布时间】: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 版本有条件地运行步骤?

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何根据 maven pom 版本运行 github-action 条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 maven pom.xml 中正确定义插件版本?

在运行时获取 Maven 工件版本

如何通过父pom中的dependencyManagement强制maven依赖版本?

如何仅使用“版本 Maven 插件”检查***(pom-listed)包的更新?

如何根据pom.xml文件下载jar包

如何在运行时编辑 Maven POM?