centos7中jenkins的安装与配置(超详细)
Lv2023 2024-06-17 08:07:04 阅读 52
Jenkins官网:https://jenkins.io/ 或 https://www.jenkins.io/zh/download/
Jenkins官网文档:https://www.jenkins.io/zh/doc/
jenkins安装包:http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
jenkins插件库: https://plugins.jenkins.io/
清华镜像:http://updates.jenkins-ci.org/download/war/
准备工作:java环境和maven (可以看我Java开发环境部署中的对应文章)
maven:
https://blog.csdn.net/m0_58943936/article/details/134942539
jdk:
https://blog.csdn.net/m0_58943936/article/details/134604149
(我安装的jenkins需要jdk11版本以上, 所以需要安装对应的jdk版本)
(旧版本支持jdk8版本的我试过 , git,ssh插件一直安装不上,从插件库导入也匹配不上, 就放弃了, 使用了新版本)
需要Java环境
需要maven
需要git
一:jenkins安装
1.官网下载Jenkins war包
我们选择2.426.1, 下载后, 上传到服务器
2.使用命令启动(端口号自行设置开放)
本文章(6模块)启动脚本实现开机自启动jenkins , 可以在jenkins成功后, 自行了解配置)
(进入jenkins.war包所在目录, 使用命令启动)
nohup java -jar jenkins.war --httpPort=16060 &
可以用如下限制Jenkins占用内存
-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m
3.浏览器打开http://你的服务器ip:16060/
注意: 配置安全组或者防火墙的记得放开端口16060,不然搜不到
4. 查看初始化密码(复制后填写到页面的管理员密码中)
cat /root/.jenkins/secrets/initialAdminPassword
5.启动如下
①:选择安装推荐的插件或者选择插件来安装
除非你非常明确的知道自己需要哪几种插件,不然就安装推荐的插件
(如果安装失败也别慌, 进入系统管理-> 插件管理 中可以自行安装/或卸载 对应插件)
输入用户名密码邮箱
配置访问地址(默认即可,也可按需更改):
点击开始使用jenkins 就可以使用jenkins了
二:插件
①:Git Parameter git参数
②:Localization: Chinese (Simplified) 简体中文包
③:SSH server ssh服务器
④:Build With Parameters 输入框式的参数(可选)
⑤:Persistent Parameter 下拉框式的参数(可选)
⑥:SSH ssh配置
⑦:Publish Over SSH 通过SSH发送构建好的jar包或war包
⑧:Role-based Authorization Strategy (可选用户权限)
插件安装方法
进入Plugins
进入安装插件 Installed plugins
输入对应插件安装即可
①④⑤在购机按的项目General里面:
③⑥⑦在系统管理-系统配置里面
③:SSH server
⑥:SSH
⑦:Publish Over SSH
⑦:Publish Over SSH 配置好以后也在构建好的项目-构建后操作里面配置内容
(用于通过SSH发送构建好的jar包或war包到配置的服务器上)
三:配置
①:配置国内的清华镜像源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
入口:系统管理-插件管理-高级
②:配置maven
入口:系统管理-全局工具配置-maven配置/以及最下面的maven安装
参照我Java开发环境部署中的maven文章, 配置好maven
https://blog.csdn.net/m0_58943936/article/details/134942539
注意: (settings.xml替换为服务器maven的settings.xml路径)
注意: (MAVEN_HOME替换为服务器maven所在路径)
③:配置jdk
参照我Java开发环境部署中的jdk文章, 配置好jdk:https://blog.csdn.net/m0_58943936/article/details/134604149
注意: (JAVA_HOME替换为服务器jdk所在路径)
④:配置git
服务器安装git
yum -y install git
查看git路径
which git
显示路径为/usr/bin/git
⑤:配置凭据参数
入口:
点击System进入全局凭据
进入System后,(如果没有,自行创建一个)
进入后点击添加
添加凭据
(我这里是添加了2个 ,第三个B服务器用户名密码信息的凭据最后发现没用上,ssh那里是直接输入用户名密码)
gitlab-Token用于jenkins系统设置中GitLab的ApiToken绑定
gitlab_user用于jenkins项目管理中的原码管理那里添加用户名密码
⑥:使用API token 连接GitLab的配置
1. GitLab 端生成API Token
登录GitLab -> 在用户头像下拉框,选择“Setting” -> 点击“Access Tokens”,
输入“Name”和“Expires at”,勾选“api” -> 点击“Create personal access token”,
生成access token,记录下此token。
2.Jenkins 端配置GitLab API Token
“Dashboard” -> “Manage Jenkins” -> “System” -> “GitLab”
⑦:配置Publish over SSH
1.查看公钥/私钥
.ssh 文件夹是用于存储用户的 SSH 配置和身份验证信息的目录
进入/root/.ssh目录,看看里面 有没有公钥和私钥
如没有
## 创建ssh key ssh-keygen -t rsa## 一路回车
查看/root/.ssh/文件夹目录
cd /root/.ssh/
查看ssh key 私钥/公钥
cat /root/.ssh/id_rsacat /root/.ssh/id_rsa_pub
注意:
id_rsa 私钥 id_rsa_pub 公钥 authorized_keys
文件包含一组授权的公钥,用于远程用户的身份验证。当你使用公钥-私钥对进行 SSH 连接时,远程服务>器会验证连接请求中的公钥是否与 authorized_keys 中的某个公钥匹配。
如果匹配成功,用户就被授权登录。每个用户在其主目录下的 .ssh 文件夹中都有一个 authorized_keys 文件。known_hosts
文件包含已知的主机密钥(公钥),用于验证你连接的远程主机的身份。当你首次连接到一个新的 SSH 服务器时,其公钥将被添加到你的 known_hosts 文件中。
以后的连接将会比较远程主机的公钥是否与 known_hosts 中的匹配,以确保你连接到的是你预期的主机。
⑧:配置SSH Server
四:项目构建
1. 后端
新建一个项目
①:General
进行配置
②:源码管理
③:构建触发器 不做任何配置 略过
④:构建环境 不做任何配置 略过
⑤:构建
配置Maven相关内容
解释下这段clean -Dmaven.test.skip=true package -Ptest
clean:
clean 是 Maven 的一个目标(goal),用于清理目标文件夹(通常是 target 文件夹),删除之前构建生成的文件。
-Dmaven.test.skip=true:
-D 是 Maven 命令行中用于传递系统属性的标志。在这里,maven.test.skip 是一个系统属性,设置为 true。
这个选项的作用是跳过执行测试。当设置为 true 时,Maven 将不会执行项目中的测试用例。这在一些构建场景中,特别是快速构建和部署时,可以加快构建过程。
package:
package 是 Maven 的一个构建阶段(phase)。它负责将项目的源代码编译、运行测试,并将构建结果打包成可分发的格式,如 JAR 或 WAR 文件。
-Ptest:
-P 是 Maven 命令行中用于激活构建配置文件中的 Maven Profile 的标志。在这里,test 是要激活的 Maven Profile。
Maven Profile 可以包含一组配置,用于在不同的构建环境或条件下执行不同的构建操作。
例如,在测试环境中使用-Ptest , 生产环境使用-Pprod, 开发环境使用-pdev
综合起来,这个 Maven 命令的作用是清理项目,跳过测试阶段,执行打包阶段,并激活名为 test 的 Maven Profile。这样的命令通常用于在构建过程中定制一些行为,例如在测试环境中构建项目,跳过测试用例的执行,加快构建速度。
ssh命令内容 (具体内容可以看本章内容五模块 )
⑥:构建后操作
注意:
(我一开始使用的这个构建后操作) , 构建项目后将从git拉取的jar包, 复制到B服务器设置的目录中)
(后面发现并不方便, 就写了上面的ssh命令, 代替了这个构建后的操作) ,也就是吧这个构建后操作这一步直接关掉了, 因为和 Execute shell里的命令冲突了
Source files也是一个小坑, 使用的是jenkins工作空间所在的项目路径, 不是A服务器jar包所在路径
五:Execute shell 中的ssh命令
1.查看和修改本地主机名与 IP 地址的映射关系
jenkins的Dashboard -> Manage Jenkins -> System 中的Publish over SSH中的SSH Servers
我们设置了B服务器的别名和连接信息(j也就是Jenkins从git获取内容构建项目成功后将jar包发送到B服务器并在B服务器运行jar包),
所以我们需要在两台服务器做一个别名的映射和互通操作(使用sh不需要密码即可互相连接)
问题1:(没有设置映射,导致找不到test-sever)
1.查看映射关系
通过编辑 /etc/hosts 文件来查看和修改本地主机名与 IP 地址的映射关系
使用 cat 命令查看整个文件cat /etc/hosts
如果信息太多,使用 grep 命令查找特定信息,例如查找是否包含某个主机名
grep "test-server" /etc/hosts
备注:
查看 /etc/hosts 文件需要足够的权限,因此可能需要使用 sudo 或其他管理员权限执行这些命令
上述命令中,如果 /etc/hosts 文件包含 test-server 的映射关系,将显示相应的行。
如果没有包含test-server的映射关系, 则需要我们自行添加
2. 修改本地主机名与 IP 地址的映射关系
打开 /etc/hosts 文件,使用文本编辑器(如 vi 或 vim)进行编辑。在文件的末尾添加类似以下的行后进行保存退出
两台服务器都需要添加test-server的映射, 服务器ip地址都写B服务器的IP, 名称都写自定义的test-server
<服务器IP地址> test-server
备注:
修改 /etc/hosts 文件可能需要管理员权限。你可以使用 sudo 或其他管理员权限来编辑文件。例如:
sudo vim /etc/hosts
test-server为 jenkins的SSH server 中Name自定义的名称两台服务器都需要添加test-server的映射, 服务器ip地址都写B服务器的IP, 名称都写自定义的test-server
3. 测试是否成功解析
两台服务器执行,如果能够正确解析, 说明更改已经生效
ping test-server
2.查看公钥/私钥
.ssh 文件夹是用于存储用户的 SSH 配置和身份验证信息的目录
进入/root/.ssh目录,看看里面 有没有公钥和私钥
如没有
## 创建ssh key ssh-keygen -t rsa## 一路回车
查看/root/.ssh/文件夹目录
cd /root/.ssh/
查看ssh key 私钥/公钥
cat /root/.ssh/id_rsacat /root/.ssh/id_rsa_pub
注意:
id_rsa 私钥 id_rsa_pub 公钥 authorized_keys
文件包含一组授权的公钥,用于远程用户的身份验证。当你使用公钥-私钥对进行 SSH 连接时,远程服务器会验证连接请求中的公钥是否与 authorized_keys 中的某个公钥匹配。
如果匹配成功,用户就被授权登录。每个用户在其主目录下的 .ssh 文件夹中都有一个 authorized_keys 文件。known_hosts
文件包含已知的主机密钥(公钥),用于验证你连接的远程主机的身份。当你首次连接到一个新的 SSH 服务器时,其公钥将被添加到你的 known_hosts 文件中。
以后的连接将会比较远程主机的公钥是否与 known_hosts 中的匹配,以确保你连接到的是你预期的主机。
3.两台机器实现互相通信
互相通信后使用ssh连接不需要使用密码即可连接
问题2(没有设置互通,导致还需要输入密码, 提示权限被拒绝 )
1 服务器 A 和服务器 B 之间建立通信
确保服务器 A 和服务器 B 上都安装了 SSH:在大多数 Linux 系统中,SSH 已经默认安装。你可以通过以下命令检查:
ssh -V
获取服务器 A 的公钥:在服务器 A 上执行以下命令获取公钥:
cat ~/.ssh/id_rsa.pub
如果使用的是不同的密钥文件,请替换 id_rsa.pub 为你的实际公钥文件名。
将服务器 A 的公钥添加到服务器 B 的 authorized_keys 文件中:
复制服务器 A 上的公钥内容。
在服务器 B 上执行以下命令,将公钥添加到 ~/.ssh/authorized_keys 文件中:
会发现authorized_keys中有两个ssh-rsa,一个是服务器B的, 一个是服务器A的
mkdir -p ~/.ssh # 如果 .ssh 文件夹不存在则执行创建echo "粘贴从服务器 A 复制的公钥内容" >> ~/.ssh/authorized_keys--更改权限(后面两句)chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
测试连接:
在服务器 A 上执行以下命令测试连接到服务器 B (不输入密码就能连接上, 代表成功)
ssh username@serverB_IP
替换 username 为服务器 B 上的用户名,serverB_IP 为服务器 B 的 IP 地址或主机名。如果一切设置正确,你应该能够通过 SSH 连接到服务器 B,而不需要输入密码。
可选:设置服务器 B 到服务器 A 的连接:
如果你也想要从服务器 B 连接到服务器 A,重复上述步骤,将服务器 B 的公钥添加到服务器 A 的 authorized_keys 文件中。
现在,你的两台 Linux 服务器应该能够通过 SSH 协议互相通信,实现安全的远程连接。
4.ssh执行命令
1.jenkins部署后的操作将jar传入目标服务器并且运行jar包 执行命令
ssh test-server "pkill -9 -f test-admin.jar" || truessh test-server "pkill -9 -f test-gateway.jar" || truessh test-server "pkill -9 -f test-business.jar" || truessh test-server "pkill -9 -f test-job.jar" || truessh test-server "rm -rf /home/workspace/*"scp -r ${ WORKSPACE}/admin/target/admin.jar test-server:/home/workspace/test-admin.jarscp -r ${ WORKSPACE}/business/target/business.jar test-server:/home/workspace/test-business.jarscp -r ${ WORKSPACE}/gateway/target/gateway.jar test-server:/home/workspace/test-gateway.jarscp -r ${ WORKSPACE}/job/target/job.jar test-server:/home/workspace/test-job.jarssh test-server "cd /home/sh && sh start-test-admin.sh"ssh test-server "cd /home/sh && sh start-test-business.sh"ssh test-server "cd /home/sh && sh start-test-gateway.sh"ssh test-server "cd /home/sh && sh start-test-job.sh"
命令解析:
停止正在运行的进程: ssh test-server “pkill -9 -f chain-authorization.jar” || true: 通过 SSH 连接到 test-server 主机,使用 pkill 命令强制终止所有包含字符串 “test-admin.jar” 的进程。 || true 部分表示如果命令执行失败(例如没有找到匹配的进程),也继续执行下一步。
类似地,停止其他三个进程(gateway , business, job)。
删除目录内容: **ssh test-server "rm -rf /opt/chain-test/ ": 通过 SSH 连接到test-server 主机,使用 rm -rf 命令递归地删除/home/workspace/ 目录下的所有文件和子目录。
复制 JAR 文件到远程主机: scp -r ${WORKSPACE}/admin/target/admin.jar test-server:/home/workspace/test-admin.jar: 使用 scp 将本地 **${WORKSPACE}/admin/target/admin.jar **文件复制到 test-server 主机的 /home/workspace/ 目录,并将其命名为 test-admin.jar。
类似地,复制其他三个 JAR 文件到 **test-server **主机的相应目录。
启动新的进程: ssh test-server “cd /home/sh && sh start-test-admin.sh” 通过 SSH 连接到 test-server 主机,切换到**/home/sh** 目录,然后执行 start-test-admin.sh 脚本,启动 test-admin.jar 进程。
类似地,启动其他三个进程(gateway , business, job)
整体而言,这个脚本的目的是在远程主机上更新和重新启动一组 Java 进程,其中包括 admin , gateway , business, job 进程。
2. sh脚本运行jar包及生成日志
#!/bin/bashBUILD_ID=dontKillMecd /home/workspace/nohup /home/soft/jdk/jdk-11.0.20/bin/java -Xms128m -Xmx512m -Dproject.name="admin" -jar test-admin.jar > admin.log 2>&1 &-- 备注:后面jar包的sh脚本是相同的,如果jar包存放位置在一个目录,更改jar名称和日志名称即可
#!/bin/bashBUILD_ID=dontKillMecd /home/workspace/nohup /home/soft/jdk/jdk-11.0.20/bin/java -Xms128m -Xmx512m -Dproject.name="business" -jar test-business.jar > business.log 2>&1 &
3.配置好后进入项目,进行构建
构建成功后,查看控制台输出
项目构建完成(下方是构建输出结果)
六.使用启动脚本实现开机自启动jenkins
在Linux系统上,可以通过创建一个启动脚本并将其添加到系统的启动服务中来实现Jenkins的开机自启动。下面是一个简单的Jenkins启动脚本的例子,你可以根据实际情况进行调整。
创建启动脚本并使用脚本启动服务
创建Jenkins启动脚本:
使用文本编辑器创建一个启动脚本,比如 jenkins_start.sh
(建议在jenkins.war包所在目录下创建该启动脚本)
#!/bin/bashJENKINS_HOME="/path/to/your/jenkins/home"JENKINS_WAR="/path/to/your/jenkins.war"JENKINS_PORT=16060(自己开放的jenkins端口)nohup java -jar $JENKINS_WAR --httpPort=$JENKINS_PORT --webroot=$JENKINS_HOME/war > $JENKINS_HOME/jenkins.log 2>&1 &
请确保替换上述脚本中的 /path/to/your/jenkins/home 和 /path/to/your/jenkins.war 为你的实际Jenkins主目录和Jenkins.war文件的路径。
添加执行权限:
使用以下命令为脚本添加执行权限:
chmod +x jenkins_start.sh
配置Jenkins开机自启动:
如果你使用的是 Systemd(通常在现在 Linux 发行版上),可以创建一个 Systemd 服务单元文件。创建文件 /etc/systemd/system/jenkins.service,并在其中添加以下内容:[Unit]Description=JenkinsServer[Service]ExecStart=/path/to/jenkins_start.shUser=your_jenkins_user(一般是root)Restart=always[Install]WantedBy=multi-user.target
替换 /path/to/jenkins_start.sh 为你实际的脚本路径,将 your_jenkins_user 替换为运行Jenkins的用户。
Restart=always: 这个选项指定了服务在退出时应该如何重启。 always 表示无论服务以何种方式退出(正常退出、崩溃等),都应该尝试重新启动服务。这有助于确保Jenkins服务在发生意外故障时能够尽快恢复。 WantedBy=multi-user.target: 这个选项指定了服务应该由哪个目标(target)启动。在Systemd中,target 是一组单元的集合,代表了系统的一个状态。 multi-user.target 通常表示多用户模式,是一个用户登录后的标准系统状态。当你启动系统时,Systemd会尝试启动 multi-user.target,从而启动与之相关联的所有服务,包括 Jenkins。通过将 WantedBy 设置为 multi-user.target,你告诉Systemd在多用户模式下启动时自动启动Jenkins服务。
综合起来,这两个选项确保了Jenkins服务会在系统启动时自动启动,并且在发生故障时会尝试重新启动。这是在生产环境中保持服务稳定性和可用性的重要配置
如果你使用 SysV init(较旧的 Linux 发行版可能使用),可以将启动脚本添加到启动目录中:
sudo cp jenkins_start.sh /etc/init.d/jenkinssudo chmod +x /etc/init.d/jenkinssudo update-rc.d jenkins defaults
启动Jenkins服务:
启动或重新启动Jenkins服务:
对于 Systemd:对于 SysV init:
sudo systemctl start jenkins
sudo service jenkins start
现在,Jenkins应该会在系统启动时自动启动。
备注:
Jenkins的开机自启动过程可能因操作系统而异,因此上述方法适用于大多数基于 systemd 或 SysV init 的 Linux 发行版。
启动时报错情况
错误情况1
[root@lv jenkins]# sudo systemctl start jenkinsFailed to start jenkins.service: Unit is not loaded properly: Invalid argument.See system logs and 'systemctl status jenkins.service' for details.
检查 Systemd 服务单元文件: 确保你的 Jenkins 服务单元文件(通常在 /etc/systemd/system/jenkins.service)的语法和配置正确。确保文件路径、权限等都是正确的。检查 ExecStart 行是否指向正确的 Jenkins 启动脚本。 检查 Systemd 日志: 运行以下命令查看详细的 Systemd 日志信息:该错误表明 Systemd 在尝试启动 Jenkins 服务时遇到了问题,可能是由于服务单元文件的配置问题或其他原因导致的。可以按照以下步骤来排查和解决问题:
sudo journalctl -xe | grep jenkins
这将显示与 Jenkins 服务相关的详细日志,你可以从中获取更多信息以了解问题所在。
使用 systemctl status 查看服务状态: 运行以下命令以获取 Jenkins 服务的状态信息:
sudo systemctl status jenkins
这将提供关于 Jenkins 服务的当前状态、最后一次失败的详细信息等。
确保服务单元文件加载正确: 运行以下命令重新加载 Systemd 管理的单元文件:
sudo systemctl daemon-reload
然后再尝试启动 Jenkins 服务:
sudo systemctl start jenkins
错误情况2 (状态码为 217/USER)用户权限问题
[root@lv jenkins]# sudo systemctl status jenkins● jenkins.service - JenkinsServer Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled) Active: failed (Result: start-limit) since 三 2024-01-03 16:09:43 CST; 23min ago Process: 20795 ExecStart=/home/soft/jenkins/jenkins_start.sh (code=exited, status=217/USER) Main PID: 20795 (code=exited, status=217/USER)1月 03 16:09:42 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:42 lv systemd[1]: jenkins.service failed.1月 03 16:09:43 lv systemd[1]: jenkins.service holdoff time over, schedul...t.1月 03 16:09:43 lv systemd[1]: Stopped JenkinsServer.1月 03 16:09:43 lv systemd[1]: start request repeated too quickly for jen...ce1月 03 16:09:43 lv systemd[1]: Failed to start JenkinsServer.1月 03 16:09:43 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:43 lv systemd[1]: jenkins.service failed.Hint: Some lines were ellipsized, use -l to show in full.
根据 systemctl status jenkins 命令的输出,Jenkins 服务启动失败,错误状态码为 217/USER。这通常表示有关用户权限的问题。
(这里之前jenkins.service里的用户我写的是jenkins创建的用户, 发现权限不够, 就用了root,然后问题解决了)
确保以下几点:
用户权限: Jenkins 应该以具有足够权限的用户身份运行。在你的 Jenkins 服务配置文件中 ( /etc/systemd/system/jenkins.service) 的 jenkins_start.sh 脚本中,确保指定的用户 ( User=) 具有足够的权限访问所需的文件和目录。 脚本路径和权限: 检查 jenkins_start.sh 脚本的路径是否正确,并确保该脚本有可执行权限。 环境变量: 如果 jenkins_start.sh 中使用了环境变量(例如 J E N K I N S H O M E ∗ ∗ , ∗ ∗ JENKINS_HOME**,** JENKINSHOME∗∗,∗∗JENKINS_WAR 等),请确保这些变量在执行脚本时已正确设置。 日志查看: 查看 journalctl 日志以获取更详细的错误信息,可以使用以下命令:
sudo journalctl -xe | grep jenkins
查看错误信息后, 发现是下方的错误(用户 (USER) 执行 Jenkins 服务启动脚本时无法找到对应的进程)
[root@lv system]# sudo journalctl -xe | grep jenkins1月 03 15:59:32 lv sudo[25333]: root : TTY=pts/2 ; PWD=/home/soft/jenkins ; USER=root ; COMMAND=/bin/systemctl start jenkins1月 03 16:03:34 lv sudo[4551]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:04:59 lv sudo[8556]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl start jenkins-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:04:59 lv systemd[8563]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:04:59 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:04:59 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:04:59 lv systemd[1]: jenkins.service failed.1月 03 16:04:59 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:04:59 lv systemd[8600]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:04:59 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:04:59 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:04:59 lv systemd[1]: jenkins.service failed.1月 03 16:05:00 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:05:00 lv systemd[8603]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:05:00 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:05:00 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:05:00 lv systemd[1]: jenkins.service failed.1月 03 16:05:00 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:05:00 lv systemd[8625]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:05:00 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:05:00 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:05:00 lv systemd[1]: jenkins.service failed.1月 03 16:05:00 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:05:00 lv systemd[8627]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:05:00 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:05:00 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:05:00 lv systemd[1]: jenkins.service failed.1月 03 16:05:00 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.1月 03 16:05:00 lv systemd[1]: start request repeated too quickly for jenkins.service-- Subject: Unit jenkins.service has failed-- Unit jenkins.service has failed.1月 03 16:05:00 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:05:00 lv systemd[1]: jenkins.service failed.1月 03 16:05:16 lv sudo[9387]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:05:39 lv sudo[10461]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:05:47 lv sudo[10863]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:09:31 lv sudo[20156]: root : TTY=pts/2 ; PWD=/home/soft/jenkins ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:09:41 lv sudo[20721]: root : TTY=pts/2 ; PWD=/home/soft/jenkins ; USER=root ; COMMAND=/bin/systemctl start jenkins-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:09:41 lv systemd[20728]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:09:41 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:09:41 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:41 lv systemd[1]: jenkins.service failed.1月 03 16:09:42 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:09:42 lv systemd[20755]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:09:42 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:09:42 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:42 lv systemd[1]: jenkins.service failed.1月 03 16:09:42 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:09:42 lv systemd[20757]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:09:42 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:09:42 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:42 lv systemd[1]: jenkins.service failed.1月 03 16:09:42 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:09:42 lv systemd[20777]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:09:42 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:09:42 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:42 lv systemd[1]: jenkins.service failed.1月 03 16:09:42 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:09:42 lv systemd[20795]: Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process-- Subject: Process /home/soft/jenkins/jenkins_start.sh could not be executed-- The process /home/soft/jenkins/jenkins_start.sh could not be executed and failed.1月 03 16:09:42 lv systemd[1]: jenkins.service: main process exited, code=exited, status=217/USER1月 03 16:09:42 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:42 lv systemd[1]: jenkins.service failed.1月 03 16:09:43 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.1月 03 16:09:43 lv systemd[1]: start request repeated too quickly for jenkins.service-- Subject: Unit jenkins.service has failed-- Unit jenkins.service has failed.1月 03 16:09:43 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:09:43 lv systemd[1]: jenkins.service failed.1月 03 16:32:53 lv sudo[22084]: root : TTY=pts/2 ; PWD=/home/soft/jenkins ; USER=root ; COMMAND=/bin/systemctl status jenkins1月 03 16:33:36 lv sshd[24096]: Invalid user jenkins from 117.34.125.66 port 560481月 03 16:33:36 lv sshd[24096]: input_userauth_request: invalid user jenkins [preauth]1月 03 16:33:38 lv sshd[24096]: Failed password for invalid user jenkins from 117.34.125.66 port 56048 ssh21月 03 16:35:14 lv sudo[28807]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl start jenkins-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:35:14 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:35:14 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:35:15 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:35:15 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.-- Subject: Unit jenkins.service has finished start-up-- Unit jenkins.service has finished starting up.1月 03 16:35:15 lv systemd[1]: jenkins.service holdoff time over, scheduling restart.-- Subject: Unit jenkins.service has finished shutting down-- Unit jenkins.service has finished shutting down.1月 03 16:35:15 lv systemd[1]: start request repeated too quickly for jenkins.service-- Subject: Unit jenkins.service has failed-- Unit jenkins.service has failed.1月 03 16:35:15 lv systemd[1]: Unit jenkins.service entered failed state.1月 03 16:35:15 lv systemd[1]: jenkins.service failed.1月 03 16:35:19 lv sudo[29078]: root : TTY=pts/0 ; PWD=/etc/systemd/system ; USER=root ; COMMAND=/bin/systemctl status jenkins
具体的错误消息为:
Failed at step USER spawning /home/soft/jenkins/jenkins_start.sh: No such process
这可能是由于脚本中的用户不存在或脚本的路径不正确引起的。请确保在 jenkins.service 文件中配置的用户存在,并且脚本的路径正确。在 jenkins.service 文件中你配置了 User=your_jenkins_user,请确保 your_jenkins_user 是存在的系统用户。
然后尝试了手动执行脚本 /home/soft/jenkins/jenkins_start.sh 看能否成功执行, 发现手动执行可以运行脚本
/home/soft/jenkins/为脚本所在目录/home/soft/jenkins/jenkins_start.sh
看看是否有任何错误消息。确保在执行时没有任何问题。
如果脚本权限不够可以使用以下命令来添加执行权限
chmod +x /home/soft/jenkins/jenkins_start.sh
七.遇到的一些问题
1. Jenkins启动报错:AWT is not properly configured on this server.
Jenkins启动报错信息
AWT is not properly configured on this server. Perhaps you need to run your container with “-Djava.awt.headless=true”? See also: https://www.jenkins.io/redirect/troubleshooting/java.awt.headless
解决方案:
jenkins所在服务器安装一些基本的字体和与 X Window System 相关的工具,使系统能够更好地处理图形界面的显示和渲染.
yum -y install dejavu-sans-fonts fontconfig xorg-x11-server-Xvfb
2. 本地和服务器上的 Java 版本需一致
服务端用的是jdk11版本, 因为启动jenkins需要11以上
本地用的是jdk8 , 发版时拉取代码, 发现没有jdk高版本向下兼容的情况,会报错
javacTask: 源发行版 1.8 需要目标发行版 1.8[INFO] -------------------------------------------------------------[ERROR] COMPILATION ERROR : [INFO] -------------------------------------------------------------[ERROR] An unknown compilation problem occurred[INFO] 1 error[INFO] -------------------------------------------------------------
Maven 编译插件默认会使用本地 JDK 版本进行编译。
如果本地项目的 Java 版本是 8,而服务器上的 JDK 版本是 11,可能会出现不兼容的情况。
解决方法之一是确保本地和服务器上的 Java 版本一致
所以我把本地maven中的setting.xml 和 jdk版本都切换成11了
maven中的setting.xml中指定
<profiles><profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> </profile></profiles>
项目总pom中jdk指定
maven-compiler-plugin的3.11.0 也有版本要求, 3.8版本的不支持11.
可以去https://mvnrepository.com/ maven获取这里自行看一下,我这里指定的是3.11.0
<build> <plugins> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> <encoding>UTF-8</encoding> <compilerArgument>-parameters</compilerArgument> </configuration> </plugin></plugins> </build>
都切换好后, 可以在Idea终端中执行下方命令查看下是否版本切换成功, 和mvn能否构建成功
java -version --查看jdk版本mvn -version--查看maven配置信息mvn clean install -e --运行 Maven 构建以查看详细信息(看是否报错)
3. pom打包jar包到服务器命名方式问题
使用对应模块打包方式为jar
<modelVersion>4.0.0</modelVersion><packaging>jar</packaging> --模块打包方式
打包jar包到服务器命名方式设置
在对应模块的pom文件中,我下方定义了该模块name为gateway,
所以在 build中的finalName中引用定义的名称,
<artifactId>test_geteway</artifactId><version>1.0.0</version><name>gateway</name> -- 定义打包名称<description>gateway网关</description> <build> <finalName>${ project.name}</finalName> --根据build中的fileName进行jar包的命名</build>
使用repackage确保生成的jar文件可以通过"java-jar" 命令直接运行
Spring Boot 插件的 repackage 目标 用于将应用程序打包为可执行的 JAR 文件。
它将重新打包项目的 JAR 文件,以确保包含所有依赖项,并将可执行 JAR 的主类信息正确配置到清单文件中。
这有助于确保生成的 JAR 文件可以通过 java -jar 命令直接运行,不然会报清单相关问题
<build> <finalName>${ project.name}</finalName> --引用打包名称 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> --repackage将可执行 JAR 的主类信息正确配置到清单文件中 </goals> </execution> </executions> </plugin> </plugins> </build>
4. 服务器接收不到jenkins发送来的jar包
已经构建成功,但是自己目录下没有,原因
假如你项目构建配置的是/usr/local/workspace
那么你的jar包被传输到 /usr/local/jenkins/usr/local/workspace里面去了
5. jenkins工作空间问题
之前项目构建后操作里的SSH server -> Transfer Set 中的 Source files 我写的是A服务器从git拉取后存放的路径, 最后发现不是, 需要填写的是jenkins工作空间的路径才可以正确将jar存放到B服务器Remote directory 指定的路径中保存
构建后操作工作空间jar包路径
test代表工作空间WORKSPACE , 后面的是路径
所以Source files中的
**/target/**.jar
是我们要传到服务器上的jar包路径
Execute shell 脚本工作空间路径
对应的${WORKSPACE}代表了上面图中的test,后面的/admin/target/admin.jar为路径
部分内容引自https://blog.csdn.net/kawayiyy123/article/details/127884383
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。