如何从GitLab CI/CD管道阶段读取Maven POM



我有下面的.gitlab-ci.yml文件,我想利用Maven POM来获得工件版本,并在调用工件REST API时使用它。

image: maven:3-jdk-8
stages:
- build
- test
- quality-scan
- quality-gate
- publish
before_script:
- echo "Start of CI/CD Pipeline"
Build:
stage: build
tags: 
- maven
artifacts:
paths:
- target/
script:
- echo "Cleaning workspace, compiling and packaging the application"
- mvn clean package -DskipTests
RunTests:
stage: test
tags: 
- maven
script:
- echo "Running tests"
- mvn test
StaticCodeAnalysis:
stage: quality-scan
tags: 
- maven
dependencies:
- Build
script:
- echo "Running SonarQube analysis"
- mvn sonar:sonar -Dsonar.host.url=$SONARQUBE_URL
QualityGateCheck:
stage: quality-gate
tags: 
- maven
script:
- echo "Checking Quality Gate"
PublishBinary:
stage: publish
tags: 
- maven
dependencies:
- Build
script:
- echo "Publishing to Artifactory"
- export PROJECT_VERSION=mvn -o help:evaluate 
- export ARTIFACTORY_PUBLISH_LOCATION="$ARTIFACTORY_URL/libs-release-local/$CI_PROJECT_PATH/$PROJECT_VERSION/$CI_PROJECT_NAME-$PROJECT-VERSION.jar"
- echo $ARTIFACTORY_PUBLISH_LOCATION
- curl -u $ARTIFACTORY_USER:$ARTIFACTORY_PASSWORD -X PUT $ARTIFACTORY_PUBLISH_LOCATION -T $CI_PROJECT_NAME

after_script:
- echo "End of CI/CD Pipeline"

在GitLab CI/CD中有没有一种简单的方法可以做到这一点?

我使用最新版本的GitLab和GitLab Runner。两者都在Ubuntu上,托管在Azure云中。

不知道Gitlab是否可以提供这样的功能,但您可能可以使用Maven帮助插件检索这些信息:

version=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.1:evaluate -Dexpression=project.version -q -DforceStdout)
jobname:
stage: stage
before_script:
- export "MAVEN_ID=$(mvn help:evaluate -Dexpression=project.id -q -DforceStdout)"
- >
IFS=: read -r MAVEN_GROUPID MAVEN_ARTIFACTID MAVEN_PACKAGING MAVEN_VERSION <<< ${MAVEN_ID}
script:
- >
echo -e "groupId: ${MAVEN_GROUPID}nartifactId: ${MAVEN_ARTIFACTID}nversion: ${MAVEN_VERSION}npackaging: ${MAVEN_PACKAGING}"
  • mvn help:evaluate -Dexpression=project.id -q -DforceStdout以以下格式打印工件识别信息:com.group.id:artifactid:packaging:version
  • 使用基于冒号(:(的IFS作为分隔符来解析MAVEN_ID变量,以获得常见的maven变量,如artifactId、groupId、version和package(解释(
  • 稍后,这些变量可以在代码中使用,例如用于回显值
  • IFS是一个bash特性,因此相应的GitLab运行程序应该安装bash

最新更新