Jenkins---01

什么是敏捷开发

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开

发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、

可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行

的小项目,并分别完成,在此过程中软件一直处于可使用状态。

什么是持续集成(CI

因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业

的持续集成工具来管理持续重复的工作。

一. 持续集成工具(CI)

1.1 Jenkins Hudson

1) Jenkins 是一个持续集成(CI)工具。它可以持续编译,运行你的代码;运行单元测试(UT)

或集成测试;将运行结果发送至邮件,或展示成报告。

2) Jenkins 起源于 Hudson。Hudson 在商业软件的路上继续前行,而 Jenkins 则作为开源软

件,从 hudson 分支出来。 因此现在的 jenkins 和 hudson 非常类似,但是随着二者各自的发

展,已经有了一些不同。

1.2 技术组合

Jenkins 可以整合 GitHub 或 Subversion Husband 也可以整合 GitHub 或 Subversion 二者

既然是同源的工具软件,操作和指导思想就是接近的

1.3 部署方式对比

JavaEE 项目部署方式对比

手动部署

git ->checkout-> war -> 部署

自动化部署

“自动化”的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员

使用的马上就是最新的应用程序。

搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。 对于程

序员的日常开发来说不会造成任何额外负担——自己把代码提交上去之后,服务器上运行的马

上就是最新版本——一切都发生在无形中。

下面我们讲带领大家一步一步搭建整套持续集成环境,这个操作过程只需要细心认 真即

可,没有任何难度。但是需要优秀的你具备以下前置知识:

Linux基本操作命令和VIM编辑器使用

Maven的项目构建管理

GitHub或SVN使用

二. 环境准备

1. jdk 17

2. tomcat

3. Jenkins.war

 2.1安装jdk

2.1.1 通过yum安装

自行查询安装即可

2.1.2 tar 包安装

 这里我们使用的jdk安装方式是通过准备好的tar包进行安装(可私我)

将准备好的tar包上传到我们虚拟机准备好的位置

解压tar包 

配置环境变量

打开配置文件

vim /etc/profile

\

修改配置文件

export JAVA_HOME=/opt/jdk/jdk-17.0.12
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH 

生效环境

source /etc/profile

查看版本

java -version

2.2 安装tomcat 

2.2.1 安装tomcat

将tomcat jar包上传 解压jar包即可

2.2.2 启动tomcat

sh apache-tomcat-10.1.30/bin/startup.sh

2.2.3 访问测试 

2.3 上传文件

使用git将想要上传的项目上传到gitee里面 具体的如何下载配置git 和 gitee注册 请自行准备

这里我是用的是目前最新版本的git

三. 安装jenkins

3.1 下载jenkins.war

Jenkins 的安装和设置icon-default.png?t=O83Ahttps://www.jenkins.io/zh/download/

将下载好的war包放到tomcat安装目录的 wabapps里面

访问页面

Tomcat路径下的/jenkis

自己的虚拟机ip地址

192.168.5.69:8080/jenkins

之后在虚拟机中访问页面中给到的配置文件位置复制密码进行登录

登录之后 按照下方图片进行使用 

3.2 安装git

3.2.1 命令安装

命令

 yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

3.2.2 tar包安装

解压tar包

tar -zxvf git-2.19.0.tar.gz 

进入git目录并安装

mkke prefix=/usr/java/git all

如果报错 

执行命令

安装 Expat 库 成功则不需要

yum install expat-devel 

 继续执行命令

make prefix=/usr/java/git install

配置环境变量

#打开配置文件

vim /etc/profile

#添加下方内容

export GIT_HOME=/usr/java/git

export PATH=$GIT_HOME/bin:$PATH

到此git就安装成功了 

3.3 安装maven

3.3.1 上传 并解压 tar包

 配置环境变量

#打开配置文件

vim /etc/profile

#添加下方内容

export MAVEN_HOME=/opt/jdk/apache-maven-3.8.8

export PATH=$MAVEN_HOME/bin:$PATH

#配置完之后记得重启环境服务

source /etc/profile

修改配置文件settings.xm

 找到配置文件 

配置阿里镜像 

可以使用自己电脑安装过的maven中的阿里镜像

<mirror>

<id>alimaven</id>

<name>aliyun maven</name>

<url>http://maven.aliyun.com/nexus/content/groups/public/</url>

<mirrorOf>central</mirrorOf>

</mirror>

找到虚拟机的配置文件 将下方这个位置的镜像改为虚拟机的 

下载插件w

mvn help:system

 

四. 使用Jenkins

4.1 允许用户注册

4.2 配置全局工具

配置 git maven

1. 配置
2. 配置jdk

往下扒拉 

3. 配置maven

继续扒拉 

4. 安装配置 git 
 安装git的插件

 查看 git 的可执行程序

whereis git

 

 配置git 

