千家信息网

Gitlab的部署和使用?

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、案例环境系统IP地址主机名所运行的服务Centos 7192.168.1.6gitlabgitlabCentos 7192.168.1.7jenkinsjenkinsCentos 7192.168
千家信息网最后更新 2026年10月31日Gitlab的部署和使用?

一、案例环境

系统IP地址主机名所运行的服务
Centos 7192.168.1.6gitlabgitlab
Centos 7192.168.1.7jenkinsjenkins
Centos 7192.168.1.8nginxnginx

二、部署Gitlab

1)部署Gitlab

[root@gitlab ~]#  yum -y install  epel-release curl openssh-server openssh-clients postfix cronie policycoreutils-python patch#安装所需依赖[root@gitlab ~]#  wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm#对gitlab的版本并没有什么特殊的限制[root@gitlab ~]# yum -y localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm[root@gitlab ~]# vim /etc/gitlab/gitlab.rb                #便于使用URL路径访问external_url 'http://192.168.1.6'#下载 中文补丁包[root@gitlab ~]# head -1 /opt/gitlab/version-manifest.txt           #查看gitlab的版本gitlab-ce 12.3.5[root@gitlab ~]# git clone https://gitlab.com/xhang/gitlab.git -b v12.3.5-zh[root@gitlab ~]# cd gitlab/[root@gitlab gitlab]#  git diff v12.3.5 v12.3.5-zh > /root/v12.3.5-zh.dif[root@gitlab gitlab]# patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 <  ../v12.3.5-zh.diff #将刚才的diff文件做为补丁导入到gitlab中#该命令执行过程中,一路回车跳过即可[root@gitlab ~]# gitlab-ctl  start                 # 启动gitlab[root@gitlab ~]# gitlab-ctl reconfigure      #重新配置gitlab

web页面访问测试



可以看出gitlab的网站页面已经汉化!

2) 配置免密登录

[root@gitlab ~]# ssh-keygen [root@gitlab ~]#  cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuWnEReFVhIiODuTO/NzdjuvPMY0tQ89NuYGtMxDJJAXnbChK8dbe0Iu4GNHY9zeSP0OaYJvVV9Nu/qtcZqgg+zKgLohdoI5QKXWcZ1JT/kNpIbnVnUYE0/AYZ8nMbjNiUsSD5BaDy+t9uuRxh+QCOrZDkYZw1EZioDpDoSR1XzrOac69QIag2XUU04rmWkR9/fbfwGzusTzfO2thk3vcZn+DzLqJqYy9ufkZeTGlqJnVC6//caakMtY475NSUKnGT+YoRsStXXI/9CVrpY8cPZ5eiFs34xGZWU1uhsx9UQ50pNeA7iqM6CIKpb4MPtqKDLIb83Bztz1VsfBJRMxer root@gitlab#本地生成密钥对,便于ssh登录


3)测试免密登录



[root@gitlab ~]# git clone git@192.168.1.6:root/web-demo.git#确认无需输入密码

三、部署Jenkins

[root@jenkins ~]# wget https://mirrors-i.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.172-1.1.noarch.rpm[root@jenkins ~]# yum -y localinstall jenkins-2.172-1.1.noarch.rpm#获取Jenkins软件包,并安装[root@jenkins ~]# systemctl start jenkins            #启动Jenkins

web页面访问






由于刚才跳过了插件安装,,所以需要自己手动安装,下载本人提供的插件软件包,下载链接:https://pan.baidu.com/s/16fxH1J0WO6tW1bhPwmd60w
提取码:432n

[root@jenkins ~]# rm -rf /var/lib/jenkins/plugins/           #将安装产生的插件目录进行删除[root@jenkins ~]# tar zxf jenkins-plugins.tar.gz -C /var/lib/jenkins/#将插件软件包解压到指定的位置[root@jenkins ~]# sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json#将jenkins下载插件的路径,更改为国内源[root@jenkins ~]# systemctl restart jenkins          #重新启动Jenkins

再次访问web页面:


再次访问Jenkins,可以发现已经变成中文了,因为插件中包含了中文插件!

四、Jenkins集成Gitlab

