创建自由模式的jenkins任务
192.168.88.102 jenkins 所在服务器
[root@hadoop .ssh]# sudo groupadd jenkins
[root@hadoop .ssh]# sudo useradd -r -m -d /var/lib/jenkins -s /bin/bash -g jenkins jenkins
[root@hadoop .ssh]# sudo passwd jenkins
Wang#1234   密码复杂度要符合要求

[root@hadoop .ssh]# su jenkins  切换用户
[jenkins@hadoop home]$ sudo -u jenkins ssh-keygen -t rsa -b 4096 -f /var/lib/jenkins/.ssh/id_rsa -N ""   重新生成公钥私钥

Generating public/private rsa key pair.
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XcAQa/v9xTj0KVNbOGecjXB2yEgX5Ol5eCigKgihRAg jenkins@hadoop
The key's randomart image is:
+---[RSA 4096]----+
|E.      o+. ..+. |
|o        ..o = o |
|..      o . + B .|
|o.     . + o = Oo|
|o       S . . XoO|
| . .   . . . o.X+|
|  . . .   . .ooo+|
|     .       .oo |
|              .  |
+----[SHA256]-----+

[jenkins@hadoop home]$ cd /var/lib/jenkins/.ssh/
[jenkins@hadoop .ssh]$ ll
总用量 12
-rw------- 1 jenkins jenkins 3243 1月  14 02:23 id_rsa
-rw-r--r-- 1 jenkins jenkins  740 1月  14 02:23 id_rsa.pub
-rw------- 1 jenkins jenkins  668 1月  13 15:56 known_hosts

cat id_rsa  查看私钥,将私钥拷贝黏贴到 下图所示的private key 中

-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAkmDQW/NFCHen7d/VmpbyAEvelRj7QmB7wpzmeu+3BKhw67PI
V2Yta6cgw469nyJAHcMDRQ9h0BwxLBVff0hrAE/XtbWBkWH247pVN6TlSKlPRwII
GUyd/GvdOsbQ+hfJMbdm3ccC6/1D+jhMcetNZ1BWWPrzZ0ncT/YskUvZ48rWbT3N
ziG0EwA0ZLjLI4WfYP4i6MBuqyVPCC3wuDX3W3pteF9Q9ywyyPcrnlNtXm8+54wO
RzP8xDiDuhvsH9A+fVCAHRCb/Pafxz6c4h/z5OcOnVsMOoJ1puWm2+aLz6lbGq8T
wRxKllg1UEOOumHwdij7V5zrV3dA5qeffurL96YgbsbirccVrbAQG2ohWOLXG+/B
lCosBzrqr9OTA08P46yTHJ4W219KzjrbD5IBqP8Fo4rL6d/UTh0RSYvvW2qpYjei
4PmOC1IfhrMnUWtfqoxLBa9SYZwgc3/YQ28fm8tBntgHnltuh++D3hP8jVeY9G/X
bjNfy1yoJcQ+NwKCAQEAwPVtiAFgNvFF24+lMS2eejHQFp/lvbBJhLS8y0RjuYBA
cfQ+jHd9ttlZOCDH5cDehpVcfvQikzX7Axaa+WiAbAtXP79ceLZX1ILxEpxBU7+p
kkaEOq/OG8vARSFZPnVVmt4BqagB8t01Afl31HnqFrbO7ltoVvRmedF/JDgTOLAf
B8zdobz2uAQQWh1XMrPgdmQSiZr7VEU0RpGwrRaH3eR9u4CFoYfCES5q9OOgg0iG
pGytoj+NuoYd2p94sCdkSGfCNCNv9BrXK7NcLVSSDzDIcSUUVFbbuIts9EOBdKOU
CkeeAkvYp6gvOBGFehlAIl1/C6kYThSySbSgWhQpDQKCAQBmgEeffv13+YohOx8Z
jZkF5P4FoNWYPKendSBHbSRcWnXn3GbWg1GJBrFui3343fMWDHTZ3iDhYygz7Vxh
Qxu3qdUhKmM/4OErQ7NzkYeIL8SDVGIgS9WoqsrBKg4QDQzWhwwMd3tAKmu7Ja2I
HkQmLcXNiTRDN7ZUuIa4nBsuXSoUXRUabgpT5hc7JyYwqzAz7dgY4O00g82rYgdg
CYbVERb+MY7X5eIg7opLBch/NT6AYXsnjKJvkg2Zq8DTLGmdHWWwnmrUFbQVIXv4
UXQKPxh20VkuF9JfaTt//i0XY5s7OG+fPMasTGR4rTehLWbyMt18j72bTQ==
-----END RSA PRIVATE KEY-----

