在.gitlab-ci.yml中设置一个变量,该变量从pom中读取artifactId的名称

时间:2019-07-12 14:25:55

标签: maven gitlab-ci

在.gitlab-ci.yml内部,我们定义了一个变量(这只是项目的artifactId名称)ARTIFACT_ID: myMicroservice-1

此变量ARTIFACT_ID发送到常规微服务,该微服务具有要发布/部署docker等的所有脚本。

如何直接从POM文件读取此变量?

pom:

<artifactId>myMicroservice-1</artifactId>

.gitlab-ci.yml:
variables:
  SKIP_UNIT_TESTS_FLAG: "true"
  ARTIFACT_ID: myMicroserverName
  IS_OSL: "true"
  KUBERNETES_NAMESPACE: test

3 个答案:

答案 0 :(得分:1)

这是用于从pom中获取信息的脚本,在本例中为artifactId:

    - export ARTIFACT_ID=$(mvn exec:exec -q -Dexec.executable=echo -Dexec.args='${project.artifactId}')
    - if [[ "$ARTIFACT_ID" == *finishWithWhatEverName]]; then export variable2="false"; else export variable2="true"; fi

然后,您可以将variable2设置为所需的everyEver值。

答案 1 :(得分:0)

这是我们的工作方式。

根据pom.xml的XPath提取值。
我们使用xmllint中的libxml2-utils工具,但是还有其他各种工具。
然后将值作为环境变量保存在文件中,该文件作为工件传递给其他GitLab作业。

stages:
  - prepare
  - build

variables:
  VARIABLES_FILE: ./variables.txt  # "." is required for sh based images
  POM_FILE: pom.xml

get-version:
  stage: prepare
  image: ubuntu
  script:
    - apt-get update
    - apt-get install -y libxml2-utils
    - APP_VERSION=`xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' $POM_FILE`
    - echo "export APP_VERSION=$APP_VERSION" > $VARIABLES_FILE
  artifacts:
    paths:
      - $VARIABLES_FILE

build:
  stage: build
  image: docker:latest
  script:
    - source $VARIABLES_FILE
    - echo "Here use $APP_VERSION as you like"

答案 2 :(得分:0)

我尝试了Angel的解决方案,但出现了错误:

/bin/bash: line 87: mvn: command not found

最后,当我使用以下方法提取标记值时,我成功了:

- export ARTIFACT_ID=$(cat pom.xml | grep "<artifactId>" | head -1 | cut -d">" -f2 | cut -d"<" -f1 | awk '{$1=$1;print}')