gitlab 安装配置

DevOps 简介:

是 Development 和 Operations 的组合,也就是开发和运维的简写。DevOps 是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等。整条生命周期中协作和沟通的最佳实践,DevOps 强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付。

DevOps 四大平台:代码托管(gitlab/svn)项目管理(jira)运维平台(腾讯蓝鲸/开源平台)持续交付(Jenkins/gitlab)为什么要推广 DevOps?

DevOps 强调团队协作、相互协助、持续发展,然而传统的模式是开发人员只顾开发程序,运维只负责基础环境管理和代码部署及监控等,其并不是为了一个共同的目标而共同实现最终的目的,而 DevOps 则实现团队作战,即无论是开发、运维还是测试,都为了最终的代码发布、持续部署和业务稳定而付出各自的努力,从而实现产品设计、开发、测试和部署的良性循环,实现产品的最终持续交付。

什么是持续集成(CI-Continuous integration):

持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。

什么是持续部署(CD-continuous deployment):

是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。

什么是持续交付(Continuous Delivery):

持续交付是在持续部署的基础之上, 将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。

程序部署方式的发展过程:开发自己上传—最原始的方案开发给运维手动上传—运维自己手动部署运维使用脚本复制—半自动化结合 web 界面一键部署—自动化常见的持续集成开源工具:

在公司的服务器安装某种程序,该程序用于按照特定格式和方式记录和保存公司多名开发人员不定期提交的源代码,且后期可以按照某种标记及方式对用户提交的数据进行还原。

CVS(Concurrent Version System):

早期的集中式版本控制系统,现已基本淘汰会出现数据提交后不完整的情况

SVN(Subversion)–集中式版本控制系统

2000 年开始开发,目标就是替代 CVS 集中式管理,依赖于网络,一台服务器集中管理。目前依然有部分公司在使用

Gitlib—分布式版本控制系统:

Linus 在 1991 年创建了开源的 Linux 内核svn下载项目到本地离线,从此 Linux 便不断快速发展,不过 Linux 的壮大是离不开全世界的开发者的参与,这么多人在世界各地为 Linux 编写代码,那 Linux 内核的代码是如何管理的呢?事实是,在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!你也许会想,为什么Linus 不把 Linux 代码放到版本控制系统里呢?不是有 CVS、SVN 这些免费的版本控制系统吗?因为 Linus 坚定地反对CVS 和 SVN,这些集中式的版本控制系统不但速度慢,且必须联网才能使用,但是也有一些商用的版本控制系统,虽然比CVS、SVN 好用,但那是付费的,和 Linux 的开源精神不符,不过到了 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统,但是安定团结的大好局面在 2005 年就被打破了,原因是 Linux 社区牛人聚集,不免沾染了一些梁山好汉的江湖习气,开发 Samba 的 Andrew 试图破解 BitKeeper 的协议(这么干的其实也不只他一个),被 BitMover 公司发现了(监控工作做得不错!)svn下载项目到本地离线,于是 BitMover 公司怒了,要收回 Linux 社区的免费使用权,这时候其实 Linus 可以向 BitMover 公司道个歉,保证以后严格管教弟兄们,但这是不可能的,而且实际情况是 Linus 自己花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 内核的源码已经由 Git 管理了!牛是怎么定义的呢?大家可以体会一下,然后 Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。

版本控制系统分类:集中式版本控制系统:

任何的提交和回滚都依赖于连接服务器 SVN 服务器是单点

分布式版本控制系统:

Git 在每个用户都有一个完整的服务器,然后在有一个中央服务器,用户可以先将代码提交到本 地,没有网络也可以先提交到本地,然后在有网络的时候再提交到中央服务器,这样就大大方便了开发者,而相比 CVS 和 SVN 都是集中式的版本控制系统,工作的时候需要先从中央服务器获 取最新的代码,改完之后需要提交,如果是一个比较大的文件则需要足够快的网络才能快速提交完成,而使用分布式的版本控制系统,每个用户都是一个完整的版本库,即使没有中央服务器也可以提交代码或者回滚,最终再把改好的代码提交至中央服务器进行合并即可。

gitlab 官网:

官方文档:

包下载地址:

Gitlab 部署:

#环境要求

Ubuntu 系统环境准备:

