Jenkins构建maven任务

Jenkins部署

 

 

 

 

 

 

 

一、       安装启动Jenkins

安装jenkins需要jdk1.8环境

  1. 下载

方式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

  1. 启动

以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

  1. 登录

浏览器登录jenkins, http://ip:8080

jenkins相关文件在/root/.jenkins

  1. 更换插件源(可跳过)

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生效

  1. 解锁jenkins

浏览器登录jenkins, http://ip:8080

根据页面提示解锁jenkins

安装推荐的插件

等待安装完成(某些插件安装失败也没关系)

创建管理员用户并保存

保存jenkins url

开始使用jenkins!

 

注意:

如果登录管理员账号提示密码错误,可尝试使用解锁密码/root/.jenkins/secrets/initialAdminPassword

 

 

 

二、       拉取svn代码

  1. 下载插件

Manage Jenkins>Manage Plugins>可选插件,下载Subversion

 

 

  1. 创建svn凭证

Manage Jenkins>Mange Credentials,此处需要svn账号密码

 

  1. 创建item

新建item,创建一个Freestyle project

  1. item配置

Discard old builds

 

如需要指定svn版本,则需给定参数

 

源码管理,需要svn地址、之前创建的svn凭证

 

构建触发器、构建环境、构建、构建后操作内容

 

保存

  1. 构建,拉取代码

 

查看构建情况

 

构建成功,拉取的代码在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项目配置

 

  1. 下载插件

Manage Jenkins>Manage Plugins>可选插件,下载MavenConfig File Provider

 

 

  1. Maven配置

Manage Jenkins>Global Tool Configuration,此处的settings.xml是构建maven项目要用到的(开发提供)

 

注意:settings.xml中可定义仓库地址

 

Global Tool Configuration中,还需要配置jdk、maven地址

 

 

 

  1. 新建config file

该文件可替换svn内的配置文件并编译到war包中。

选择Manage Jenkins>Managed files,新增配置文件

 

 

  1. 创建item

新建item,创建一个Maven项目

 

  1. item配置

General配置:Discard old builds

 

源码管理

 

构建触发器

 

构建环境,加入配置文件

 

Add timestamps to the Console Output

 

构建前步骤

 

构建,Root POM注意pom.xml位置

Goals and options中填写clean install -X,可查看详细日志(-X)

 

 

保存

  1. 构建,打war包

Build Now,查看控制台输出

可以看到BUILD SUCCESS及相应构建内容

 

打war包成功,在item的target目录中EMS_Finein/target/EMS_Finein.war

 

 

 

Q&A

  1. 报错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包名字

  1. tomcat启动成功,但war包无法运行
  2. 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配置路径

 

 

 

 

五、       部署wartomcat容器(热部署)

  1. 部署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

 

  1. 创建凭证

Manage Jenkins>Mange Credentials,此处需要填入上一步中tomcat user账号密码。

 

  1. 下载插件

Manage Jenkins>Manage Plugins>可选插件,下载Deploy to container

 

  1. 创建item及配置

参考第三章的item配置,部署到容器需要添加构建后操作

 

Tomcat URL填写tomcat所在地址(如图地址为jenkins本地ip)

  1. 构建,打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部署文件到指定位置(推荐)

  1. 下载插件

Manage Jenkins>Manage Plugins>可选插件,下载Publish Over SSH

 

  1. 创建ssh server

Manage Jenkins>Configure System>Publish over SSH,新增SSH Server并填写相关信息,注意在SSH Server的高级中去掉“Disable exec”勾选

 

  1. 创建item(Finein_Sqlite)及配置

参考第三章的item配置(此处选择freestyle项目),创建Finein_Sqlite,部署到指定位置需要添加构建操作。

 

 

 

 

  1. 创建item(EMS_Finein)及配置

参考第三章的item配置,部署到指定位置需要添加post steps

部署war到tomcat_Finein所在路径并重启Finein(此处不需要构建后操作部署war到tomcat 容器)

 

  1. 创建item(Web_Finein)及配置

参考第三章的item配置(此处选择freestyle项目),创建Web_Finein,部署到指定位置需要添加构建操作。

 

 

 

部署Web_Finein到/home/develop/web所在路径并重启Web_Finein

 

 

  1. 构建,传输文件

先后构建Finein_Sqlite、EMS_Finien、Web_Finein,查看构建日志(以EMS_Finein为例)

 

在远程服务器上确认部署是否成功。

 

 

 

 

 

 

七、       Q&A

  1. 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勾选

  1. publish over ssh只传输文件,不传文件夹

 

解决方案:在item配置中,修改ssh传输的Source files参数为Web_Finein/**

  1. 构建出现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/**

  1. 构建出现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执行的命令不成功,注意命令正确即可

  1. 关于前端包的编译

 

  1. 报错 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

 

  1. Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "失败 - 在上下文[/DM]下部署应用程序,但是上下文启动失败

原因:war包部署后,启动失败(war包更新了,项目配置文件没更新,tomcat启动报错)

 

posted @   huangyn  阅读(601)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示