如何根据 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 条件?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过父pom中的dependencyManagement强制maven依赖版本?