jenkins+gitlab简单流水线pipeline教学
然后gitlab上找到这个 一定要勾选上 (这个问题卡了博主半天 原本一直以为是我写的url出了问题)访问 http://192.168.48.161 并使用初始用户名root和设置的密码登录。现在您的 Jenkins 应该能够成功与 GitLab 集成并使用代理节点执行任务了!有两种方式去连接agent节点,第一个用root 直接连接 配置好账户的密码就可以了。这是第一种的方式(直接操作就可以了
GitLab + Jenkins 自动化管理平台搭建文档
1. 环境准备
1.1 系统要求
- 操作系统:openEuler 24.03
- 节点IP:192.168.48.161、192.168.48.162、192.168.48.163
- 建议配置:每台虚拟机至少4核CPU、8GB内存、50GB存储
1.2 网络配置
确保三台虚拟机之间网络互通,防火墙已开放相应端口。
2. 架构设计
采用以下部署方案:
- 192.168.48.161:GitLab服务器(8GB要不然卡死)
- 192.168.48.162:Jenkins主服务器
- 192.168.48.163:Jenkins代理节点
3. GitLab 安装配置(192.168.48.161)
3.1 安装依赖
dnf install -y curl policycoreutils openssh-server openssh-clients postfix
systemctl enable sshd
systemctl start sshd
systemctl enable postfix
systemctl start postfix
3.2 添加GitLab仓库并安装
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-18.4.0-ce.0.el8.x86_64.rpm/download.rpm
3.3 安装GitLab
dnf install ./gitlab-ce-18.4.0-ce.0.el8.x86_64.rpm --nogpgcheck
3.4 配置GitLab
vim /etc/gitlab/gitlab.rb
# 找到这个
external_url 'http://gitlab.example.com'
# 换成
external_url 'http://192.168.48.161'
3.5 应用配置并启动
gitlab-ctl reconfigure
gitlab-ctl start
3.6 验证安装
访问 http://192.168.48.161 并使用初始用户名root和设置的密码登录。
# 查看密码
cat /etc/gitlab/initial_root_password
账号 root
密码 : ******************************(你刚刚查看的密码)
3.7 记得去改密码
# 在界面上的 password选项
# 我一般改成
qweasdzxc123.
4. Jenkins 安装配置(192.168.48.162)
4.1 安装Java
dnf install -y java-17-openjdk-devel
说一下问题 就是有jekins有的要求是11有的要求是17
# 查看可用的 Java 版本
dnf search openjdk
# 安装 Java 17
dnf install -y java-17-openjdk-devel
# 设置默认 Java 版本
alternatives --config java
# 验证 Java 版本
java -version
4.2 添加Jenkins仓库
curl -o /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
4.3 安装Jenkins
dnf install -y jenkins --nogpgcheck
4.4 启动Jenkins
systemctl enable jenkins
systemctl start jenkins
4.5 获取初始密码
cat /var/lib/jenkins/secrets/initialAdminPassword
4.6 访问Jenkins
访问 http://192.168.48.162:8080 并输入初始密码完成安装。要开魔法完成对应的插件安装
记得进去之后把密码改了
用户名
admin
密码
123456
4.7 卸载jenkins
systemctl stop jenkins
yum remove -y jenkins
rm -rf /var/lib/jenkins /var/log/jenkins /var/cache/jenkins
BUG修复
# 有的时候服务启动失败了 通过这个命令查看问题
journalctl -u jenkins.service -b --no-pager
# 我一开始遇到的问题就是因为java的版本号是不对的
# 以下是详细的信息
11月 19 12:47:12 k8s-node1 jenkins[2195]: Supported Java versions are: [17, 21]
11月 19 12:47:12 k8s-node1 jenkins[2195]: See https://jenkins.io/redirect/java-support/ for more information.
11月 19 12:47:12 k8s-node1 systemd[1]: jenkins.service: Main process exited, code=exited, status=1/FAILURE
11月 19 12:47:12 k8s-node1 systemd[1]: jenkins.service: Failed with result 'exit-code'.
11月 19 12:47:12 k8s-node1 systemd[1]: Failed to start Jenkins Continuous Integration Server.
11月 19 12:47:12 k8s-node1 systemd[1]: jenkins.service: Scheduled restart job, restart counter is at 5.
11月 19 12:47:12 k8s-node1 systemd[1]: jenkins.service: Start request repeated too quickly.
11月 19 12:47:12 k8s-node1 systemd[1]: jenkins.service: Failed with result 'exit-code'.
11月 19 12:47:12 k8s-node1 systemd[1]: Failed to start Jenkins Continuous Integration Server.
5. Jenkins代理节点配置(192.168.48.163)
5.1 安装Java和依赖
dnf install -y java-17-openjdk-devel openssh-server
systemctl enable sshd
systemctl start sshd
有两种方式去连接agent节点,第一个用root 直接连接 配置好账户的密码就可以了
这是第一种的方式(直接操作就可以了) 直接就有root的相关权限了
5.2 创建Jenkins用户(第二种方式专门的jenkins用户SSH密钥连接)
useradd -m -s /bin/bash jenkins
# 设置密码
passwd jenkins
# 密码我设置的是
123456
5.3 密钥配置(到Jenkins主节点162上)
问题还是密钥格式!错误显示 PEM problem: it is of unknown type,说明你粘贴的密钥格式 Jenkins 无法识别。让我们一步步彻底解决:
1. 首先检查当前密钥格式
# 查看密钥文件头
sudo -u jenkins head -n 3 /var/lib/jenkins/.ssh/id_rsa
# 检查密钥类型
sudo -u jenkins ssh-keygen -l -f /var/lib/jenkins/.ssh/id_rsa
2. 如果密钥格式不对,重新生成
# 删除现有密钥
sudo -u jenkins rm -f /var/lib/jenkins/.ssh/id_rsa /var/lib/jenkins/.ssh/id_rsa.pub
# 生成传统格式的 RSA 密钥(必须使用 -m PEM)
sudo -u jenkins ssh-keygen -t rsa -b 2048 -f /var/lib/jenkins/.ssh/id_rsa -m PEM -N ""
# 验证密钥格式
sudo -u jenkins head -n 1 /var/lib/jenkins/.ssh/id_rsa
# 必须显示: -----BEGIN RSA PRIVATE KEY-----
3. 复制公钥到代理节点
# 删除代理节点旧的授权密钥
ssh jenkins@192.168.48.163 "rm -f ~/.ssh/authorized_keys"
# 复制新的公钥
sudo -u jenkins ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub jenkins@192.168.48.163
# 验证复制结果
ssh jenkins@192.168.48.163 "cat ~/.ssh/authorized_keys"
4. 手动测试连接
# 测试手动连接(必须成功)
sudo -u jenkins ssh -o BatchMode=yes -i /var/lib/jenkins/.ssh/id_rsa jenkins@192.168.48.163 "echo 手动测试成功"
5. 获取正确的私钥内容
# 获取完整的私钥内容(用于粘贴到 Jenkins)
sudo -u jenkins cat /var/lib/jenkins/.ssh/id_rsa
6. 在 Jenkins 中重新创建凭据