id 是自动生成的不用填

描述:起一个自己能识别的名字

username 是jenkins 所在服务器上,创建的jenkins用户

cat id_rsa.pub  查看公钥
将公钥拷贝到gitlab 对应项目下的SSH key 配置项中

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCSYNBb80UId6ft39WalvIAS96VGPtCYHvCnOZ677cEqHDrs8hXZi1rpyDDjr2fIkAdwwNFD2HQHDEsFV9/SGsAT9e1tYGRYfbjulU3pOVIqU9HAggZTJ38a906xtD6F8kxt2bdxwLr/UP6OExx601nUFZY+vNnSdxP9iyRS9njytZtPc3OIbQTADRkuMsjhZ9g/iLowG6rJU8ILfC4Nfdbem14X1D3LDLI9yueU21ebz7njA4jXhaZ2I3xKNg0Gye2xGl6+SbA2S8wxqZHB6Z3ogq8BpOgnWOwC9kkFrO8WenoLTGNWM7mG0514Qp2f3xTL23EI/2ZKvra+Q2qAHsh+9izmgmB3gNRUnBgfBSwx9rB3DxDfsT+3PDMtV5pNPffm2IKtf3RMYpOlnRD11dOsBrO605MOI2qTgQBSCEl9x3iRRw0+odagQO8ux5NbqSIqizn3yw== jenkins@hadoop
 


[jenkins@hadoop .ssh]$ systemctl start jenkins  
[jenkins@hadoop .ssh]$ ps -ef | grep genkins
jenkins   63308  60452  0 02:29 pts/0    00:00:00 grep --color=auto genkins
[jenkins@hadoop .ssh]$ ps -ef | grep jenkins
root      60451  49834  0 02:21 pts/0    00:00:00 su jenkins
jenkins   60452  60451  0 02:21 pts/0    00:00:00 bash
jenkins   63197      1 73 02:29 ?        00:00:39 /usr/local/jdk-17/bin/java -jar /usr/share/jenkins/jenkins.war --httpPort=8080
jenkins   63606  60452  0 02:30 pts/0    00:00:00 ps -ef
jenkins   63607  60452  0 02:30 pts/0    00:00:00 grep --color=auto jenkins  说明启动成功

192.168.88.128 是gitlab 所在的机器

[jenkins@hadoop .ssh]$ git ls-remote -h git@192.168.88.128:emall-group/common.git HEAD   检查是否连接到gitlab 并且能访问分支

创建一个自由风格的jenkins任务

添加git 路径和私钥,并选择需要拉取的分支,保存

点击构建

查看控制台输出,最后显示success ,并且日志重打印出拉去的分支,说明jenkins + gitlab 自由风格的任务创建并执行成功,拉取到了对应的代码

Verifying host key using known hosts file
 > git fetch --tags --progress git@192.168.88.128:emall-group/common.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision 49ae0507c4e11a96fb9c5744e84413215a569d28 (refs/remotes/origin/main)

如果过程中出现错误

