本指南旨在为基层智治平台运维团队提供一套完整的GitLab私有代码仓库与Jenkins持续集成环境的部署、配置与集成方案。文档详细阐述了GitLab在精细化权限控制和安全备份方面的优势,以及Jenkins在自动化构建与发布流程中的核心作用。通过两部分的有机结合,可实现从代码管理到自动化部署的完整DevOps流水线,为基层智治应用的稳定迭代与安全运维奠定坚实基础。本文档包含具体的安装命令、配置步骤和集成方法,可直接用于生产环境部署。
一、Gitlab
GitLab作为一体化DevOps平台,其私有化部署版本为团队提供了远超GitHub/Gitee等公有托管平台的管控深度,尤其适用于对安全与权限有严苛要求的企业环境。
- 私有代码仓库
- 精细化权限配置,让系统更安全
- 控制用户/用户组是否可以提交到主分支 (PR Push Request)
- 它使用Ruby语言写成。后来,一些部分用Go语言重写
1.Gitlab vs Github/Gitee
| 核心优势 | 权限管控:支持项目、分支、标签级的精细化用户/组权限控制。 安全合规:内置代码扫描、依赖检查、容器安全等全面安全工具链。 运维自主:支持定时备份、无缝升级、迁移及高可用部署。 | 使用简便,社区活跃,开源生态丰富。 |
| 适用场景 | 对代码安全、知识产权、审计日志有严格要求的企业内部开发团队。 | 开源项目协作、个人项目托管或对运维无自主性要求的团队。 |
2.部署
- 版本:gitlab-ce 12.0.3
- 4 G内存 500用户
- 4 核心 500用户
2.1 安装
#安装依赖
yum install -y curl openssh-server postfix wget
#下载gitlab-ce-12.0.3组件
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
#安装 gitlab-ce-12.0.3组件
yum localinstall -y gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
#安装目录 安装后,主要目录位于 /var/opt/gitlab/(数据)和 /opt/gitlab/(程序)
ll /var/opt/gitlab/ /var/log/gitlab/ -d
2.2 修改配置文件
grep ^external_url /etc/gitlab/gitlab.rb
external_url 'http://gitlab.example.com'
# 1. 修改外部访问URL
vim /etc/gitlab/gitlab.rb
# 将 `external_url` 修改为实际域名
external_url 'http://gitlab.liux.cn'
2.3 初始化
- 修改配置文件之后需要初始化 gitlab
# 此命令执行时间较长,将应用所有配置
gitlab-ctl reconfigure
# 检查各组件状态
gitlab-ctl status
gitlab-ctl stop
gitlab-ctl start
2.4 浏览器登录
#首次登录:在浏览器访问配置的 external_url,默认用户为 root,初始密码位于 /etc/gitlab/initial_root_password
#需要做hosts解析
http://gitlab.liux.cn
root/liux12366
2.5 gitlab汉化
#软件包下载
wget https://gitlab.com/xhang/gitlab/-/archive/v12.0.3-zh/gitlab-v12.0.3-zh.tar.gz
tar xf gitlab-v12.0.3-zh.tar.gz
cat gitlab-v12.0.3-zh-zh/VERSION
##停止 gitlab 服务
gitlab-ctl stop
#中文版覆盖英文版
\\cp -r gitlab-v12.0.3-zh/* /opt/gitlab/embedded/service/gitlab-rails/
#重新配置gitlab服务
gitlab-ctl reconfigure
#重启gitlab服务
gitlab-ctl restart
#页面查看效果
#查看导航条还没有汉化 点击右上角头像–>setting–>Preferences–>Language–>简体中文
2.6 查看日志
#查看nginx日志
gitlab-ctl tail nginx
#查看所有组件日志
gitlab-ctl tail
2.6 删除
- 删除rpm
- /var/opt/gitlab /opt/gitlab/ 2个目录删除.
- 备份内核参数配置 /opt/gitlab/embedded/etc/-gitlab-.conf
- 安装完成,覆盖回去上面几个conf.
3.Gitlab用户与组
- 在页面创建
4.配置密钥登录并拉取项目
cat .ssh/id_rsa.pub
git config –global user.name "Administrator"
git config –global user.email "admin@example.com"
git clone git@gitlab.liux.cn:dev/liux-app-pay.git
cd liux-app-pay
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
5.gitlab备份与恢复
- 修改配置文件
#修改配置文件 # 1. 编辑配置文件,设置备份路径和保留策略
[root@devops-gitlab ~]# vim /etc/gitlab/gitlab.rb
[root@devops-gitlab ~]# grep '^[a-Z]' /etc/gitlab/gitlab.rb
external_url 'http://gitlab.liux.cn'
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0600
gitlab_rails['backup_pg_schema'] = 'public'
gitlab_rails['backup_keep_time'] = 604800 # 保留7天
#生效
gitlab-ctl reconfigure
gitlab-ctl restart
⚠⚠ 对于gitlab.rb 和gitlab-secrets.json包含敏感信息,需要手动备份.
参考:https://docs.gitlab.com/ce/raketasks/backup_restore.html
- 手动备份
#2. 手动备份 (生成形如 `1676530212_2023_02_16_12.0.3_gitlab_backup.tar` 的文件)
gitlab-rake gitlab:backup:create
#GitLab 版本>=12.2
gitlab-backup create
#GitLab 版本<=12.1:
gitlab-rake gitlab:backup:create
# 3. ★★★ 必须手动备份的敏感文件 ★★★
cp /etc/gitlab/gitlab.rb /backup/
cp /etc/gitlab/gitlab-secrets.json /backup/ # 包含数据库加密密钥
- 自动备份
[root@devops-gitlab ~]# vim /server/scripts/gitlab.sh
#!/bin/bash
#1.备份gitlab数据
gitlab-rake gitlab:backup:create
#2.备份gitlab配置和密码文件
tar zcf /backup/gitlab/gitlab-conf-$(date +%F).tar.gz /etc/gitlab
#写入定时任务
crontab -e
00 03 * * * sh /server/scripts/gitlab.sh &>/dev/null
- 恢复
#1.停止写入服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#2. gitlab-rake恢复 (不需要加tar)
gitlab-rake gitlab:backup:restore BACKUP=备份文件
#新版本GitLab 版本>=12.2:
gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
#旧版本GitLab 版本 <=12.1:
gitlab-rake gitlab:backup:restore BACKUP=备份文件名字不包含右边内容_gitlab-backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1683718465_2023_05_10_12.0.3
# 3. 恢复手动备份的配置文件
cp /backup/gitlab-secrets.json /etc/gitlab/
cp /backup/gitlab.rb /etc/gitlab/
gitlab-ctl reconfigure
#4. 重启 gitlab
gitlab-ctl restart
6.优化
- 用户与组管理:全部通过Web界面在 “管理中心” 进行,可实现复杂的项目共享和权限继承。
- SSH密钥拉取代码:用户在个人设置中配置SSH公钥,即可通过 git clone git@gitlab.liux.cn:group/project.git 拉取代码。
- 关闭暂时不用的组件
vim /etc/gitlab/gitlab.rb
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
prometheus_monitoring['enable'] = false
grafana['enable'] = false
gitlab-ctl reconfigure
gitlab-ctl restart
二、Jenkins
Jenkins是一个开源的、基于Java的持续集成与交付调度平台,通过插件生态系统驱动所有自动化任务。
1.概述
- Jenkins是一个开源持续集成的工具,是由JAVA开发而成。
- Jenkins是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作。
- Jenkins能将各种开源的软件集成为一体,从而实现不同功能的调度工作。
2.部署
2.1 部署jdk
yum -y install java-1.8.0-openjdk
2.2 Jenkins-RPM方式安装(推荐)
#下载Jenkins
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.332.4-1.1.noarch.rpm
#安装
rpm -ivh jenkins-2.332.4-1.1.noarch.rpm
#启动并设置开机自启
systemctl enable jenkins
systemctl start jenkins
rpm -ql jenkins
-
目录结构
- /etc/init.d/jenkins jenkins启动与停止脚本
- /etc/logrotate.d/jenkins jenkins日志切割配置文件
- /etc/sysconfig/jenkins jenkins配置文件,可调整端口(JENKINS_PORT)、用户(JENKINS_USER)等。
- /usr/sbin/rcjenkins jenkins启动与停止脚本(软链接)
- /usr/share/java/jenkins.war 其实是jar包,jenkins的程序文件(升级时替换这个文件即可)
- /var/cache/jenkins jenkins缓存目录
- /var/lib/jenkins jenkins****主要目录 家目录,工作目录
- /var/log/jenkins jenkins****日志相关
-
jenkins配置文件说明
#/etc/sysconfig/jenkins
#jenkins配置,插件目录
JENKINS_HOME="/var/lib/jenkins" 家目录
#Jenkins用户
JENKINS_USER="jenkins"
#Jk 端口号
JENKINS_PORT="8080"
#JK loglevel 日志级别 数值越高,显示的越细 1-9
JENKINS_DEBUG_LEVEL="5"
#jk 访问日志
JENKINS_ENABLE_ACCESS_LOG="no
2.3 war包方式安装(灵活部署)
#下载jdk
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
#下载地址 war包地址
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.507/jenkins.war
#脚本启动
vim restart.sh
#!/bin/bash
pid=`ps -ef|grep jenkins | grep -v grep | awk '{print $2}'`
kill -9 $pid
sleep 5s
nohup java -DJENKINS_HOME=/root/jenkins/jenkins_home \\
-jar /root/jenkins/jenkins.war –httpPort=8080 >>/root/jenkins/nohup.out 2>&1 &
sh restart.sh
2.4访问页面
http://jenkins.liux.cn:8080/
#修改之后的密码
admin/admin
#页面安装插件 安装中文及GitLab集成插件:在 “系统管理” > “插件管理” 中搜索并安装
Maven Integration
Git Parameter
Pipeline
Build With Parameters
Persistent Parameter
Extended Choice Parameter
Localization: Chinese (Simplified)
#页面创建项目
通过jenkins实现带有参数的构建。
通过jenkins执行shell指令
3. Jenkins实现Gitlab集成-手动触发
- 我们需要依托jenkins将gitlab上的项目获取至本地,为后续网站的的代码发布工作做好准备
- Jenkins安装gitlab插件
3.1 gitlab页面创建项目或本地上传
git config –global user.name "Administrator"
git config –global user.email "admin@example.com"
git clone git@gitlab.liux.cn:dev/liux-app-web.git
cd liux-app-web/
touch 1.txt
git add .
git commit -m "add 1.txt"
git push -u origin master
git tag -a "v1.0" -m "v1.0"
git push origin –tags
3.2 创建项目
- 在win和linux上面配置hosts解析
172.16.1.71 gitlab.liux.cn
172.16.1.72 jenkins.liux.cn
- jenkins与gitlab秘钥验证
- 创建一对密钥对
- 在jenkins上面配置私钥
- 在gitlab上面配置公钥
- jenkins页面创建项目


连接报错时配置

3.3 手动部署
- 书写并提交代码:开发提交代码至Gitlab
- 插件(gitlab) :Jenkins安装gitlab所需插件
- 创建任务:Jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址
- 在Jenkins服务器上解析gitlab地址
- 在jenkins上面创建 密钥对 : 公钥发gitlab项目对应的用户, 私钥jenkins web页面添加保存
- 配置gitlab地址和分支
- web:jenkins 构建项目
- 书写脚本:把jenkins拉取代码,推送到web服务器站点目录
- 测试
4.Jenkins与GitLab集成实践-自动触发
集成目标是实现:当代码推送到GitLab时,自动触发Jenkins构建。
4.1 配置认证连接
- 在Jenkins服务器生成SSH密钥对:ssh-keygen -t rsa
- 私钥配置到Jenkins:
- 进入 “系统管理” > “Manage Credentials”。
- 添加类型为 “SSH Username with private key” 的凭据,将生成的私钥内容粘贴进去。
- 公钥配置到GitLab:
- 登录GitLab,进入 “用户设置” > “SSH密钥”,粘贴Jenkins服务器的公钥(id_rsa.pub内容)。
- 在GitLab创建项目(如 liux-app-web)并推送代码。
4.2 创建Jenkins任务
-
新建Item:创建一个“自由风格的项目”。
-
源码管理:
- 选择 “Git”。
- Repository URL:填写GitLab的SSH地址(如 git@gitlab.liux.cn:dev/liux-app-web.git)。
- Credentials:选择刚才添加的SSH私钥凭据。
- 指定分支:*/master 或根据需要填写。
-
构建触发器:
- 勾选 “Build when a change is pushed to GitLab”。
- 记录生成的GitLab webhook URL和Secret Token。
-
构建步骤:添加“执行shell”步骤,填写自动化脚本
echo $BUILD_TAG
tar zcvf /tmp/app-${BUILD_NUMBER}.tar.gz ./* # 示例打包
# 可在此处添加SCP命令,将包推送到目标服务器
4.3 配置GitLab Webhook(实现自动触发)
- 在GitLab项目页面,进入 “设置” > “Webhooks”。
- URL:填入上一步记录的Jenkins提供的GitLab webhook URL。
- Secret Token:填入对应的令牌。
- 勾选触发事件,如 “Push events”。
- 点击“添加Webhook”。测试推送代码,观察Jenkins任务是否自动启动。
三、总结
通过本文档的部署与配置,可以成功建立起一套服务于基层智治平台开发的私有化代码管理(GitLab) 与自动化持续集成(Jenkins) 基础环境。这套体系的核心价值在于:
- 安全与可控:所有代码资产存储于内网私有服务器,配合GitLab精细的权限模型,确保代码访问安全可控,满足审计要求。
- 流程自动化:通过Jenkins与GitLab的集成,实现了“代码推送”到“自动构建”的自动化管道,减少了手动操作,提高了交付效率与一致性。
- 运维可保障:GitLab完备的备份恢复机制和Jenkins灵活的配置与插件体系,使得整个CI/CD环境本身也具备了良好的可维护性和可恢复性,这是业务稳定迭代的基石。
网硕互联帮助中心







评论前必须登录!
注册