Maven GITLAB-CI:仅当pom版本是快照或git标记时才部署到开发人员

Maven GITLAB-CI:仅当pom版本是快照或git标记时才部署到开发人员,maven,gitlab,gitlab-ci,Maven,Gitlab,Gitlab Ci,我正在使用gitlab管道将maven构建的WAR文件部署到tomcat 我只想在版本是快照或提交是git标记时部署到DEV。我尝试过使用规则和仅/除 我现在有一个问题: Deploy to DEV: rules: - if: $CI_COMMIT_TAG environment: name: DEV on_stop: Undeploy from DEV variables: GIT_STRATEGY: no

我正在使用gitlab管道将maven构建的WAR文件部署到tomcat

我只想在版本是快照或提交是git标记时部署到DEV。我尝试过使用规则仅/除

我现在有一个问题:

Deploy to DEV:
    rules:
        - if: $CI_COMMIT_TAG
    environment:
        name: DEV
        on_stop: Undeploy from DEV
    variables:
        GIT_STRATEGY: none
这种方法是有效的,它只在提交了标记的情况下部署该部分。但是,如何确保它是快照呢?

如中所述,主要困难在于:

在创建管道之前,将对提供的每个表达式求值

因此,我认为我们不能使用
WAR\u版本
环境变量来创建(或不创建)一个“Deploy to DEV”作业的管道。因此,一个可能的解决办法可能是:

.xmllint:
  image: "registry.gitlab.com/ebaque/spring-sample/alpine-xmllint:latest"

Deploy to DEV:
  stage: deploy
  extends: .xmllint
  script: 
    - WAR_VERSION=$(cat pom.xml | sed '2 s/xmlns=".*"//g' | xmllint --xpath 'string(//project/version)' -)
    - if ! [[ $WAR_VERSION =~ .*SNAPSHOT ]] || [[ -z $CI_COMMIT_TAG ]]; then exit 0; fi
    - ...
我们可以利用
xmllint
来解析
pom.xml
文件,并获得
version
值。然后我们可以使用正则表达式来检查这个字符串中是否有
快照
xmllint
无法处理
pom.xml
中的名称空间,因此我必须在解析文件之前去掉它的值

如果没有(或者如果这不是一个
$CI\u COMMIT\u标记
),那么我们将退出作业,或者显示一条消息,以便部署不会自动失败(此时由您决定)。这不是很好,因为工作总是被创造出来的,但这是一种方法

仅供参考,这里是我为示例中使用的图像编写的Dockerfile:

FROM alpine:latest

RUN apk add --no-cache libxml2 libxml2-utils bash

我唯一没有在这里测试的是
|[[$CI_COMMIT_TAG]]
,因此您可能需要修复
if
语句的这部分。

感谢您花时间。我真的很感激。不过,这将创造就业机会。如果版本不是快照或未标记,我希望不创建作业。此外,我是否可以使用“预”阶段而不是构建阶段中的作业?我是否可以不使用变量:而不是导出bash变量?不幸的是,此解决方案建议不起作用。即使是快照,也不会创建新作业!