[root@hadoop .ssh]# git ls-remote -h git@192.168.88.128:emall-group/common.git HEAD The authenticity of host '192.168.88.128 (192.168.88.128)' can't be established. ECDSA key fingerprint is SHA256:mhGVt1q8mCRbX2wFDvlbX74UCs3JX8k2pdfGWHDw5pM. ECDSA key fingerprint is MD5:4b:db:93:5c:97:ef:58:3c:1c:34:dc:69:12:b5:ca:40. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.88.128' (ECDSA) to the list of known hosts. git@192.168.88.128's password: Permission denied, please try again.

检查 jenkins 的.ssh 下没有knowhots 文件是否存在并且 有192.168.88.128的相关信息,如果没有需要手动创建

# 切换到 Jenkins 用户(通常 jenkins 或 jenkins_home)
sudo su - jenkins

# 或者使用 Jenkins 用户的 home 目录
ls -la /var/lib/jenkins/.ssh/

手动创建 known_hosts 文件

方法A:使用 ssh-keyscan 自动获取服务器公钥

# 以 jenkins 用户执行
sudo -u jenkins ssh-keyscan 192.168.88.128 >> /var/lib/jenkins/.ssh/known_hosts

# 如果需要添加特定端口(如果不是22)
sudo -u jenkins ssh-keyscan -p 22 192.168.88.128 >> /var/lib/jenkins/.ssh/known_hosts

方法B:手动创建并设置权限

bash

# 创建 .ssh 目录(如果不存在)
sudo mkdir -p /var/lib/jenkins/.ssh

# 创建 known_hosts 文件
sudo touch /var/lib/jenkins/.ssh/known_hosts

# 设置正确的权限
sudo chown -R jenkins:jenkins /var/lib/jenkins/.ssh
sudo chmod 700 /var/lib/jenkins/.ssh
sudo chmod 600 /var/lib/jenkins/.ssh/known_hosts

之后再看 配置项就不会报错了

=======================================================================

jenkins卸载
# 1. 停止 Jenkins 服务
sudo systemctl stop jenkins
sudo systemctl disable jenkins

# 2. 使用 yum 卸载 Jenkins 包
sudo yum remove -y jenkins

# 3. 删除残留文件
sudo rm -rf /var/lib/jenkins
sudo rm -rf /var/cache/jenkins
sudo rm -rf /var/log/jenkins

# 4. 删除配置文件
sudo rm -f /etc/sysconfig/jenkins
sudo rm -f /etc/init.d/jenkins

# 5. 删除仓库文件
sudo rm -f /etc/yum.repos.d/jenkins.repo

echo "✅ Jenkins 已通过 yum 卸载"

常见问题解决方式
Jenkins 服务启动失败,并且由于频繁重启触发 systemd 的启动限制。以下是详细的排查和解决步骤:
1. 查看详细错误日志
# 查看 Jenkins 服务日志
sudo journalctl -u jenkins -n 50 --no-pager

# 查看完整的服务日志
sudo journalctl -u jenkins -f

# 尝试手动启动查看输出
sudo /usr/local/jdk-17/bin/java -jar /usr/share/jenkins/jenkins.war --httpPort=8080

2. 常见问题及解决方案
A. 端口冲突检查


# 检查8080端口是否被占用
sudo netstat -tlnp | grep :8080
# 或者
sudo ss -tlnp | grep :8080

# 如果端口被占用,可以:
# 1. 停止占用进程
# 2. 修改 Jenkins 端口(修改 /etc/systemd/system/jenkins.service 中的 --httpPort=参数)

B. 权限问题

# 检查 jenkins.war 文件权限
ls -la /usr/share/jenkins/jenkins.war

# 检查 Jenkins 工作目录权限(默认 /var/lib/jenkins)
sudo ls -la /var/lib/jenkins/

# 修复权限
sudo chown -R jenkins:jenkins /var/lib/jenkins
sudo chmod 755 /var/lib/jenkins

C. Java 环境问题
# 检查 Java 是否正确安装
/usr/local/jdk-17/bin/java -version

# 检查 JDK 路径是否正确
ls -la /usr/local/jdk-17/bin/java