[root@jenkins ~]# ssh-keygen     #Jenkins服务生成密钥对[root@jenkins ~]# cat ~/.ssh/id_rsa.pub      #查看公钥信息ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbcFk7tkBes+S6BIVLxzLVj8X7bThDYscpY6uBeauHp+tPTL6CRVQDOlUcMRsyaX7o+a26iPd+yhJUaB+qT4iW1cVjhEiuKiR2NJSJdnEqccgcXWPJzIe+Owj76ofBtIhKqLGzwnYj6Lj0KmjUhn7tASu1bZ8hWubJ2ZQUottOW8KqjvHIb7q8OsGty9tsLVV3gD1XF1cE1s9rXY7XUFxDwtu1kfiA2XhSyJ3EmTWFlFlvaqzhQDBELWSVBz/4CihAfIp2eW7nx8TPXG0d0j+OwQYcccsarwkjHuc2IYRv4gVAhtRyXj8VQ7+LBsjYjfIMBTw4CFwQSTfZnWaa6Fcf root@jenkins

将公钥信息存放在gitlab上:

[root@jenkins ~]# cat ~/.ssh/id_rsa#查看Jenkins服务器的私钥信息,需要将私钥信息存放在Jenkins的web页面上-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEA23BZO7ZAXrPkugSFS8cy1Y/F+204Q2LHKWOrgXmrh7frT0y+gkVUAzpVHDEbMml+6Pmtuoj3fsoSVGgfqk+IltXFY4RIriokdjSUiXZxKnHIHF1jycyHvjsI++qHwbSISqixs8J2I+i49Cpo1IZ+7QErtW2fIVrmydmUFKLbTlvCqo7xyG+6vDrBrcvbbC1Vd4A9VxdXBNbPa12O11BcQ8LbtZH4gNl4UsidxJk1hZRZb2qs4UAwRC1klQc/+AooQHyKdnlu58fEz1xtHdI/jsEGHHHLGq8JIx7nNiGEb+IFQIbUcl4/FUO/iwbI2I3yDAU8OAhcEEk32Z1mmuhXHwIDAQABAoIBAQDXcb6qeY1JbaWrXLTiaXjnZHklGV6cCmcvo8PHIwXd8md9PAPvMtIBOUxGmY/yNtF7O2fuNHuJ6CuG45PzSpL4RHm/8yjIlmemBomvTLJe0cd+0dIfVsgPZTa03tbav7zwUB/oNYx4RQ0R7HFv93y2hOe9ARuzS+Q7WXuhpyNaEbvsqQGaeyw0xnBZyopv12CJRtT5PoITeEgv0meaDiXttkUZd1r3MLutAHsBpvuAUypoOppsUvbJ6Gsv3j4pd6aOHVEomEMaTZf7hRLNihnTfbj0t3yz/wKZ1FfamHbjRNnML1R+vnv4zEdPFmCJG3mAABQOgja2vwvkRxq3/L5BAoGBAO3/ar7ClBgFc09cqz8+jbIOI9pXdP5SoZh9S8B61qi6Nxie192CnHLc7qjFNCudOBV25+l98ZLCElWjiMcpAD/AH125dE15K+U0qBn0fJvegMWAiTHV9Av9m39oSnnuu8tVW/AbWjV86EzCRLcpQ+Q5i45HK+d/UIUv8BHGxqG9AoGBAOwJjuWRuh/+KSw6jJa52sZjkg6m0VAQB7dsQssIhQhQbZvgaLur2bQlf6iJPOHGLnPsZVe/LP3VwVgd6+hWo3uPVwjgHyblfLQva7rRXyilv84UMDVHrP1dsg9bEEuckit21A9ZMzqdUlAkFZ8aSDq4DRAjggIzf7SnoMt1aTQLAoGAFi116f7BxBdF7oBJKOSQWaY9qwv5R/W1Pzt1wqLvu9tWZQHwRaD1KTLzPmDaArJs1ns1Eyn8R9uzz60kgsKMVmR1x8sPTmTbNUmZ3IlOz0uFnmHi5vTz/+YLBm1We1RGxaTXo2E5H8Da+MQlmRfMTskZ+xEgwzq26yJTcaSfP9UCgYBwbzUkYcBZUQZnzRP/EFUIP5HpbMkz7A7g7q76a/qCtV0g7Uq2auvvBhXDQGxB19d03NyBac2StGm/AbHIIM0LJIJ+9dOhAZvfcN9OREGh7SJuletI1fWvUxxoeCZQ/ioajiYBkan3d80n46hw+2IApn+CeoeJaOKiOV88y5brdQKBgQCZ3pDpf4wKfR2IYDRLHXsxG4s8Td25HNtIt/ejmnGPWYQgDHl2dLpURzTTI6lIFaLTEPAVc4VhlfoltFvLSbm8fUoQfHhPEaGJeDzKSLq52oOQtYMZ/iIRP6KH210ZgZjuJHQOUqeA954epRnbIosgrWz0G7qNjrpoHZkPcWXxmQ==-----END RSA PRIVATE KEY-----