$ sudo su - root[sudo] password for jack:# passwdEnter new UNIX password:Retype new UNIX password:passwd: password updated successfully# vim /etc/ssh/sshd_config #设置 root 用户可以远程 ssh 连接PermitRootLogin yesPasswordAuthentication yes# cat /etc/netplan/01-netcfg.yaml #配置 ubuntu 网卡和主机名# This file describes the network interfaces available on your system# For more information, see netplan(5).network:    version: 2    renderer: networkd    ethernets:        eth0:        dhcp4: no        addresses: [192.168.8.2/21]        gateway4: 192.168.15.254        nameservers:            addresses: [192.168.15.254]# cat /etc/hostnamejenkins.example.com# reboot# vim /etc/apt/sources.list #配置 ubuntu 仓库deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe ultiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse# apt update# 安装必备命令# apt install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute gcc openssh-server lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip ipmitool

安装 gitlab:

1. apt 或 yum 安装方式,安照官方文档配置安装。默认使用的仓库在国外,会比较慢。可以配置国内源

# 安装 gitlab-ce 源# curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash# sudo apt-get install gitlab-ce=15.8.3-ce.0

2. 包安装方式

官方包下载地址:

国内包下载地址:

注:下载的安装包,必须和 linux 系统版本一直,否则无法启动

# wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_15.8.3-ce.0_arm64.deb/download.deb# dplg -c gitlab-ce_15.8.3-ce.0_amd64.deb #显示安装了哪些文件# dpkg -i gitlab-ce_15.8.3-ce.0_amd64.deb #安装包命令

配置 gitlab:

# grep "^[a-Z]" /etc/gitlab/gitlab.rbexternal_url 'http://192.168.8.3' #设置管理 url 地址,可以使用域名############################################### 修改一下两项可以避免和别的服务产生端口冲突,如:jenkins 服务puma['port'] = 8080gitlab_workhorse['auth_backend'] = "http://localhost:8888" #注意 puma['port']与gitlab_workhorse['auth_backend']的端口必须相同##############################################gitlab_rails['webhook_timeout'] = 90 #修改超时时间gitlab_rails['git_timeout']=90 #修改超时时间# 可选邮件通知设置gitlab_rails['smtp_enable'] = truegitlab_rails['smtp_address'] = "smtp.qq.com"gitlab_rails['smtp_port'] = 465gitlab_rails['smtp_user_name'] = "2973707860@qq.com"gitlab_rails['smtp_password'] = "授权码"gitlab_rails['smtp_domain'] = "qq.com"gitlab_rails['smtp_authentication'] = :logingitlab_rails['smtp_enable_starttls_auto'] = truegitlab_rails['smtp_tls'] = truegitlab_rails['gitlab_email_from'] = "2973707860@qq.com"user["git_user_email"] = "2973707860@qq.com"# 修改数据存储位置git_data_dirs({“default” => {“path” => “/data/gitlab-data”}})# 修改备份存储位置gitlab_rails['backup_path'] = "/data/gitlab-backups"# 备份保存30天gitlab_rails['manage_backup_path'] = truegitlab_rails['backup_path'] = "/var/opt/gitlab/backups"gitlab_rails['backup_archive_permissions'] = 0644 #生成的备份文件权限gitlab_rails['backup_keep_time'] = 2592000 #默认备份保留天数为7天(604800秒,这里是30天)# gitlab-ctl reconfigure #重新加载配置并启动服务,修改完配置文件要执行此操作

验证端口及状态:

80和8080端口是 gitlib 内部服务使用的,如果有其它程序占用会导致初始化失败或无法访问!# lsof -i:80

登录 gitlab:

使用配置的 url 地址,如: 登陆 web 管理界面

默认用户为 root,初始密码在 /etc/gitlab/initial_root_password 文件中。

安装生成的主要目录有:

/etc/gitlab #配置文件目录

/run/gitlab #运行 pid 目录

/opt/gitlab #安装目录

/var/log/gitlab #日志目录

/var/opt/gitlab #数据目录(包括组成 gitlab 各服务的配置文件和数据;gitlab 备份;项目代码等)

/var/opt/gitlab/backups/ #代码备份文件默认存放的目录

/var/opt/gitlab/git-data/repositories/ #代码库默认存储目录

管理 gitlab 服务的常用命令:

# gitlab-rails #用于启动控制台进行特殊操作,比如修改管理员密码、打开数据库控制台(gitlab-rails dbconsole)等# gitlab-psql #数据库命令行# gitlab-rake #数据备份恢复等数据操作# gitlab-ctl #客户端命令行操作行# gitlab-ctl stop #停止 gitlab# gitlab-ctl start #启动 gitlab# gitlab-ctl restar #重启 gitlab# gitlab-ctl status #查看组件运行状态# gitlab-ctl tail nginx #查看某个组件的日志

git 常用命令:

配置

