You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式将指定Maven构建产物复制到Dockerfile目录?

问题:使用正则匹配复制Maven主JAR包并在未找到时抛出错误

我正在构建Maven项目,构建后target目录结构如下:

target
|____  my-application-1.0.0-SNAPSHOT.jar
|____  my-application-1.0.0-SNAPSHOT-javadoc.jar
|____ my-application-1.0.0-SNAPSHOT-sources.jar
|____ my-application-1.0.0-SNAPSHOT.jar.original

我需要将应用容器化,在Jenkinsfile中仅把主JAR包(my-application-1.0.0-SNAPSHOT.jar)复制到Dockerfile所在目录。已编写匹配主JAR的正则表达式,但cp命令不支持正则匹配。

尝试过用find命令实现复制,但它在未找到文件时不会抛出错误,而我需要这种场景下能主动报错的方案。

现有Jenkinsfile代码:

def versionRegex = "[0-9]{2}\\.[0-9]{1,2}\\.[0-9]+(-(a[0-9]+-[0-9]{2}|SNAPSHOT|m[0-9]{2}|rc[0-9]{2}|[A-Z]+[a-zA-Z]*))?"

sh """
find ./path/to/target -type f -regextype posix-egrep \
                    -regex './path/to/target/my-application-${versionRegex}\.jar' \
                    -exec cp {} ./path/to/dockerfile \; 
"""

解决方案

方案1:统计匹配文件数,无匹配则报错

通过将find结果存入数组,检查数组长度判断是否找到文件,同时处理多匹配的异常情况:

def versionRegex = "[0-9]{2}\\.[0-9]{1,2}\\.[0-9]+(-(a[0-9]+-[0-9]{2}|SNAPSHOT|m[0-9]{2}|rc[0-9]{2}|[A-Z]+[a-zA-Z]*))?"

sh """
# 将匹配结果存入数组
MATCHED_FILES=(\$(find ./path/to/target -type f -regextype posix-egrep \
                    -regex './path/to/target/my-application-${versionRegex}\\.jar'))

# 检查是否找到文件
if [ \${#MATCHED_FILES[@]} -eq 0 ]; then
    echo "错误:未找到匹配的主JAR包" >&2
    exit 1
fi

# 检查是否存在多个匹配文件(Maven构建通常仅一个主JAR)
if [ \${#MATCHED_FILES[@]} -gt 1 ]; then
    echo "错误:找到多个匹配的JAR包:\${MATCHED_FILES[*]}" >&2
    exit 1
fi

# 复制文件到目标目录
cp "\${MATCHED_FILES[0]}" ./path/to/dockerfile
"""

这个方案逻辑清晰,能精准处理未找到文件、多文件匹配两种异常场景,符合Jenkins流水线的错误捕获需求。

方案2:用glob匹配简化操作(版本规则适配时)

如果版本号格式可以通过shell glob表达式描述,可直接用cp配合条件判断,避免正则的复杂处理:

# 注意:需将原versionRegex转换为对应的glob格式,示例针对SNAPSHOT版本
def versionGlob = "[0-9][0-9].[0-9]*.[0-9]*-SNAPSHOT"

sh """
JAR_PATH="./path/to/target/my-application-${versionGlob}.jar"

if [ ! -f "\$JAR_PATH" ]; then
    echo "错误:未找到主JAR包 \$JAR_PATH" >&2
    exit 1
fi

cp "\$JAR_PATH" ./path/to/dockerfile
"""

此方案更简洁,但仅适用于版本规则能用glob覆盖的场景。


内容的提问来源于stack exchange,提问作者Manu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:25:41