安装jenkins集成gitlab所需的插件,下载链接:https://pan.baidu.com/s/1p_jh8X3ma46SEV_tKLKYbw
提取码:zoej
安装插件,如图:



依次上传我提供的包,顺序如下:gitlab-oauth-->gitlab-plugin --> windows-slaves -->ruby-runtime -->gitlab-hook即可!

清华大学Jenkins源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

gitlab服务器提交代码到gitlab,测试拉取代码:

[root@gitlab ~]# cd web-demo/[root@gitlab web-demo]# git config --global user.email "you@example.com"[root@gitlab web-demo]# git config --global user.name "Your Name"[root@gitlab web-demo]# echo "123" >> 123.txt[root@gitlab web-demo]# git add .[root@gitlab web-demo]# git commit -m '123'[root@gitlab web-demo]# git push origin master

Jenkins服务器进行构建:




构建成功!

五、部署Nginx

使用Nginx来模拟上线环境!

[root@nginx ~]# yum install -y gcc gcc- c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree#由于是最小化安装的系统,所以安装一些必要的软件[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo#配置nginx的yum源,Nginx官方也有相应的配置信息[nginx]name=nginx_repo baseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1#该yum源默认情况下安装的是nginx最新的、稳定版[root@nginx ~]# yum -y install nginx              #安装nginx#对nginx的版本没有要求,只是为了使用访问效果而已[root@nginx ~]# rm -rf /etc/nginx/conf.d/default.conf        #删除默认的配置文件[root@nginx ~]# vim /etc/nginx/conf.d/server.conf#新建配置文件server {        listen 80;        location / {                root /code/web;                index index.html index.htm;        }}[root@nginx ~]# mkdir -p /code/web[root@nginx ~]# nginx -t[root@nginx ~]# systemctl start nginx

六、Jenkins实现代码自动上线

1)Jenkins服务编写上线脚本
[root@jenkins ~]#mkdir /scripts && cd /scripts/[root@jenkins scripts]# vim html_deploy.sh #!/bin/bashDATE=$(date +%Y-%m-%d-%H-%M-%S)web_server="192.168.1.8"Sdir=/optDdir=/code#1)进入项目目录,将内容进行打包,${WORKSPACE}是Jenkins的内置变量,表示构建目录的绝对路径get_code(){        cd ${WORKSPACE} && \        tar zcf ${Sdir}/web-${DATE}.tar.gz ./*}#2)将内容通过scp复制到web网页目录scp_web_server(){for hosts in ${web_server}do        scp ${Sdir}/web-${DATE}.tar.gz root@${hosts}:/opt        ssh root@${hosts} "mkdir -p ${Ddir}/web-${DATE} && \                        tar zxf ${Sdir}/web-${DATE}.tar.gz -C ${Ddir}/web-${DATE}                        rm -rf ${Ddir}/web && \                        ln -s ${Ddir}/web-${DATE} ${Ddir}/web"done}deploy(){        get_code        scp_web_server}        deploy[root@jenkins scripts]# chmod +x html_deploy.sh [root@jenkins scripts]# ps -ef | grep jenkins#可以看出jenkins的运行用户是jenkinsjenkins   58626      1  1 11:23 ?        00:00:39 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkinsjenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20root      61336   2046  0 12:06 pts/0    00:00:00 grep --color=auto jenkins[root@jenkins scripts]# vim /etc/sysconfig/jenkins JENKINS_USER="root"#为了防止权限问题,直接将jenkins的运行用户改为root[root@jenkins scripts]# systemctl restart jenkins#重启jenkins服务[root@jenkins scripts]# ssh-copy-id root@192.168.1.8#配置Jenkins可以免密登录到nginx服务器
2)git服务器编辑网页代码并上传:
[root@gitlab web-demo]# echo "lvzhenjiang" >> index.html[root@gitlab web-demo]# git add .[root@gitlab web-demo]# git commit -m "first"[root@gitlab web-demo]# git push origin master








