Jenkins首次安装推荐插件出错 No such plugin: cloudbees-folder 超详细解决方案

Jenkins安装与踩坑

Jenkins部署Maven多环境项目(dev、beta、prod)的参数设置

Jenkins配置maven项目,打包、部署、发布


一台Linux服务器部署Jenkins服务,简述流程:

1.安装Jdk环境

  • 配置Java多环境(可选)

2.安装Maven插件

  • 配置远程Nexus仓库(可选)

3.安装Git环境

  • 配置Git的密钥登录

4.安装Jenkins

  • 中文插件
  • Git插件
  • Maven打包插件

5.配置SSH免密登录
6.配置Jenkins打包的后置Shell脚本执行远程部署 (可选)

Jenkins安装

中文官网

截止当前时间LTS版本:2.346.3 LTS

英文官网

Jenkins版本高于上述中文官网网站,截止当前时间LTS版本:2.479.2 LTS

安装Jenkins

下载Jenkins仓库

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

导入key

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

安装openjdk-17

可自行安装jdk-17版本

yum install fontconfig java-17-openjdk

安装Jenkins

yum install jenkins

设置开机自启

systemctl enable jenkins

启动/状态/重启

systemctl start jenkins
systemctl stop jenkins
systemctl status jenkins
systemctl restart jenkins

可编辑文件对jenkins做一些基础配置(可选)

/usr/lib/systemd/system/jenkins.service

指定启动Jenkins的JDK17路径

启动后截图

注意:在第一次启动时的密钥到此页面前要输入安装密钥,在Jenkins的日志文件中可查或systemctl status jenkins会打印

Jenkins配置Git凭据

配置Linux服务器访问Git的SSH密钥

ssh-keygen -t ed25519 -C "xxxx_Jenkins" -f "/root/.ssh/xxx_id_rsa"

配置config文件

Host xxxx.xxx.com
HostName xxxx.xxx.com
PreferredAuthentications publickey
IdentityFile /root/.ssh/jenkins_id_rsa

在gitlab仓库,将当前id_rsa公钥配置到设置

验证配置

ssh -T git@xxxx.xxx.com -p 22

配置Jenkins的Git凭据认证

配置类型SSH Username with private key

Passphrase如果对公钥私钥加密,则需要配置当前口令。

jenkins 设置Git sshkey 凭证后,报错:No ECDSA host key is known for

解决办法:
Manage jenkins –> Configure Global Security ,找到 Git Host Key Verification Configuration,按下图修改后保存。警告信息可以忽略

Jenkins配置Maven项目打包

选择对应项目的JDK版本

输入项目的git仓库地址

配置自动删除旧的构建文件

输入项目的分支

输入Maven构建命令

-Pdev : 选择pom中环境为dev

-Dmaven.test.skip=true 跳过单元测试

clean package -Pdev -Dmaven.test.skip=true

项目pom打包插件

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>

Jenkins打包脚本命令

Jenkins打包执行脚本命令:

#!/bin/bash

##注意:需要先配置与远程ssh服务器的免密登录##

##项目打包目录
DIR="/root/.jenkins/workspace/EventTrack/target/"
##项目文件
PROJECT_NAME="EventTrack.war"
##远程部署目录
REMOTE_DIR="/usr/local/service/tomcat8_8081/webapps/"

##部署远程服务器
##多台:("192.168.6.155" "192.168.6.156" "192.168.6.157")
##单台:("192.168.6.155")
server_ips=("192.168.0.69")

for server_ip in ${server_ips[@]}
##循环开始
do
echo "开始执行远程服务器${server_ip}部署操作-->START"
##-q 不显示传输进度条
##-oStrictHostKeyChecking=no 参数可以在不确定或拒绝远程主机公钥的情况下,强制执行连接操作,并跳过密钥检查
scp -q -oStrictHostKeyChecking=no ${DIR}${PROJECT_NAME} root@${server_ip}:${REMOTE_DIR}/${PROJECT_NAME}
echo "执行远程服务器${server_ip}部署完成-->SUCCESS"
##循环结束
done
#!/bin/bash

##注意:需要先配置与远程ssh服务器的免密登录##

##项目打包目录
DIR="/root/.jenkins/workspace/DEV_ferryWeb/"
##项目文件
PROJECT_NAME="web.zip"
##远程部署目录
REMOTE_DIR="/opt/ferry_web/"
##时间戳
TIMESTAMP=$(date "+%Y%m%d%H%M%S")

##部署远程服务器
##多台:("192.168.6.155" "192.168.6.156" "192.168.6.157")
##单台:("192.168.6.155")
server_ips=("192.168.0.139")

