如何 运行 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 操作中,我们知道如何 运行 特定分支上的操作,但我们如何:
- 将 POM 版本放入环境(或其他变量)中?
- 有条件运行根据POM版本的步骤?
当然 - 如果有更好的方法,我们会改造我们的流程
我们想通了:
- 要将版本添加到环境中,请使用
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}}
我们正在尝试将 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 操作中,我们知道如何 运行 特定分支上的操作,但我们如何:
- 将 POM 版本放入环境(或其他变量)中?
- 有条件运行根据POM版本的步骤?
当然 - 如果有更好的方法,我们会改造我们的流程
我们想通了:
- 要将版本添加到环境中,请使用
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}}