$ git config --list #显示当前的Git配置$ git config -e [--global] #编辑Git配置文件$ git config --global --list #列出用户全局设置# 设置提交代码时的用户信息,必须设置,因为提交代码是要使用该信息,它会永久记录到你的提交中$ git config [--global] user.name "[name]"$ git config [--global] user.email "[email address]"$ git config --global user.name "name" #设置全局用户名$ git config --global user.email xxx@xx.com #设置全局邮箱

创建仓库

$ git init # 在当前目录新建一个Git代码库$ git init [project-name] # 新建一个目录,将其初始化为Git代码库$ git clone [url] # 下载一个项目和它的整个代码历史

增加文件到暂存区

gitlab 安装配置,gitlab 安装配置,第1张

git add index.html|[dir]|. # 添加指定文件、目录或当前目录下所有数据到暂存区git add -f App.class # 用 -f 强制添加到暂存区

代码提交到工作区(相当于本地仓库)

git commit -m "11" # 提交暂存区文件到工作区,-m 选项是为提交设置一个注释内容git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区

查看信息

git status # 查看工作区的状态git log --stat # 显示commit历史,以及每次commit发生变更的文件git log # 查看操作日志

远程同步

git pull # 获取代码到本地git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并git push [remote] [branch] # 上传本地指定分支到远程仓库git push [remote] --force # 强行推送当前分支到远程仓库,即使有冲突git push [remote] --all # 推送所有分支到远程仓库git push # 提交代码到服务器

版本回退

git reset --hard HEAD^^ # git 版本回滚,HEAD 为当前版本,加一个^为上一个,^^为上上一个版本git reflog # 获取每次提交的 ID,可以使用--hard 根据提交的 ID 进行版本回退git reset --hard 5ae4b06 # 回退到指定 id 的版本

分支

$ git branch # 列出所有本地分支$ git branch -r # 列出所有远程分支$ git branch -a # 列出所有本地分支和远程分支$ git branch [branch-name] # 新建一个分支,但依然停留在当前分支$ git checkout -b [branch] # 新建一个分支,并切换到该分支$ git branch [branch] [commit] # 新建一个分支,指向指定commit$ git branch --track [branch] [remote-branch] # 新建一个分支,与指定的远程分支建立追踪关系$ git checkout [branch-name] # 切换到指定分支,并更新工作区$ git checkout - # 切换到上一个分支$ git branch --set-upstream [branch] [remote-branch] # 建立追踪关系,在现有分支与指定的远程分支之间$ git merge [branch] # 合并指定分支到当前分支$ git cherry-pick [commit] # 选择一个commit,合并进当前分支$ git branch -d [branch-name] # 删除分支$ git push origin --delete [branch-name] # 删除远程分支$ git branch -dr [remote/branch]

git 定义忽略文件

在 Git 工作区的根目录下创建一个 .gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。

忽略文件的原则是:

1. 忽略操作系统自动生成的文件,比如缩略图等;

2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;

3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

# vim .gitignore #模版,可以直接使用# Windows:Thumbs.dbehthumbs.dbDesktop.ini# 排除所有.开头的隐藏文件:.*  # 排除所有.class文件:*.class# 忽略 build/ 目录下的所有文件build/  # 不排除.gitignore和App.class:!.gitignore!App.class

通过网页管理 gitlab:

关闭账号注册功能:

三道杠 –> 管理员 –> 设置 –> 通用 –> 注册限制 –> 已启用注册功能,去掉勾选 –> 保存更改

创建 gitlab 账户:

点点点

创建组:

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。

使用管理员创建项目:

点点点

将用户添加到组:

操作实例:

1. 创建一个测试页面:

找到项目界面

添加一个页面

2. git 客户端测试 clone 项目:

# git clone http://192.168.8.3/test-service/test-project.gitCloning into 'test-project'...Username for 'http://192.168.8.3': jackPassword for 'http://jack@192.168.8.3':remote: Enumerating objects: 3, done.remote: Counting objects: 100% (3/3), done.remote: Total 3 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.# cat test-project/index.html

11111111111

3. 编辑文件并测试提交:

# cd test-project/# git config --global user.name "jack"# git config --global user.email 2973707860@qq.com# vim index.html# cat index.html

11111111111

22222222222

# git add index.html# git commit -m "v1"# git pushUsername for 'http://192.168.182.130': aaaPassword for 'http://aaa@192.168.182.130':Enumerating objects: 5, done.Counting objects: 100% (5/5), done.Delta compression using up to 2 threadsCompressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 246 bytes | 246.00 KiB/s, done.Total 3 (delta 1), reused 0 (delta 0)To http://192.168.182.130/web1/webapp.gitadccea9..2846709 main -> main