# 尝试使用系统默认 Java
which java
java -version
D. 内存不足
# 检查系统内存
free -h

# 如果内存不足,可以调整 Jenkins JVM 参数
# 编辑 service 文件,在 java 命令中添加内存参数,如:
# -Xmx512m -Xms256m


3. 重置 systemd 启动限制
# 重置失败的计数
sudo systemctl reset-failed jenkins

# 重新启动服务
sudo systemctl start jenkins

# 查看状态
sudo systemctl status jenkins

4. 检查并修复 service 文件
# 查看当前的 service 文件
cat /etc/systemd/system/jenkins.service

# 一个基本的 jenkins.service 示例
sudo tee /etc/systemd/system/jenkins.service << 'EOF'
[Unit]
Description=Jenkins Continuous Integration Server
After=network.target

[Service]
Type=simple
User=jenkins
Group=jenkins
Environment="JENKINS_HOME=/var/lib/jenkins"
ExecStart=/usr/local/jdk-17/bin/java -jar /usr/share/jenkins/jenkins.war --httpPort=8080
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd
sudo systemctl daemon-reload


5. 启用并启动服务
# 重新加载配置
sudo systemctl daemon-reload
sudo systemctl reset-failed jenkins

# 启动服务
sudo systemctl start jenkins

# 查看实时日志
sudo journalctl -u jenkins -f


=============================================
WARNING        winstone.Logger#logInternal: Failed to create dirs /var/lib/jenkins/war/META-INF
1月 15 00:02:41 hadoop java[36779]: 2026-01-14 16:02:41.114+0000 [id=1]        INFO        winstone.Logger#logInternal: Jetty shutdown successfully
1月 15 00:02:41 hadoop java[36779]: java.io.FileNotFoundException: /var/lib/jenkins/war/META-INF/MANIFEST.MF (没有那个文件或目录)


解决方案:
1. 停止 Jenkins 服务
sudo systemctl stop jenkins
2. 修复 Jenkins 目录权限
# 检查当前 /var/lib/jenkins 目录的所有者和权限
ls -la /var/lib/jenkins/

# 确保 Jenkins 用户存在(如果没有,先创建)
sudo useradd -r -m -d /var/lib/jenkins jenkins

# 递归更改 /var/lib/jenkins 目录的所有权
sudo chown -R jenkins:jenkins /var/lib/jenkins

# 设置正确的目录权限
sudo chmod 755 /var/lib/jenkins

3. 创建必要的目录结构
# 手动创建缺失的目录
sudo mkdir -p /var/lib/jenkins/war/META-INF
sudo chown -R jenkins:jenkins /var/lib/jenkins/war

# 或者,如果目录已存在但权限不对,修复权限
sudo chown -R jenkins:jenkins /var/lib/jenkins/war

4. 检查并修复 SELinux 上下文(如果启用了 SELinux)
# 检查 SELinux 状态
sestatus

# 如果 SELinux 是 enforcing 状态,修复上下文
sudo restorecon -Rv /var/lib/jenkins

# 或者临时禁用 SELinux(测试用)
sudo setenforce 0

5. 重新启动服务
# 重置 systemd 失败计数
sudo systemctl reset-failed jenkins

# 重新启动 Jenkins
sudo systemctl start jenkins

# 查看状态
sudo systemctl status jenkins

# 查看实时日志
sudo journalctl -u jenkins -f

如果出现下图的错误,说明gitlab 上没有master 分支,创建完之后再构建就不会报错了

====================================================================

Jenkins管理员密码重置方法总结

在 Jenkins 中,你可以通过多种方式重置管理员密码。以下是几种常用的命令行方法:

方法一:直接修改 Jenkins 配置文件

1. 找到 Jenkins 配置文件位置

# 默认位置(取决于安装方式)
/var/lib/jenkins/config.xml        # Linux 标准安装
~/.jenkins/config.xml             # 用户目录安装
C:\ProgramData\Jenkins\.jenkins\config.xml  # Windows