还进入上面配置的地方 这个时候就下方就可以添加git的配置了6

5. 安装maven插件

4.3 创建任务

注意 这里的配置需要准备好gett上传路径

之后再虚拟机里创建创建目录

#创建目录

mkdir /usr/java/test/ 

#进入目录之后创建sh文件

touch

 打卡配置文件 将下方配置信息复制到里面 修改为自己的ip地址即可

#! /bin/bash
echo "部署的目录和项目名称"
DIR="/usr/java/project"
projectName="demo"
echo "待部署的应用服务器"
server_ips="192.168.5.69"
#所有的参数列表
for server_ip in ${server_ips[@]}
do
echo "进行备份操作"
mkdir -p $DIR/backup/${projectName}
  if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
    mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar
  fi
echo "拷贝jar包到目标服务器的目录下"
cp ${WORKSPACE}/target/*.jar $DIR/${projectName}/${projectName}.jar

echo "目标服务器:$DIR/${projectName}/${projectName}.jar"

echo "连接进行发布操作"
#mv /usr/java/test/demo.jar $DIR/backup/${projectName}/${projectName}.jar
echo "开始关闭jar"
l=`ps -ef|grep demo.jar|grep -v grep|awk '{print $2}'`
for i in $l
do
 kill -9 $i
done
sleep 5s
echo "启动jar"
nohup java -jar $DIR/${projectName}/${projectName}.jar --server.port=9999 > release_out.log 2>&1 &start_ok=false
done
01:42:32 Started by user Admin 01:42:32 Running as SYSTEM 01:42:32 Building on the built-in node in workspace E:\Jenkins\workspace\UE\5.5.4\Echo_BuildForUGS_01 01:42:32 Executor number at runtime: 0 01:42:32 ... p4 login + 01:42:32 ... p4 login -s + 17:33:14 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:14 ... p4 info + 17:33:14 ... p4 info + 17:33:14 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:15 ... p4 client -i + 17:33:15 ... View: + 17:33:15 ... p4 counter change + 17:33:15 ... p4 changes -m1 -ssubmitted //Jenkins-Build-Echo-UE-5.5.4/...@650 + 17:33:16 P4: found 650 revision in //Jenkins-Build-Echo-UE-5.5.4/...@650 17:33:16 ... p4 changes -m1 -ssubmitted //Jenkins-Build-Echo-UE-5.5.4/...@1,650 + 17:33:19 P4: found 650 revision in //Jenkins-Build-Echo-UE-5.5.4/...@1,650 17:33:19 ... p4 repos -C + 17:33:19 P4: builds: 650 17:33:19 ... p4 login + 17:33:19 ... p4 login -s + 17:33:19 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:19 ... p4 info + 17:33:19 ... p4 info + 17:33:19 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:19 17:33:19 P4 Task: establishing connection. 17:33:19 ... server: ssl:192.168.2.4:1668 17:33:19 ... node: a849e4696f69 17:33:19 Building on Node: built-in 17:33:19 ... p4 login + 17:33:19 ... p4 login -s + 17:33:19 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:19 ... p4 info + 17:33:19 ... p4 info + 17:33:19 ... p4 client -o Jenkins-Build-Echo-UE-5.5.4 + 17:33:19 17:33:19 P4 Task: establishing connection. 17:33:19 ... server: ssl:192.168.2.4:1668 17:33:19 ... node: a849e4696f69 17:33:19 17:33:19 P4 Task: reverting all pending and shelved revisions. 17:33:19 ... p4 revert E:\Jenkins\workspace\UE\5.5.4\Echo_BuildForUGS_01/... + 17:33:19 P4 Task: attempt: 1 01:33:22 ERROR: P4: Task Exception: hudson.AbortException: P4JAVA: Error(s): 01:33:22 Path '/E:\Jenkins\workspace\UE\5.5.4\Echo_BuildForUGS_01/...' is not under client's root 'E:\Jenkins\workspace\UE\5.5.4\Echo_BuildForUGS_01'. 01:33:22 01:33:25 Finished:
最新发布
03-26
<think>好的,我现在需要解决用户在Jenkins中遇到的P4错误:“revert path not under client root”。首先,我得理解这个错误的含义。根据Perforce的文档,当尝试执行的操作涉及到不在客户端工作区根目录下的路径时,就会出现这个错误[^1]。也就是说,用户可能在配置Jenkins的P4插件时,指定的文件路径超出了客户端定义的根目录范围。 接下来,我应该检查几个可能的配置错误。首先是客户端的根目录设置。用户需要确认在Jenkins的P4插件配置中,客户端(Workspace)的根目录是否正确。这通常在Jenkins的“Manage Jenkins-> “System Configuration” -> “Perforce”部分设置。如果根目录设置不正确,比如路径拼写错误或者目录结构不符,就会导致此问题。 然后,查看工作区视图(View)的映射是否正确。Perforce客户端的工作区视图定义了哪些 depot 路径被映射到本地的哪个目录。如果视图中的映射不正确,例如路径映射超出了客户端的根目录,或者使用了错误的通配符,就会触发这个错误。例如,假设客户端根目录是`/home/user/workspace`,而视图中有一条映射是`//depot/project/... //client_workspace/...`,这样是正确的。但如果映射写成`//depot/... //client_workspace/project/...`,可能导致路径超出根目录的范围[^2]。 还要检查Jenkins任务中的文件路径参数。用户可能在构建任务中指定了某个文件或目录的路径,而这个路径相对于客户端根目录来说是无效的。例如,如果客户端根目录是`/jenkins/workspace`,而任务中尝试操作`/jenkins/workspace/../other_dir`,这样的相对路径可能会解析到根目录之外,从而引发错误。 另外,权限问题也不容忽视。虽然错误提示直接指向路径问题,但有时用户权限不足可能导致客户端配置无法正确读取,进而引发类似错误。需要确认运行Jenkins服务的用户(如jenkins用户)是否有权限访问客户端根目录及其所有子目录。 可能的解决方案包括:首先,验证并修正客户端的根目录设置,确保与实际的本地路径一致。其次,检查工作区视图的映射,确保所有depot路径都正确映射到客户端根目录下的子目录。如果任务中使用了动态生成的路径,需要添加校验步骤,确保路径不会超出根目录。此外,可以尝试在Perforce插件中使用绝对路径而非相对路径,避免路径解析错误。 如果用户仍然遇到问题,建议启用Perforce插件的详细日志,查看具体的路径解析过程,这有助于定位是哪个步骤的路径配置错误。同时,参考Perforce的官方文档和Jenkins插件的说明文档,确认所有配置项是否符合要求。 最后,考虑是否有其他因素,比如多个客户端配置的冲突,或者Jenkins节点配置问题(在分布式构建环境下,不同节点的路径可能不一致)。需要确保所有相关节点上的客户端配置都正确无误。</think>### Jenkins P4 "revert path not under client root" 错误解决方案 #### 错误原因 该错误表明 Jenkins 的 Perforce 插件尝试操作的路径超出了客户端定义的根目录范围[^1]。常见原因包括: 1. **客户端根目录配置错误** 2. **工作区视图(View)映射不匹配** 3. **任务中使用了相对路径或非法路径符号** 4. **权限问题导致路径解析异常** --- #### 解决步骤 1. **检查客户端根目录配置** - 进入 Jenkins 全局配置:`Manage Jenkins > Configure System > Perforce` - 确认 `Client Workspace` 的根目录路径与实际物理路径完全一致 - 示例正确配置: ```plaintext Client name: jenkins-client-prod Root: /opt/jenkins/workspaces/p4_prod # 必须是绝对路径 ``` 2. **验证工作区视图映射** - 在 Perforce 客户端执行 `p4 client` 命令查看视图 - 确保映射规则不包含越界路径: ```plaintext //depot/source/... //jenkins-client-prod/source/... # 正确:映射到客户端根目录下 //depot/docs/... //jenkins-client-prod/../docs/... # 错误:`..` 会跳出根目录 ``` 3. **检查任务中的路径参数** -Jenkins 任务的 `Perforce` 配置模块中: - 避免使用 `../` 等相对路径符号 - 推荐使用基于客户端根目录的绝对路径: ```plaintext ✔️ 正确://depot/source/build.sh ❌ 错误:../../depot/source/build.sh ``` 4. **添加路径校验步骤(Python 示例)** ```python import os client_root = "/opt/jenkins/workspaces/p4_prod" target_path = os.path.abspath(os.path.join(client_root, "subdir/file.txt")) if not target_path.startswith(client_root): raise ValueError(f"路径 {target_path} 超出客户端根目录!") ``` 5. **启用详细日志排查** -Jenkins 系统配置中增加日志级别: ```plaintext org.jenkinsci.plugins.p4 = FINE ``` - 日志会显示类似关键信息: ```plaintext [P4] Reverting files at: //depot/outside/path [P4] Client root: /opt/jenkins/workspaces/p4_prod ``` --- #### 进阶排查 - **权限验证** 使用 `p4 protects` 命令确认 Jenkins 服务账号对目标路径有 `write` 权限: ```bash p4 protects //depot/source/... # 输出应包含:write user jenkins * //depot/source/... ``` - **多节点环境同步** 在分布式构建环境中,确保所有 Jenkins agent 节点的客户端配置一致: ```plaintext Agent1 路径: /opt/jenkins/workspaces/p4_prod Agent2 路径: /mnt/shared/workspaces/p4_prod # 必须同步修改 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值