4. 登录 gitlab 端验证数据:

配置用户可以使用 ssh 协议从 gitlab 克隆、pull、push 代码:

# ssh-keygen# cd /root/.ssh/# lltotal 12-rw------- 1 root root 1679 Mar 25 13:43 id_rsa-rw-r--r-- 1 root root 394 Mar 25 13:43 id_rsa.pub# cat id_rsa.pub #将公钥添加到 web 界面的用户中# git clone git@192.168.182.130:web1/webapp.git #测试

gitlab 数据备份恢复:

备份数据主要包括两种,一个是 gitlab 自身的配置,一个是存储在 gitlab 中的代码

注:可以在任何目录下,执行备份或恢复命令。GitLab 在备份或恢复数据的时候需要满足 gitlab 的版本号是一致的。

关于备份的配置如下,一般保持默认

# mkdir -p /data/gitlab-data #创建数据存储目录# mkdir -p /data/gitlab-backups #创建备份存储位置# /etc/gitlab/gitlab.rb# 修改数据存储位置git_data_dirs({   "default" => {       "path" => "/data/gitlab-data"    }})# 修改备份存储位置gitlab_rails['backup_path'] = "/data/gitlab-backups"# 备份保存30天gitlab_rails['manage_backup_path'] = truegitlab_rails['backup_path'] = "/var/opt/gitlab/backups"gitlab_rails['backup_archive_permissions'] = 0644 #生成的备份文件权限gitlab_rails['backup_keep_time'] = 2592000 #默认备份保留天数为7天(604800秒,这里是30天)# gitlab-ctl stop# gitlab-ctl reconfigure# gitlab-ctl start

备份 GitLab 配置:

# 在 GitLab 12.3 中引入。备份目录为:/etc/gitlab/config_backup/。gitlab-ctl backup-etc –backup-path 会将备份放置在指定目录中,如果该目录不存在,将创建该目录。建议使用绝对路径。

# gitlab-ctl backup-etc# crontab -e -u root #自动备份15 04 * * 2-6 gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/

恢复 GitLab 配置:

# mv /etc/gitlab /etc/gitlab.$(date +%s)# tar -xf gitlab_config_1487687824_2017_02_21.tar -C /# gitlab-ctl reconfigure

需要手动完成的配置备份:

/etc/gitlab/gitlab.rb #gitlab 配置文件

/etc/gitlab/gitlab-secrets.json

/var/opt/gitlab/nginx/conf/* #nginx配置文件

/etc/postfix/main.cfpostfix #邮件配置备份

注:恢复时,手动把以上备份文件放到原位置即可

备份 GitLab 应用程序数据:

包括:Git 存储库、SQL 数据

# gitlab-backup create #GitLab 12.1 之后版本# gitlab-rake gitlab:backup:create #GitLab 12.1 及之前版本。在任意目录即可备份当前 gitlab 数据# 备份命令生成的备份文件:/var/opt/gitlab/backups/ #Gitlab 数据备份目录,生成的备份文件文件名格式如:1678343824_2023_03_09_15.8.3_gitlab_backup.tar# vim gitlab_bak.cron #自动备份应用程序数据0 1 * * * /root/gitlab_bak.sh# vim gitlab_bak.sh#!/bin/shgitlab-backup createcd /var/opt/gitlab/backups/mkdir gitlab_$(date +%Y%m%d)find . -name '*.tar' -ctime -1 -exec cp {} /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)/ ;cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)cp /var/opt/gitlab/nginx/conf /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)cp /etc/postfix/main.cfpostfix /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/gitlab_$(date +%Y%m%d)zip -rP password gitlab_$(date +%Y%m%d).zip gitlab_$(date +%Y%m%d)/cp gitlab_$(date +%Y%m%d).zip /backup_wuhan/gitlab/# crontab /root/gitlab_bak.cron >~/log# crontab -l

恢复 GitLab 应用程序数据:

# gitlab-ctl stop puma #停止 gitlab 数据服务# gitlab-ctl stop sidekiq #停止 gitlab 数据服务# 不要写备份文件的全名,写到 unix 时间戳_年_月_日_gitlab 版本号即可# gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce #GitLab 12.1 之后版本# gitlab-rake gitlab:backup:restore BACKUP=备份文件名 #GitLab 12.1 及之前版本# gitlab-ctl start sidekiq# gitlab-ctl start puma

本文到此结束,希望对大家有所帮助!

关于作者:

生活百科常识网