记录一次Jenkins构建任务的坑

场景

描述下当时的场景,我在项目根目录创建了一个 deploy.sh 脚本,

脚本中完成给脚本赋执行权限、拷贝公共配置文件(application-common.yml)到各服务目录、停止服务、启动新服务这一系列操作,

但 Jenkins 构建完总是有两三个任务起不来,奇怪的是,我手动执行 deploy.sh 脚本就没问题。

排查&分析

后面排查起来,那些没有启起来的服务是因为没有公共配置文件(application-common.yml),

巧合的是,那些能起起来的服务,在项目构建时,就把公共配置文件(application-common.yml)打到它们服务目录里了,

当时为了快速解决这个问题,我统一了 pom.xml 中的打包配置,将公共配置文件(application-common.yml)都打包到各服务目录里,

这个问题就解决了。

复现当时的场景,我创建了下面这个 Jenkins 任务,这个任务会创建一个文件夹,并执行拷贝配置文件的脚本。

拷贝配置文件的脚本的内容如下

shell 复制代码
#!/bin/bash

if cp ./config/config_stop.sh ./system/; then
    echo "配置拷贝成功"
else
    echo "配置拷贝失败"
    exit 0
fi

构建一下,成功了

看下 system 文件夹呢,文件并没有被拷贝进来

这是因为执行脚本所在的位置是当前用户所在的目录(root 用户是在 /root),不会因为下面这两个地方的设置而更改

(Jenkins 任务页)

(服务器配置页)

如下,在脚本中做个测试,验证一下当前执行脚本所在的路径,可见执行目录是 /root

解决

解决办法很简单,要么脚本中使用绝对路径,要么在脚本执行的第一行加 cd 命令,切换到指定目录

shell 复制代码
#!/bin/bash

# 切换到项目所在目录
cd /home/projects

if cp ./config/config_stop.sh ./system/; then
    echo "配置拷贝成功"
else
    echo "配置拷贝失败"
    exit 0
fi

点构建,这回 OK 了,文件能拷贝到 system 目录里了

相关推荐
汤姆yu13 分钟前
基于springboot+vue的企业OA办公系统
java·spring boot·后端·oa办公
南归北隐18 分钟前
Spring AI Alibaba Graph框架实现RAG私有知识库问答
java·后端·spring·spring ai·java rag实现
从琳开始98932 分钟前
[JavaEE]多线程初阶(下篇)------多线程案例(单例模式,阻塞队列,线程池,定时器)
java·单例模式·java-ee
乌暮36 分钟前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful
java1234_小锋37 分钟前
Spring Boot 4.0 官宣:弃用 Undertow
java·spring boot·后端
jyOverQ40 分钟前
Redis 主从复制、Sentinel 和 Cluster 到底有什么区别?
java·redis·sentinel
青春逝如流水1 小时前
Java 线程在内存模型(JMM)与 JVM 实现:规范与落地的多元路径
java·开发语言·jvm·多线程·ai文章
wangbing11253 小时前
springboot应用关闭时触发动作
java·spring boot·后端
weixin_460443566 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w9 小时前
什么是AOP
java