删除旧的凭据(ID: bd253c4f-c887-46db-9e46-9967258e0ff1),然后创建新凭据:
类型: SSH Username with private key
范围: Global
ID: agent-163-final
描述: Final SSH key for agent 163
Username: jenkins
Private Key:
● Enter directly
# 粘贴完整的私钥内容(确保包含 -----BEGIN RSA PRIVATE KEY----- 和 -----END RSA PRIVATE KEY-----)
Passphrase: [留空]
记得把username和keys这一行填写好

7. 关键检查点
确保:
- 密钥以
-----BEGIN RSA PRIVATE KEY-----开头 - 密钥以
-----END RSA PRIVATE KEY-----结尾 - 没有多余的空格或字符
- 手动 SSH 连接测试成功
如果手动 SSH 测试失败,Jenkins 也不可能成功。先确保手动连接能成功!
6.1 安装必要插件
步骤 1:登录 Jenkins 管理界面
打开浏览器访问:http://192.168.48.162:8080
步骤 2:安装插件
# 如果通过命令行安装(可选)
# 但推荐使用 Web 界面安装
Web 界面操作:
- 点击左侧菜单 Manage Jenkins → Plugins
- 选择 Available plugins 标签页
- 搜索并勾选以下插件:
GitLabGitPipelineSSH Slaves(如果还没安装)
- 点击 Install without restart
- 等待安装完成
6.2 配置 GitLab 连接
步骤 1:在 GitLab 生成 API Token
- 登录 GitLab:
http://192.168.48.161 - 点击右上角用户头像 → Edit profile
- 左侧菜单 → Access Tokens
- 创建新 Token:
- Name:
jenkins-integration - Expiration: 设置合适的过期时间
- Scopes: 勾选
api、read_api、read_repository
- Name:
- 点击 Create personal access token
- 复制生成的 token(只显示一次)

步骤 2:在 Jenkins 配置 GitLab