有兴趣可以构建时的控制台输出!

访问nginx进行测试!

确认是刚才gitlab服务器提交的代码信息!

[root@nginx ~]# ll /code                    #查看网页目录实现的具体过程#可以查看到真正的网页目录是别的目录链接过去的总用量 0lrwxrwxrwx 1 root root 29 2月  25 19:37 web -> /code/web-2020-02-25-19-37-13drwxr-xr-x 2 root root 39 2月  25 19:37 web-2020-02-25-19-37-13

这种方式发布还有很多地方需要完善,比如回退,接下来使用tag的方式发布!

七、Jenkins实现代码自动部署与回退及重复构建

让项目支持tag的方式上线,便于我们进行区分!

1)git服务器创建几个tag标签并上传至gitlab:
[root@gitlab ~]# cd web-demo/[root@gitlab web-demo]# echo "

lvzhenjiang-version-v1.1

" > index.html[root@gitlab web-demo]# git add .[root@gitlab web-demo]# git commit -m "v1.1"[root@gitlab web-demo]# git push origin master[root@gitlab web-demo]# git tag -a "v1.1" -m "v1.1"[root@gitlab web-demo]# git push origin v1.1[root@gitlab web-demo]# echo "

lvzhenjiang-version-v1.2

" > index.html[root@gitlab web-demo]# git add .[root@gitlab web-demo]# git commit -m "v1.2"[root@gitlab web-demo]# git push origin master[root@gitlab web-demo]# git tag -a "v1.2" -m "v1.2"[root@gitlab web-demo]# git push origin v1.2[root@gitlab web-demo]# echo "

lvzhenjiang-version-v1.3

" > index.html[root@gitlab web-demo]# git add .[root@gitlab web-demo]# git commit -m "v1.3"[root@gitlab web-demo]# git push origin master[root@gitlab web-demo]# git tag -a "v1.3" -m "v1.3"[root@gitlab web-demo]# git push origin v1.3
2)Jenkins服务器安装插件并配置:

使用该方式就需安装插件:Git Parameter。

安装方式:系统管理-->插件管理-->可选插件--搜索Git Parameter-->直接安装!

[root@jenkins ~]# systemctl restart jenkins#安装完成后,需重启Jenkins![root@jenkins ~]# cd /scripts/[root@jenkins scripts]# vim html_deploy_tag.sh      #优化脚本#!/bin/bashDATE=$(date +%Y-%m-%d-%H-%M-%S)web_server="192.168.1.8"Sdir=/optDdir=/codeName=${DATE}-${git_version}                 #${git_version}是在jenkins界面定义的变量#1)进入项目目录,将内容进行打包#${WORKSPACE}是Jenkins的内置变量,表示构建目录的绝对路径get_code(){        cd ${WORKSPACE} && \        tar zcf ${Sdir}/web-${Name}.tar.gz ./*}#2)将内容通过scp复制到web网页目录scp_web_server(){for hosts in ${web_server}do        scp ${Sdir}/web-${Name}.tar.gz root@${hosts}:/opt        ssh root@${hosts} "mkdir -p ${Ddir}/web-${Name} && \                        tar zxf ${Sdir}/web-${Name}.tar.gz -C ${Ddir}/web-${Name}                        rm -rf ${Ddir}/web && \                        ln -s ${Ddir}/web-${Name} ${Ddir}/web"done}deploy(){        get_code        scp_web_server}        deploy[root@jenkins scripts]# chmod +x html_deploy_tag.sh 

接下来:







访问nginx:

