部署Git,Gitlab将采用两台虚拟机模拟生产环境。
前提是这两台虚拟机之间做了免密登录
gitserver:192.168.248.135
gitclient:192.168.248.128
一、部署git服务
1、创建git仓库
git-server上的操作
yum install git git-core gitweb -y
useradd -m git
passwd git
mkdir /git-root/
cd /git-root/
git init --bare shell.git
Initialized empty Git repository in /git-root/shell.git/
注意:
git init 和 git init --bare 的区别:
使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。
使用”git init --bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)这个就是最好把远端仓库初始化成bare仓库的原因
chown -R git:git shell.git
2、git仓库测试
git-client上的操作
录入用户的邮箱和用户名
git config --global user.email "you@example.com"
克隆文件
git clone git@192.168.248.135:/git-root/shell.git
cd shell/
vim test.sh
将新的文件保存在暂存区
git add test.sh
提交
git commit -m 'first commit'
推送至远程仓库
git push origin master
二、Git的基本概念
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
工作区、版本库中的暂存区和版本库之间的关系的示意图:
-
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
-
图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
-
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
-
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
-
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
-
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
-
当执行 "git rm --cached
" 命令时,会直接从暂存区删除文件,工作区则不做出改变。 -
当执行 "git checkout ." 或者 "git checkout --
" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。 -
当执行 "git checkout HEAD ." 或者 "git checkout HEAD
" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
常用命令:
git init # 初始化
git add main.cpp # 将某一个文件添加到暂存区
git add . # 将文件夹下的所有的文件添加到暂存区
git commit -m ‘note‘ # 将暂存区中的文件保存成为某一个版本
git log # 查看所有的版本日志
git status # 查看现在暂存区的状况
git diff # 查看现在文件与上一个提交-commit版本的区别
git reset --hard HEAD^ # 回到上一个版本
git reset --hard XXXXX # XXX为版本编号,回到某一个版本
git pull origin master # 从主分支pull到本地
git push -u origin master # 从本地push到主分支
git pull # pull默认主分支
git push # push默认主分支 ...
三、Gitlab Server部署
1、环境配置
关闭防火墙、SELinx
开启邮件服务
systemctl start postfix
systemctl enable postfix
2、部署Gitlab
1、安装gitlab依赖包
yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
# gitlab-ce 10.x.x以后的版本需要依赖policycoreutils-python
2、建议点击下方链接直接跳转到下载页面找到对应版本下载
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
我这里用的是gitlab-ce 12.3.9
使用rpm -ivh xxx
进行安装
head -1 /opt/gitlab/version-manifest.txt
查看版本号
3、Gitlab配置登录链接
vim /etc/gitlab/gitlab.rb
设置本地ip
没有域名,可以设置为本机IP地址
external_url 'http://172.17.0.61'
4、初始化Gitlab
gitlab要求语言环境为英文环境,必须切换,切换方法如下:
echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
初始化配置检查
gitlab-ctl reconfigure
5、启动Gitlab服务
gitlab-ctl start
lsof -i:80
检查是否起来服务
6、Gitlab设置https方式
如果想要以上的 https 方式正常生效使用,则需要把 letsencrypt 自动生成证书的配置打开,这样在执行重新让配置生效命令 (gitlab-ctl reconfigure) 的时候会自动给域名生成免费的证书并自动在 gitlab 自带的 nginx 中加上相关的跳转配置,都是全自动的,非常方便。
vim /etc/gitlab/gitlab.rb
letsencrypt['enable'] = true //如果因为这行报错,改成false即可
letsencrypt['contact_emails'] = ['276267003@qq.com'] # 添加联系人的电子邮件地址
7、Gitlab添加smtp邮件功能
vim /etc/gitlab/gitlab.rb
postfix 并非必须的;根据具体情况配置,以 SMTP 的为例配置邮件服务器来实现通知;参考配置如下:
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxxxxx@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'xxxxx@qq.com'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxxx@qq.com"
gitlab_rails['smtp_password'] = "szyxgxozjvaeddih" #这是我的qq邮箱授权码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
修改配置后需要初始化配置,先关掉服务再重新初始化
gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl start
8、Gitlab发送邮件测试
gitlab-rails console
irb(main):004:0> Notify.test_email('youid@qq.com', 'Message Subject', 'Message Body').deliver_now //输入测试命令,回车
然后去qq邮箱查看是否收到邮件
部署完成!!!