-
在 Jenkins 点击 Manage Jenkins → System
-
找到 GitLab 部分
-
配置如下:
GitLab host URL: http://192.168.48.161 Connection name: gitlab-161 -
选择 GitLab API token
-
点击 Add → Jenkins
-
选择 Kind:
GitLab API token -
在 API Token 字段粘贴刚才复制的 token
-
ID:
gitlab-token-161 -
点击 Add
-
测试连接:点击 Test Connection,应该显示
Success
6.3 配置代理节点
步骤 1:创建代理节点
-
点击 Manage Jenkins → Nodes
-
点击 New Node
-
配置节点信息:
Node name: agent-163 # 选择 Permanent Agent Permanent Agent: ☑️
步骤 2:节点详细配置
# 基本配置
Description: Jenkins Agent on 192.168.48.163
Number of executors: 2 # 根据CPU核心数设置
Remote root directory: /home/jenkins
Labels: agent-163 # 多个标签用空格分隔
Usage: Use this node as much as possible
步骤 3:启动方式配置
Launch method: Launch agents via SSH
Host: 192.168.48.163
Credentials: 点击 Add → Jenkins
步骤 4:添加 SSH 凭据
Kind: SSH Username with private key
Scope: Global
ID: agent-163-ssh
Username: jenkins
Private Key:
- ☑️ Enter directly
- 粘贴 Jenkins 主节点的私钥 (~jenkins/.ssh/id_rsa)
Passphrase: (如果有设置的话)
步骤 5:高级 SSH 配置
Host Key Verification Strategy: Non verifying Verification Strategy
JavaPath: /usr/lib/jvm/java-17-openjdk/bin/java
步骤 6:节点属性配置
Environment variables: 点击 Add
- Name: PATH
- Value: $PATH:/usr/lib/jvm/java-17-openjdk/bin
步骤 7:保存并测试
- 点击 Save
- 节点会自动尝试连接
- 查看节点状态,应该显示
Connected - 点击节点名称 → Log 查看连接日志
7. 验证集成
7.1 测试 GitLab 连接
先在agent-163节点上安装
dnf install git -y
# 创建测试任务验证集成
# 1. 新建 Pipeline 任务
# 2. 在 Pipeline 配置中选择
# Definition: Pipeline script from SCM
# SCM: Git
# Repository URL: http://192.168.48.161/username/repo.git
# Credentials: 添加 GitLab 用户名密码或 SSH 密钥
7.2 创建测试 Pipeline
pipeline {
agent {
label 'agent-163'
}
stages {
stage('Checkout') {
steps {
git branch: 'main',
url: 'http://192.168.48.161/root/test.git',
credentialsId: 'gitlab-credential'
}
}
stage('Build') {
steps {
echo 'Building project...'
sh 'echo "Build step executed"'
}
}
stage('Test') {
steps {
echo 'Running tests...'
sh 'echo "Test step executed"'
}
}
stage('Deploy') {
steps {
echo 'Deploying application...'
sh 'echo "Deploy step executed"'
}
}
}
post {
always {
echo 'Pipeline completed'
}
success {
echo 'Pipeline succeeded!'
}
failure {
echo 'Pipeline failed!'
}
}
}
在主节点上162构建完之后 再去看看163的目录情况
# 登录到 agent-163
ssh jenkins@192.168.48.163
# 查看工作目录
ls /home/jenkins/workspace/test/
# 应该能看到从 GitLab 拉取的文件
ls -la /home/jenkins/workspace/test/
故障排除
如果节点连接失败:
# 检查 SSH 连接
sudo -u jenkins ssh jenkins@192.168.48.163 "echo test"
# 检查 Java 路径
ssh jenkins@192.168.48.163 "which java"
# 检查目录权限
ssh jenkins@192.168.48.163 "ls -ld /home/jenkins"
如果 GitLab 连接失败:
- 检查 GitLab API token 是否有效
- 检查网络连通性:
ping 192.168.48.161 - 检查防火墙设置
现在您的 Jenkins 应该能够成功与 GitLab 集成并使用代理节点执行任务了!
8. 配置 Webhook 自动触发 - 详细过程
先在Jenkins的system中上取消勾选这个 防止认证

然后gitlab上找到这个 一定要勾选上 (这个问题卡了博主半天 原本一直以为是我写的url出了问题)


8.1 在 GitLab 161 上配置 Webhook
步骤 1: 获取 Jenkins 项目 URL
首先在 Jenkins 162 上获取你的项目 URL:
- 进入你的流水线项目页面
- 查看浏览器地址栏,URL 格式为:
http://192.168.48.162:8080/job/test/ - 需要的 Webhook URL 是:
http://192.168.48.162:8080/project/test
步骤 2: 在 GitLab 中配置 Webhook
# 登录 GitLab 161
http://192.168.48.161
- 进入项目设置:
- 导航到你的项目
root/test - 点击左侧菜单 Settings → Webhooks
- 导航到你的项目
- 填写 Webhook 配置:
URL: http://192.168.48.162:8080/project/test
Secret token: [留空或生成一个token]
Trigger:
✓ Push events
✓ Merge request events
✓ Tag push events
SSL verification: ✓ Enable SSL verification
- 高级配置:
- 点击 “Add webhook”
- 测试连接:点击 “Test” → “Push events”
- 确保显示 “Hook executed successfully: HTTP 200”