2. 修改配置文件中密码配置

# 备份原配置文件
sudo cp /var/lib/jenkins/config.xml /var/lib/jenkins/config.xml.backup

# 修改配置文件,将 useSecurity 设置为 false
sudo sed -i 's/<useSecurity>true<\/useSecurity>/<useSecurity>false<\/useSecurity>/g' /var/lib/jenkins/config.xml

3. 重启 Jenkins

# Ubuntu/Debian
sudo systemctl restart jenkins

# CentOS/RHEL
sudo service jenkins restart

# macOS
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

# Windows(以管理员身份运行)
net stop Jenkins
net start Jenkins

4. 重新设置密码

  1. 访问 Jenkins(现在无需密码)

  2. 进入 Manage Jenkins → Configure Global Security

  3. 重新启用安全设置,设置新的管理员账户和密码

  4. 保存并重启 Jenkins

方法二:使用 Jenkins CLI

1. 下载 Jenkins CLI

# 获取 Jenkins CLI JAR 文件
wget http://localhost:8080/jnlpJars/jenkins-cli.jar

2. 创建 Groovy 脚本重置密码

// reset-password.groovy
import jenkins.model.*
import hudson.security.*

def instance = Jenkins.getInstance()
def realm = new HudsonPrivateSecurityRealm(false)
realm.createAccount("admin", "newpassword")
instance.setSecurityRealm(realm)
instance.save()

3. 执行脚本

# 需要提供当前凭据或禁用安全
java -jar jenkins-cli.jar -s http://localhost:8080 groovy reset-password.groovy

方法三:直接操作用户配置文件

1. 找到用户配置文件

# 管理员用户配置文件路径
/var/lib/jenkins/users/admin/config.xml

2. 重置密码哈希

bash

# 生成新的密码哈希(如:newpassword123)
echo -n 'newpassword123{admin}' | sha256sum
# 或使用 bcrypt(推荐)
# 可以使用在线工具生成 bcrypt 哈希

# 修改配置文件中的密码哈希
sudo sed -i 's/<passwordHash>.*<\/passwordHash>/<passwordHash>#jbcrypt:$2a$10$...<\/passwordHash>/g' /var/lib/jenkins/users/admin/config.xml

方法四:临时禁用安全(最常用)

创建初始化配置脚本

// disable-security.groovy
import jenkins.model.*
import hudson.security.*

Jenkins.instance.disableSecurity()
Jenkins.instance.save()

执行脚本

# 直接通过文件系统执行
sudo java -jar /usr/share/java/jenkins.war --argumentsRealm.passwd.admin=newpassword --argumentsRealm.roles.admin=admin

# 或者创建脚本文件
sudo tee /var/lib/jenkins/init.groovy.d/disable-security.groovy << EOF
import jenkins.model.*
Jenkins.instance.disableSecurity()
Jenkins.instance.save()
EOF

# 重启 Jenkins
sudo systemctl restart jenkins

方法五:使用 Docker 安装的 Jenkins

# 进入容器
docker exec -it jenkins bash

# 在容器内执行
java -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.admin=newpassword --argumentsRealm.roles.admin=admin &

# 或修改配置文件
docker exec jenkins sed -i 's/<useSecurity>true<\/useSecurity>/<useSecurity>false<\/useSecurity>/g' /var/jenkins_home/config.xml
docker restart jenkins

注意事项

  1. 权限问题:确保以正确权限(sudo/管理员)执行命令

  2. 备份:修改前务必备份配置文件

  3. 重启:大多数修改需要重启 Jenkins 才能生效

  4. 安全性:重置后立即设置强密码

  5. 网络访问:确保 Jenkins 服务正在运行且可访问

验证密码重置

# 测试登录
curl -u admin:newpassword http://localhost:8080/api/json

选择最适合你情况的方法。对于生产环境,建议使用方法一或方法四,因为它们相对安全且可逆。


 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