Jenkins构建maven任务
Jenkins部署
一、 安装启动Jenkins
安装jenkins需要jdk1.8环境
- 下载
方式1:离线war包
官网下载 https://www.jenkins.io/download/
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.274/jenkins.war
或wget https://updates.jenkins.io/download/war/2.274/jenkins.war
方式2:yum安装(失败)
yum -y install jenkins 报错No Presto metadata available for jenkins
- 启动
以linux平台启动离线jenkins.war为例
方式1:jar命令启动
nohup java -jar /home/jenkins.war --httpPort=8080 > output 2>&1 &
output为输出日志
方式2:tomcat启动
参考https://www.cnblogs.com/devtesters/p/4285967.html
- 登录
浏览器登录jenkins, http://ip:8080
jenkins相关文件在/root/.jenkins
- 更换插件源(可跳过)
sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' /root/.jenkins /updates/default.json
sed -i 's#http://www.google.com#https://www.baidu.com#g' /root/.jenkins /updates/default.json
重启jenkins生效
- 解锁jenkins
浏览器登录jenkins, http://ip:8080
根据页面提示解锁jenkins
安装推荐的插件
等待安装完成(某些插件安装失败也没关系)
创建管理员用户并保存
保存jenkins url
开始使用jenkins!
注意:
如果登录管理员账号提示密码错误,可尝试使用解锁密码/root/.jenkins/secrets/initialAdminPassword
二、 拉取svn代码
- 下载插件
Manage Jenkins>Manage Plugins>可选插件,下载Subversion
- 创建svn凭证
Manage Jenkins>Mange Credentials,此处需要svn账号密码
- 创建item
新建item,创建一个Freestyle project
- item配置
Discard old builds
如需要指定svn版本,则需给定参数
源码管理,需要svn地址、之前创建的svn凭证
构建触发器、构建环境、构建、构建后操作内容
保存
- 构建,拉取代码
查看构建情况
构建成功,拉取的代码在jenkins的workspace下
三、 maven本地仓库
下载apache-maven到/home/develop/apache-maven-3.6.3,配置settings.xml文件,注意本地仓库位置(自定义)
将目标maven下pom.xml放到服务器上,同级目录下执行
mvn install -X
拉取maven仓库到本地仓库。
四、 构建maven项目,打war包
需要maven环境,此处构建使用如下maven项目配置
- 下载插件
Manage Jenkins>Manage Plugins>可选插件,下载Maven、Config File Provider
- Maven配置
Manage Jenkins>Global Tool Configuration,此处的settings.xml是构建maven项目要用到的(开发提供)
注意:settings.xml中可定义仓库地址
Global Tool Configuration中,还需要配置jdk、maven地址
- 新建config file
该文件可替换svn内的配置文件并编译到war包中。
选择Manage Jenkins>Managed files,新增配置文件
- 创建item
新建item,创建一个Maven项目
- item配置
General配置:Discard old builds
源码管理
构建触发器
构建环境,加入配置文件
Add timestamps to the Console Output
构建前步骤
构建,Root POM注意pom.xml位置
Goals and options中填写clean install -X,可查看详细日志(-X)
保存
- 构建,打war包
Build Now,查看控制台输出
可以看到BUILD SUCCESS及相应构建内容
打war包成功,在item的target目录中EMS_Finein/target/EMS_Finein.war
Q&A
- 报错Could not find artifact xxx
如:
Failed to transfer Could not find artifact com.persagy:EMS_Finein_Parent:pom:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/)
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.persagy:EMS_Finein:[unknown-version]: Could not find artifact com.persagy:EMS_Finein_Parent:pom:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/) and 'parent.relativePath' points at wrong local POM @ line 6, column 10
原因:EMS_Finein_parent下pom.xml中<artifactId>EMS_Finein_Parent</artifactId>首字母大写,而文件夹名称EMS_Finein_parent未大写,导致找不到正确的jar包
如:
[ERROR] Failed to execute goal on project EMS_Finein_Communication: Could not resolve dependencies for project com.persagy:EMS_Finein_Communication:jar:1.0.0: Could not find artifact com.persagy:ems_Data:jar:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/) -> [Help 1]
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project com.persagy:EMS_Finein_Communication:jar:1.0.0: Could not find artifact com.persagy:ems_Data:jar:1.0.0 in nexus (http://192.168.101.18:8081/repository/maven-public/)
原因:EMS_Finein_Communication下pom.xml中ems_Data与服务器上http://192.168.101.18:8081/#browse/browse:maven-public的com.persagy.ems_data大小写不一致,导致找不到正确的jar包
解决方案:让开发更新svn,注意jar包名字
- tomcat启动成功,但war包无法运行
- ERROR: No such settings file /root/.jenkins/workspace/DM/ /home/develop/apache-maven-3.6.3/conf/settings.xml exists
原环境jdk 1.7,maven 3.6.1
现环境 jdk1.8,maven3.6.3
原因:EMS_Finein.war中缺少web.xml文件
解决方案:参考https://www.jianshu.com/p/de0177cac90a,让开发修改pom.xml,或者使用jenkins的post steps强行把web.xml放进tomcat的webapps/EMS_Finein/WEB-INF中
查看item配置-build-高级下面的maven settings file配置路径
五、 部署war到tomcat容器(热部署)
- 部署tomcat容器
下载tomcat并部署,注意保留tomcat下webapps/manager文件夹
修改tomcat下conf/tomcat-users.xml文件(约第44行),添加tomcat user内容:
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<user username="manager" password="manager" roles="manager-gui,manager-script"/>
修改tomcat下conf/server.xml,配置容器端口为8888
修改webapps/manager/META-INF/context.xml,设置(约第22行)allow="^.*$",即允许所有ip访问
开启tomcat,sh bin/ startup.sh
- 创建凭证
Manage Jenkins>Mange Credentials,此处需要填入上一步中tomcat user账号密码。
- 下载插件
Manage Jenkins>Manage Plugins>可选插件,下载Deploy to container
- 创建item及配置
参考第三章的item配置,部署到容器需要添加构建后操作
Tomcat URL填写tomcat所在地址(如图地址为jenkins本地ip)
- 构建,打war包并部署到tomcat中
Build Now,查看控制台输出
查看tomcat中webapps情况,可以看到war包和Context path均正确
Q&A
l 报错No wars found
ERROR: Step ‘Deploy war/ear to a container’ aborted due to exception:
java.lang.InterruptedException: [DeployPublisher][WARN] No wars found. Deploy aborted. %n
参考https://blog.csdn.net/qq_39826207/article/details/108629850,
解决方案:确保svn代码中pom.xml有打war包
修改Jenkins部署WAR/EAR files参数为**/*.war
l 报错java.io.FileNotFoundException: http://192.168.101.8:8888/manager/text/list
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [/root/.jenkins/workspace/EMS_Finein/EMS_Finein/target/EMS_Finein.war]
Caused by: java.io.FileNotFoundException: http://192.168.101.8:8888/manager/text/list
参考https://blog.csdn.net/qq_39826207/article/details/108635573
解决方案:修改tomcat下conf/tomcat-users.xml文件,确保正确创建user
保留tomcat下webapps/manager文件夹
l 报错The username you provided is not allowed to use the text-based Tomcat Manager
org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
参考https://blog.csdn.net/qq574280801/article/details/88667602
解决方案: 修改tomcat下conf/tomcat-users.xml文件,确保正确创建user
确保凭证tomcat user的账号密码正确
修改webapps/manager/META-INF/context.xml,设置allow="^.*$"
l 报错java.net.ConnectException: 拒绝连接 (Connection refused)
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [/root/.jenkins/workspace/EMS_Finein/EMS_Finein/target/EMS_Finein.war]
Caused by: java.net.ConnectException: 拒绝连接 (Connection refused)
解决方案:开启tomcat
六、 ssh部署文件到指定位置(推荐)
- 下载插件
Manage Jenkins>Manage Plugins>可选插件,下载Publish Over SSH
- 创建ssh server
Manage Jenkins>Configure System>Publish over SSH,新增SSH Server并填写相关信息,注意在SSH Server的高级中去掉“Disable exec”勾选
- 创建item(Finein_Sqlite)及配置
参考第三章的item配置(此处选择freestyle项目),创建Finein_Sqlite,部署到指定位置需要添加构建操作。
- 创建item(EMS_Finein)及配置
参考第三章的item配置,部署到指定位置需要添加post steps
部署war到tomcat_Finein所在路径并重启Finein(此处不需要构建后操作部署war到tomcat 容器)
- 创建item(Web_Finein)及配置
参考第三章的item配置(此处选择freestyle项目),创建Web_Finein,部署到指定位置需要添加构建操作。
部署Web_Finein到/home/develop/web所在路径并重启Web_Finein
- 构建,传输文件
先后构建Finein_Sqlite、EMS_Finien、Web_Finein,查看构建日志(以EMS_Finein为例)
在远程服务器上确认部署是否成功。
七、 Q&A
- jenkins传输文件却不执行命令
原因:创建publish over ssh的ssh server时,未给予执行权限
解决方案:Manage Jenkins>Configure System>Publish over SSH,在SSH Server的高级中去掉“Disable exec”勾选
解决方案:在Manage Jenkins>Configure System>Publish over SSH的SSH Server,高级信息中去掉Disable exec勾选
- publish over ssh只传输文件,不传文件夹
解决方案:在item配置中,修改ssh传输的Source files参数为Web_Finein/**
- 构建出现UNSTABLE,需查看日志具体分析
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
原因:参考https://blog.csdn.net/wangfei0904306/article/details/72780617
查看日志发现ssh没有传输文件,直接执行命令
Source files参数有误,不能用./ 开头表示相对路径
Remote directory可以用./ 开头表示相对路径
解决方案:在item配置中,修改ssh传输的Source files参数为Web_Finein/**
- 构建出现UNSTABLE,需查看日志具体分析
SSH: EXEC: STDOUT/STDERR from command [ll /home/develop/file/EMS_Finein] ...
SSH: EXEC: connected
bash: ll: command not found
可以看出jenkins远程ssh部署不支持命令 ll(ls -l的alias命令)
还有可能是ssh执行的命令不成功,注意命令正确即可
- 关于前端包的编译
- 报错 ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms]
参考https://blog.csdn.net/fen_fen/article/details/114844160
- Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "失败 - 在上下文[/DM]下部署应用程序,但是上下文启动失败
原因:war包部署后,启动失败(war包更新了,项目配置文件没更新,tomcat启动报错)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?