[root@nginx ~]# ll /code     #这样就可以很清楚的查看构建的是哪个版本总用量 0lrwxrwxrwx 1 root root 34 2月  25 20:21 web -> /code/web-2020-02-25-20-21-18-v1.3drwxr-xr-x 2 root root 39 2月  25 19:37 web-2020-02-25-19-37-13drwxr-xr-x 2 root root 39 2月  25 20:21 web-2020-02-25-20-21-18-v1.3

部署到此。回退的问题仍没有解决!比如:部署两次v1.3版本就会产生两个v1.3的目录!

3)解决版本回退、重复构建的问题
[root@jenkins scripts]# vim html_deploy_tag_rollback.sh     #优化脚本,支持回退#!/bin/bashDATE=$(date +%Y-%m-%d-%H-%M-%S)web_server="192.168.1.8"Sdir=/optDdir=/codeName=${DATE}-${git_version}                 #${git_version}是在jenkins界面定义的变量#1)进入项目目录,将内容进行打包#${WORKSPACE}是Jenkins的内置变量,表示构建目录的绝对路径get_code(){        cd ${WORKSPACE} && \        tar zcf ${Sdir}/web-${Name}.tar.gz ./*}#2)将内容通过scp复制到web网页目录scp_web_server(){for hosts in ${web_server}do        scp ${Sdir}/web-${Name}.tar.gz root@${hosts}:/opt        ssh root@${hosts} "mkdir -p ${Ddir}/web-${Name} && \                        tar zxf ${Sdir}/web-${Name}.tar.gz -C ${Ddir}/web-${Name}                        rm -rf ${Ddir}/web && \                        ln -s ${Ddir}/web-${Name} ${Ddir}/web"done}rollback(){back_file=$(ssh root@${web_server} "find /code/ -maxdepth 1 -type d -name "web-*-${git_version}"")for hosts in ${web_server}do        ssh root@${hosts} "rm -rf ${Ddir}/web && \           ln -s ${back_file} ${Ddir}/web"done}deploy(){        get_code        scp_web_server}#判断之前是否部署过该版本的commit,如果没有部署则部署,如果有则提示已经部署过然后退出#如果是回退,则不受限制if [ ${deploy_env} == "deploy" ];then        if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then                echo "你已经部署过该${git_version}版本"                exit 1        else                deploy        fielif  [ ${deploy_env} == "rollback" ];then        rollbackfi[root@jenkins scripts]# chmod +x html_deploy_tag_rollback.sh 

接下来配置:




测试:

web页面:

执行回退操作:

有兴趣可以构建时的控制台输出!

web页面:

[root@nginx ~]# ll /code            #可以看出只创建了一次v1.3的目录总用量 0lrwxrwxrwx 1 root root 34 2月  25 20:46 web -> /code/web-2020-02-25-20-21-18-v1.3drwxr-xr-x 2 root root 39 2月  25 19:37 web-2020-02-25-19-37-13drwxr-xr-x 2 root root 39 2月  25 20:21 web-2020-02-25-20-21-18-v1.3drwxr-xr-x 2 root root 39 2月  25 20:46 web-2020-02-25-20-46-15-v1.1

重复构建、回退问题解决!


目录 插件 服务 配置 服务器 版本 页面 代码 信息 内容 网页 变量 方式 路径 测试 软件 问题 项目 登录 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 互联网科技公司经营范围 厦门中拓互联网络科技有限公司 新华互联网科技学院 上海挚品互联网科技 嘟嘟瓜互联网科技 九亚互联网科技 电子科技大学互联网 奔汉互联网科技 互联网科技视频素材 老年人脱离互联网科技的作文 央行互联网金融科技公司 现代互联网科技股 电子科技大学互联网创业大赛 国大互联网教育科技有限公司工作 本届互联网博览会上的黑科技 河南住房之家互联网科技 郑州欣桑互联网科技有限公司 东营紫格互联网科技 科技发展第三阶段互联网时代 江苏根荣互联网科技 互联网科技工作委员会副主任毛军 A股互联网金融科技公司 厦门中拓互联网络科技有限公司 中国 科技 互联网 卫星互联网科技股票 中化能源互联网科技招聘 特约风豹互联网科技为什么扣费 群盈汇互联网科技有限公司 现代科技的标志之一的互联网
0