步骤 3: 处理网络访问问题
如果 GitLab 无法访问 Jenkins,需要配置防火墙:
# 在 GitLab 161 上测试连接
curl -v http://192.168.48.162:8080/project/test
# 如果无法连接,在 162 上开放端口
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
8.2 在 Jenkins 162 上配置 GitLab 触发器
步骤 1: 安装必要的插件
# 确保已安装 GitLab 插件
# 进入 Jenkins → Manage Jenkins → Plugins
# 检查以下插件是否已安装:
- GitLab Plugin
- GitLab API Plugin
- Build Authorization Token Root Plugin
步骤 2: 配置系统级别的 GitLab 连接
- 进入系统配置:
- Manage Jenkins → Configure System
- 找到 “GitLab” 部分
- 添加 GitLab 连接:
GitLab connection:
Name: gitlab-161
GitLab host URL: http://192.168.48.161
Credentials: [添加 GitLab API token]
Test Connection: 确保显示 "Success"
步骤 3: 配置流水线的 GitLab 触发器
- 进入你的流水线配置:
- 进入
test项目 → Configure
- 进入
- 构建触发器配置:
✓ Build when a change is pushed to GitLab
GitLab webhook URL: http://192.168.48.162:8080/project/test
Allowed branches:
✓ Filter branches by name: main
✓ Filter branches by regex: .*
Push events: ✓
Merge request events: ✓
Opened merge request events: ✓
Accepted merge request events: ✓
Closed merge request events: ✓
Comments: ✓
Comment regex: ^jenkins.*
- 高级选项:
Enable build trigger: ✓
Rebuild open merge requests: ✓
Include branches: main
Target branch: main
步骤 4: 生成 API Token(如果需要)
# 在 GitLab 161 上创建 API token
# 用户设置 → Access Tokens
Token name: jenkins-webhook
Scopes: ✓ api
Expires: [设置过期时间]
8.3 测试 Webhook 配置
测试 1: 手动触发测试
# 在 GitLab 161 上手动测试 Webhook
# Webhooks 页面 → 点击 "Test" → "Push events"
# 观察 Jenkins 是否自动开始构建
测试 2: 实际代码推送测试
# 在本地修改代码并推送
echo "// test webhook" >> test-file.txt
git add test-file.txt
git commit -m "test: webhook trigger"
git push origin main
# 观察 Jenkins 162 是否自动开始构建
测试 3: 查看构建日志
在 Jenkins 上观察:
Started by GitLab push by root
Branch: main
Commit: xxxxxxxx
8.4 故障排除
常见问题 1: 403 Forbidden 错误
# 在 Jenkins 162 上修改 CSRF 保护
# Manage Jenkins → Configure Global Security
✓ Prevent Cross Site Request Forgery exploits
Token generation: Random token (较宽松)
常见问题 2: 网络连接问题
# 在 GitLab 161 上测试网络
ping 192.168.48.162
telnet 192.168.48.162 8080
# 在 Jenkins 162 上检查访问日志
tail -f /var/log/jenkins/access.log
常见问题 3: 权限问题
# 确保 GitLab 用户有项目访问权限
# 确保 Jenkins 用户有构建权限
8.5 验证配置成功
成功标志:
- ✅ GitLab Webhook 显示 “200 OK”
- ✅ Jenkins 在代码推送时自动触发构建
- ✅ 构建日志显示 “Started by GitLab push”
- ✅ 构建在 agent-163 上成功执行
现在你的 CI/CD 流水线已经实现完全自动化!任何推送到 GitLab 的代码变更都会自动触发 Jenkins 构建。
9. 安全配置
9.1 防火墙配置
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
9.2 SSL配置(可选)
考虑使用Let’s Encrypt为GitLab和Jenkins配置HTTPS。
10. 备份与维护
10.1 GitLab备份
gitlab-rake gitlab:backup:create
10.2 Jenkins备份
定期备份/var/lib/jenkins目录。
11. 故障排除
11.1 常见问题
- 内存不足:增加swap空间或优化配置
- 端口冲突:检查端口占用情况
- 权限问题:确保目录权限正确
11.2 日志查看
# GitLab日志
gitlab-ctl tail
# Jenkins日志
tail -f /var/log/jenkins/jenkins.log
12. 后续优化建议
- 配置负载均衡和高可用
- 设置监控和告警
- 定期更新软件版本
- 实施更细粒度的权限控制
此文档提供了基本的GitLab+Jenkins自动化管理平台搭建流程。实际部署时可能需要根据具体需求调整配置。建议在测试环境中验证后再部署到生产环境。
更多推荐


所有评论(0)