for server_ip in ${server_ips[@]}
##循环开始
do
echo "开始执行远程服务器${server_ip}部署操作-->START"
##-q 不显示传输进度条
##-oStrictHostKeyChecking=no 参数可以在不确定或拒绝远程主机公钥的情况下,强制执行连接操作,并跳过密钥检查
scp -q -oStrictHostKeyChecking=no ${DIR}${PROJECT_NAME} root@${server_ip}:${REMOTE_DIR}/${PROJECT_NAME}

##执行ssh命令(多条)
ssh -q -oStrictHostKeyChecking=no root@${server_ip} > /dev/null 2>&1 "
cd ${REMOTE_DIR} ;
mv web web_bak_${TIMESTAMP};
unzip ${PROJECT_NAME} > /dev/null ;
rm -rf ${PROJECT_NAME};
"

echo "执行远程服务器${server_ip}部署完成-->SUCCESS"
##循环结束
done

rm -rf ${DIR}web
rm -rf ${DIR}${PROJECT_NAME}

Jenkins插件推荐

简体中文插件

搜索关键词Localization

Maven项目

搜索关键词Maven

Publish Over SSH

Jenkins系列教程六:Jenkins安装Publish over SSH插件并配置

问题记录

No such plugin: cloudbees-folder

此问题记录不适当前博客文章,当前采取yum方式安装Jenkins,但仍具备一定参考作用。

缺少 cloudbees-folder 插件,访问 cloudbees-folder 下载

将下载cloudbees-folder.hpi文件,复制到Jenkins.war包部署的项目目录/WEB-INF/detached-plugins下。

Maven打包报错(权限问题报错)

记录在jenkins中自动部署maven项目时碰到的一些问题

启动的服务这里是用户jenkins

[root@localhost conf]# ps -ef | grep jenkins
jenkins 21755 1 2 11:18 ? 00:02:33 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8080
root 23603 22884 0 13:14 pts/0 00:00:00 grep --color=auto jenkins

给Jenkins的用户授权权限

chown -R jenkins:jenkins /opt/maven_repository
chmod -R 755 /opt/maven_repository

Jenkins打包报错(JDK版本问题)

解决linux jenkins要求JDK版本与项目版本JDK不一致问题

Jenkins打包报错(maven-war-plugin版本问题)

解决Maven打war包报错Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war)

maven-war-plugin:2.2:war (default-war), 是 Maven 默认打 war 包用的插件,如果不指定版本,就默认用 2.2 版本。

Jenkins打包后无法执行scp命令远程部署包

jenkins执行shell脚本,使用scp免密传输失败问题

Host key verification failed:解决jenkins执行shell脚本,使用scp免密传输文件失败的问题


需要配置jenkins用户对远程linux主机免密ssh访问权限;

无法切换Jenkins用户

切换jenkins用户

su jenkins

TIP:若切换后还是root账号,执行以下命令修改:

vim /etc/passwd

修改/false->/bash

# 修改前
# jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/false

# 修改后
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

TIP:若命令提示符的用户名不是jenkins而变成了 bash-4.1$,执行以下命令修改:

修改环境

vim ~/.bash_profile

文件最后添加

export PS1='[\u@\h \W]\$'

使环境生效

source ~/.bash_profile

Jenkins用户无法执行sudo命令

sudo visudo
jenkins ALL=(ALL) NOPASSWD: ALL

验证切换jenkins用户

# 先切换到Jenkins用户
su jenkins
# 执行sudo命令切换Jenkins用户
sudo su -s /bin/bash jenkins

配置Jenkins用户的ssh免密登录

生成Jenkins的密钥对

ssh-keygen -t rsa

私钥:/var/lib/jenkins/.ssh/id_rsa

公钥:/var/lib/jenkins/.ssh/id_rsa.pub

配置对远程服务器免密登录

ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目标IP

Jenkins打包远程执行脚本后Jenkins前端无法正常退出

jenkins执行.sh脚本不生效,不退出问题

jenkins 执行 shell脚本成功但构建任务一直未结束或超时

start.sh脚本命令:

#!/bin/bash
export BUILD_ID=dontKillme

WORKSPACE=/usr/local/services/ferry_sheet/
JDK_PATH=/opt/jdk/jdk1.8.0_151/bin/java
JAR_NAME=zeus-sheet.jar

PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | grep -v startup | awk '{print \$2}'`
echo $PID;
if [ ! "$PID" ] ;then
echo "进程不存在"
else
echo "进程存在,杀死进程PID$PID"
kill -9 $PID
fi

echo "服务启动开始"
nohup ${JDK_PATH} -jar ${WORKSPACE}/${JAR_NAME} --spring.profiles.active=dev 2>&1 &

启动命令

cd /usr/local/services/ferry_sheet/
nohup bash start.sh

注意:需开启虚拟终端 Exec in pty