maven - GITLAB-CI:仅当 pom 版本是快照或其 git 标签时才部署到 DEV
问题描述
我正在使用 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_VERSION
环境变量来创建(或不创建)“部署到 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
值。然后我们可以使用正则表达式来检查这个字符串是否SNAPSHOT
在其中。xmllint
没有使用 中的命名空间pom.xml
,所以我必须在解析文件之前去掉它的值。
如果没有(或者如果这不是 a $CI_COMMIT_TAG
),那么我们退出作业,或者我们显示一条消息,以便部署不会静默失败(此时由您决定)。这不是很好,因为工作总是被创造出来的,但这是一种实现方式。
仅供参考,这里是我为示例中使用的图像编写的 Dockerfile:
FROM alpine:latest
RUN apk add --no-cache libxml2 libxml2-utils bash
我在这里唯一没有测试的是|| [[ $CI_COMMIT_TAG ]]
,因此您可能需要修复这部分if
语句。
推荐阅读
- c# - 按下主页按钮或返回主菜单时取消协程
- html - 带有指令的AngularJS表行
- c# - 如何在 regedit 中知道有关 DirectX 的 GPU 值?
- ios - 带有 Transporter App 状态模式的“导入错误”
- angularjs - 使用用户名 NO 电子邮件登录 Angular 和 Firebase
- python-3.x - 二进制数字:'-0b1' 代表什么?
- vba - 使用本地文件夹中的“.msg”项目
- python-3.x - 如何使用 nibabel 或 numpy 或其他方式更改医学体积数据中的 pixDim?
- php - 来自 HTML 表单的 PHP 多维数组
- c - 如何计算函数内部并使用数组将其传递给main