云计算百科
云计算领域专业知识百科平台

DevOps 实践指南:GitLab与Jenkins部署

本指南旨在为基层智治平台运维团队提供一套完整的GitLab私有代码仓库与Jenkins持续集成环境的部署、配置与集成方案。文档详细阐述了GitLab在精细化权限控制和安全备份方面的优势,以及Jenkins在自动化构建与发布流程中的核心作用。通过两部分的有机结合,可实现从代码管理到自动化部署的完整DevOps流水线,为基层智治应用的稳定迭代与安全运维奠定坚实基础。本文档包含具体的安装命令、配置步骤和集成方法,可直接用于生产环境部署。

一、Gitlab

​ GitLab作为一体化DevOps平台,其私有化部署版本为团队提供了远超GitHub/Gitee等公有托管平台的管控深度,尤其适用于对安全与权限有严苛要求的企业环境。

  • 私有代码仓库
  • 精细化权限配置,让系统更安全
  • 控制用户/用户组是否可以提交到主分支 (PR Push Request)
  • 它使用Ruby语言写成。后来,一些部分用Go语言重写

1.Gitlab vs Github/Gitee

特性维度GitLab(私有部署)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环境本身也具备了良好的可维护性和可恢复性,这是业务稳定迭代的基石。
赞(0)
未经允许不得转载:网硕互联帮助中心 » DevOps 实践指南:GitLab与Jenkins部署
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!