jenkins + gitlab 构建自由风格的任务
创建自由模式的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. 重新设置密码
-
访问 Jenkins(现在无需密码)
-
进入 Manage Jenkins → Configure Global Security
-
重新启用安全设置,设置新的管理员账户和密码
-
保存并重启 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
注意事项
-
权限问题:确保以正确权限(sudo/管理员)执行命令
-
备份:修改前务必备份配置文件
-
重启:大多数修改需要重启 Jenkins 才能生效
-
安全性:重置后立即设置强密码
-
网络访问:确保 Jenkins 服务正在运行且可访问
验证密码重置
# 测试登录 curl -u admin:newpassword http://localhost:8080/api/json
选择最适合你情况的方法。对于生产环境,建议使用方法一或方法四,因为它们相对安全且可逆。
更多推荐


所有评论(0)