Maven GITLAB-CI:仅当pom版本是快照或git标记时才部署到开发人员
我正在使用gitlab管道将maven构建的WAR文件部署到tomcat 我只想在版本是快照或提交是git标记时部署到DEV。我尝试过使用规则和仅/除 我现在有一个问题: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
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变量?不幸的是,此解决方案建议不起作用。即使是快照,也不会创建新作业!