
@[toc]
1. git倉庫版本管理系統(tǒng)

環(huán)境
[root@node1 tools]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@node1 ~]# uname -a
Linux node1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Git的工作區(qū)、暫存區(qū)和版本庫的含義
- 工作區(qū):就是你在電腦里能看到的目錄。
- 暫存區(qū):英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)。
- 版本庫:工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。
工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關(guān)系:
1.安裝和配置 git
#安裝git
[root@node1 ~]# yum install git -y
#查看版本
[root@node1 ~]# git --version
git version 1.8.3.1
#git設(shè)置用戶
[root@node1 ~]# git config --global user.name "douer"
[root@node1 ~]# git config --global user.email "245684979@qq.com"
[root@node1 ~]# git config --global color.ui "true"
#git倉庫添加文件
git add filename --將文件添加到暫存區(qū)
git add . -- 將本地倉庫所有的文件添加到暫存區(qū)
git commit -m "提交說明" --使用commit將暫存區(qū)的文件進(jìn)行提交到本地的分支,-m 代表本次的提交說明
#查看工作區(qū)和緩存區(qū)的狀態(tài)
[root@node1 warehouse]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
2. 創(chuàng)建版本庫
#創(chuàng)建倉庫目錄
[root@node1 ~]# mkdir /warehouse
[root@node1 ~]# cd /warehouse/
[root@node1 warehouse]# git init
Initialized empty Git repository in /warehouse/.git/
[root@node1 warehouse]# ls .git/
branches config description HEAD hooks info objects refs
3.git倉庫添加文件
git add filename --將文件添加到暫存區(qū)
git add . -- 將本地倉庫所有的文件添加到暫存區(qū)
git commit -m "提交說明" --使用commit將暫存區(qū)的文件進(jìn)行提交到本地的分支,-m 代表本次的提交說明
#查看工作區(qū)和緩存區(qū)的狀態(tài)
git status
#練習(xí)測試
[root@node1 warehouse]# echo 88888 >> file1
[root@node1 warehouse]# git add .
[root@node1 warehouse]# git commit -m 'add one file'
[master (root-commit) 76dd535] add one file
1 file changed, 1 insertion(+)
create mode 100644 file1
4. git 修改文件名稱并提交
git mv file1 file3
git commit -m 'change file name'
在這里插入圖片描述
5. git的文件對比
git diff file1 #本地目錄和緩沖去文件對比
git diff --cached file1 #緩沖區(qū)文件和倉庫文件對比
在這里插入圖片描述
6. 實現(xiàn)回退功能
#查看回退版本
git log --oneline
#查看所有歷史版本
git reflog --oneline
#回退
git reset --hard <版本ID號>
image
image
撤回
[root@node1 warehouse]# echo 888888 >> file2
[root@node1 warehouse]# git diff file2
diff --git a/file2 b/file2
index c488b79..18fb37c 100644
--- a/file2
+++ b/file2
@@ -1,2 +1,3 @@
66666
豆二豆二
+888888
[root@node1 warehouse]# git checkout file2
[root@node1 warehouse]# git diff file2
[root@node1 warehouse]# cat file2
66666
豆二豆二
撤銷修改的文件
提交到緩沖區(qū)的文件撤回
git reset HEAD file2
未add到緩沖區(qū)的文件撤回
git checkout -- file2
7. git分支管理和策略
分支管理的目的就是將當(dāng)前已經(jīng)可以發(fā)布模塊放在一個分支,在另外一個分支進(jìn)行進(jìn)一步開發(fā),開發(fā)完成后可以進(jìn)行分支合并。
在gitlab上默認(rèn)的分支是master(主分支),也只有這一個分支,其他分支需要開發(fā)人員自行建立。
#查看分支
git branch ----> * master
#增加一個dev新分支
git branch dev01
#刪除分支
git branch -d <name>
#切換dev分支
git checkout dev01
#合并分支
git merge master
#在開發(fā)分支上合并主分支
git merge master -m '注釋'
#切回主分支
git checkout master
#在主分支次合并開發(fā)分支
git merge dev01 -m '注釋'
實際開發(fā)時,應(yīng)該按照以下幾個原則進(jìn)行開發(fā)
- 1、master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不在上面干活
- 2、開發(fā)都在dev分支,也就是說dev分支是不穩(wěn)定的,到某個時候,比如發(fā)布版本的時候,將dev分支合并到master上,在master分支發(fā)布版本
- 3、開發(fā)者可以在dev分支上開發(fā),每個人都有自己的分支,最后往dev分支合并就可以了
- 4、合并分支的時候,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,可以看出曾經(jīng)做過合并,而fast forward則看不出來
8.git查看提交歷史
#查看提交歷史版本
git log #詳細(xì)歷史記錄
git log --oneline #簡潔查看
git log --graph #查看歷史中什么時候出現(xiàn)了分支、合并
git log --reverse #逆向顯示版本日志
git log --author=douer --oneline -5 #查找指定用戶的提交日志并只顯示5行
git log --oneline --before={3.weeks.ago} --after={2019-09-28} --no-merges
#查找三周前且在九月二十八日之后的所有提交
9. git標(biāo)簽管理
發(fā)布一個版本時,我們通常先在版本庫中打一個標(biāo)簽(tag),這樣,就唯一確定了打標(biāo)簽時刻的版本。將來無論什么時候,取某個標(biāo)簽的版本,就是把那個打標(biāo)簽的時刻的歷史版本取出來。所以,標(biāo)簽也是版本庫的一個快照。我們在發(fā)布一個版本的時候,會對應(yīng)有一個commit, 但是這個commit可能是比較難記的,所以選擇了一個記憶簡單的方式 tag,例如v1.0 與某個commit綁定。
標(biāo)簽就是給commit起一個別名,容易記憶
首先,切換到需要打標(biāo)簽的分支上
#給當(dāng)前版本打標(biāo)簽
git tag v1.2
#給任意版本打標(biāo)簽
git tag -a v1.0 -m '注釋,優(yōu)化什么 修復(fù)Bug' <commit的ID>
#刪除標(biāo)簽
git tag -d v1.2
====================================================
[root@node1 warehouse]# git log --oneline
7af745f add file6
45d411e add file5
6f7040f add file4
ff8f205 first
d53b968 add file2
f8d3b95 change file1 name file3
76dd535 add one file
[root@node1 warehouse]# git tag
[root@node1 warehouse]# git tag v1.0
[root@node1 warehouse]# git tag
v1.0
[root@node1 warehouse]# git show v1.0
commit 90092050359637d73142254e6f9e813d2683b788
Author: douer <245684979@qq.com>
Date: Mon Oct 28 14:08:07 2019 +0800
file5
diff --git a/file5 b/file5
index 3c2df07..b53bca1 100644
--- a/file5
+++ b/file5
@@ -1 +1 @@
-9999
+456456
[root@node1 warehouse]# git tag -a v1.1 -m 'v1.1 add 機器人' 76dd535
[root@node1 warehouse]# git tag
v1.0
v1.1
[root@node1 warehouse]# git show v1.1
tag v1.1
Tagger: douer <245684979@qq.com>
Date: Mon Oct 28 14:25:25 2019 +0800
v1.1 add 機器人
commit ff8f2058237206f34be4670cc5822d3b70f333b5
Author: douer <245684979@qq.com>
Date: Mon Oct 28 13:46:59 2019 +0800
first
diff --git a/file4 b/file4
new file mode 100644
index 0000000..e69de29
擴展
Git 打補丁-- patch 和 diff 的使用
diff
patch 打補丁,創(chuàng)建補丁,卸載補丁
10. git遠(yuǎn)程倉庫gitee—碼云
git克隆 碼云網(wǎng)站復(fù)制項目鏈接
[root@node1 warehouse]# git clone https://gitee.com/fuhai/jpress.git
Cloning into 'jpress'...
remote: Enumerating objects: 59006, done.
remote: Counting objects: 100% (59006/59006), done.
remote: Compressing objects: 100% (18822/18822), done.
remote: Total 59006 (delta 24997), reused 55226 (delta 23282)
Receiving objects: 100% (59006/59006), 139.10 MiB | 927.00 KiB/s, done.
Resolving deltas: 100% (24997/24997), done.
#創(chuàng)建ssh秘鑰在碼云上進(jìn)行鏈接
ssh-keygen -t rsa
cat /root/.ssh/id_rsa.pub
cd /root/demo/
ll
git remote add origin git@gitee.com:linuxcx/linux.git
git push -u origin master
11. git導(dǎo)出代碼的方法
#git archieve
git archive --format tar.gz --output "./output.tar.gz" master
* 將master分支打包為output.tar.gz
* --format 指明打包格式,若不指明此項,則根據(jù)--output中的文件名推斷文件格式。
* --output 指明輸出包名
#所以也可以將上述命令簡化為:
git archive --output "./output.tar.gz" master
#可以使用"-l"參數(shù)獲得支持的文件格式列表
[root@node1 warehouse]# git archive -l
tar
tgz
tar.gz
zip
#打包不同的分支或commit
>如果想打包不同分支,只要使用不同分支名即可。比如有一個分支名為“dev01”,可以用如下命令將其打包。
git archive --format tar.gz --output "./output.tar.gz" dev01
>如果要打包某個commit,只要先使用git log找到相應(yīng)的commit id, 再使用該commit id打包即可。
git archive --format tar.gz --output "./output.tar.gz" 5ca16ac0d603603
#打包某個目錄
>如果想打包master下的目錄,可以用下面命令
git archive --format tar.gz --output "./output.tar.gz" master <name1> <name2>
#注意:打包建議在代碼庫的根目錄下進(jìn)行,不然會碰到各種問題
12. git升級
自帶的git都是1.8.3.1版本的,比較老了,所以有時候需要升級一下git版本
#測試環(huán)境
[root@node1 tools]# git --version
git version 1.8.3.1
[root@node1 tools]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#安裝依賴軟件
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc -y
yum install gcc perl-ExtUtils-MakeMaker -y
#卸載低版本git
yum remove git -y
#下載最新版本
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.23.0.tar.xz
#進(jìn)行編譯安裝最新版git
[root@node1 warehouse]# cd /usr/local/src/
[root@node1 src]# tar xf /server/tools/git-2.23.0.tar.xz
[root@node1 src]# cd git-2.23.0/
[root@node1 git-2.23.0]# make prefix=/usr/local/git all
[root@node1 git-2.23.0]# make prefix=/usr/local/git install
[root@node1 git-2.23.0]# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
[root@node1 git-2.23.0]# . /etc/profile
#查看最新版本
[root@node1 git-2.23.0]# git --version
git version 2.23.0
2. GitLab分布式版本控制器
GitLab簡介
GitLab是一個利用 Ruby on Rails 開發(fā)的開源應(yīng)用程序,實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進(jìn)行訪問公開的或者私人項目。Ruby on Rails 是一個可以使你開發(fā)、部署、維護 web 應(yīng)用程序變得簡單的框架。GitLab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個文件歷史庫。它還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復(fù)用,便于日后有需要的時候進(jìn)行查找。
由于Git的分布式特性,即使Gitlab不可用,開發(fā)人員仍然可以在本地提交代碼。
1. gitlab安裝
#配置base源和epel源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#下載并安裝gitlab
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
image
#設(shè)置訪問url和關(guān)閉prometheus
[root@node1 tools]# vim /etc/gitlab/gitlab.rb
external_url 'http://douergitlab.com'
prometheus_monitoring['enable'] = false
#配置gitlab通過smtp發(fā)送郵件
[root@node1 tools]# vim /etc/gitlab/gitlab.rb
52 gitlab_rails['gitlab_email_enabled'] = true
53 gitlab_rails['gitlab_email_from'] = '245684979@qq.com'
54 gitlab_rails['gitlab_email_display_name'] = 'linux_gitlab'
#配置mail郵件服務(wù)
517 gitlab_rails['smtp_enable'] = true
518 gitlab_rails['smtp_address'] = "smtp.qq.com"
519 gitlab_rails['smtp_port'] = 25
520 gitlab_rails['smtp_user_name'] = "245684979@qq.com"
521 gitlab_rails['smtp_password'] = "<passwd>"
522 gitlab_rails['smtp_domain'] = "smtp.qq.com"
523 gitlab_rails['smtp_authentication'] = "login"
524 gitlab_rails['smtp_enable_starttls_auto'] = true
525 gitlab_rails['smtp_tls'] = true
#重新加載配置文件_需要等待一會
gitlab-ctl reconfigure
瀏覽器訪問域名
http://www.douergitlab.com/
2.gitlab漢化
#下載漢化包
https://gitlab.com/xhang/gitlab
gitlab-ctl stop
tar xf gitlab-12-0-stable-zh.tar.gz
\cp -a gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
gitlab-ctl restart
頁面顯示502,請耐心等待一會,重啟的時間較久
在這里插入圖片描述在這里插入圖片描述
3. gitlab-用戶-用戶組-項目之間的關(guān)系
先創(chuàng)建用戶組—>在基于用戶組創(chuàng)建項目—>最后創(chuàng)建用戶—>編輯用戶組—>添加成員—>注意權(quán)限

※4. gitlab災(zāi)備措施_備份恢復(fù)和遷移※
備份恢復(fù)與遷移非常簡單. 使用一條命令即可創(chuàng)建完整的Gitlab備份:
4.1 備份
[root@node1 ~]# gitlab-rake gitlab:backup:create
[root@node1 ~]# ls /var/opt/gitlab/backups/
1572333106_2019_10_29_11.9.12_gitlab_backup.tar
/etc/gitlab/gitlab.rb 配置文件須備份
/var/opt/gitlab/nginx/confnginx配置文件
/etc/postfix/main.cfpostfix 郵件配置備份
1. 設(shè)置Gitlab備份目錄
[root@node1 ~]# vim /etc/gitlab/gitlab.rb
...
gitlab_rails['manage_backup_path'] = true #管理備份路徑
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #備份路徑
gitlab_rails['backup_archive_permissions'] = 0644 #備份的默認(rèn)權(quán)限為644
gitlab_rails['backup_keep_time'] = 604800 #允許刪除備份之前保留備份的持續(xù)時間(以秒為單位 默認(rèn)7天)
...
2.手動備份
[root@node1 ~]# gitlab-rake gitlab:backup:create
3.自動備份
[root@node1 ~]# crontab -e
#每天凌晨2點進(jìn)行一次自動備份:通過crontab使用備份命令實現(xiàn)
00 02 * * * /usr/bin/gitlab-rake gitlab:backup:create
4.2 恢復(fù)
# 停止相關(guān)數(shù)據(jù)連接服務(wù)
[root@node1 ~]# gitlab-ctl stop unicorn
[root@node1 ~]# gitlab-ctl stop sidekiq
#編號備份中恢復(fù),只需復(fù)制到日期即可
[root@node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
#啟動Gitlab
[root@node1 ~]# gitlab-ctl start
恢復(fù)成功在這里插入圖片描述
4.3 遷移
遷移如同備份與恢復(fù)的步驟一樣, 只需要
將老服務(wù)器/var/opt/gitlab/backups目錄下的備份文件拷貝到新服務(wù)器上的/var/opt/gitlab/backups即可
需要注意的是新服務(wù)器上的Gitlab的版本必須與創(chuàng)建備份時的Gitlab
版本號相同. 比如新服務(wù)器安裝的是最新的11.9.11版本的Gitlab那么遷移之前, 最好將老服務(wù)器的Gitlab升級為11.9.11,基于最新版本的狀態(tài)在進(jìn)行備份
/etc/gitlab/gitlab.rb gitlab 配置文件須遷移,遷移后需要調(diào)整數(shù)據(jù)存放目錄
/var/opt/gitlab/nginx/conf nginx配置文件目錄須遷移
#遷移到云主機的方法
先備份,云主機要安裝相同版本,恢復(fù)(記得把軟件包留下來)
#將舊機器上的備份文件同步過來后的操作步驟
[root@node1 ~]# gitlab-ctl stop unicorn
[root@node1 ~]# gitlab-ctl stop sidekiq
[root@node1 ~]# chmod 777 /var/opt/gitlab/backups/1572333106_2019_10_29_11.9.12_gitlab_backup.tar
[root@node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1572333106_2019_10_29_11.9.12
5. gitlab常用命令
gitlab-ctl start # 啟動所有 gitlab 組件;
gitlab-ctl stop # 停止所有 gitlab 組件;
gitlab-ctl restart # 重啟所有 gitlab 組件;
gitlab-ctl status #查看服務(wù)狀態(tài);
gitlab-ctl reconfigure # 啟動服務(wù);
vim /etc/gitlab/gitlab.rb # 修改默認(rèn)的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace #檢查gitlab;
gitlab-ctl tail # 查看日志;
6. gitlab主要配置文件目錄
主配置文件: /etc/gitlab/gitlab.rb
文檔根目錄: /opt/gitlab
默認(rèn)存儲庫位置: /var/opt/gitlab/git-data/repositories
Nginx配置文件: /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql數(shù)據(jù)目錄: /var/opt/gitlab/postgresql/data
7. Gitlab普通用戶通過ssh協(xié)議上傳
我們在clone代碼的時候可以選擇http協(xié)議,當(dāng)然我們亦可以選擇ssh協(xié)議來拉取代碼。
在本地git客戶端生成ssh key,然后配置在gitlab里,而后使用ssh協(xié)議進(jìn)行提交和拉取git遠(yuǎn)程倉庫的代碼。
創(chuàng)建普通用戶 李四imageimage
#在root用戶下添加hosts解析
[root@node1 ~]# vim /etc/hosts
10.0.0.11 douergitlab.com
#創(chuàng)建普通用戶 lisi
useradd lisi
su - lisi
mkdir zx
cd zx/
git config --global user.name "李四"
git config --global user.email "lichenxing0430@163.com"
cp /etc/services . # 用來測試的文件放到當(dāng)前目錄下
#將生成ssh秘鑰后添加
[lisi@node1 zx]$ ssh-keygen -t rsa
[lisi@node1 zx]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDoBLv83m/JtEu7Kst47qwmYsCepkjcbl3OaBUvr0/47TmHfJ1fBFaQUOKMG61vAKuqKaQaoLGakpFQo8jyqe6XbgX0tKOgJs9IcoZegYLdNeRmqfUDoBqefurHitquNHnUhJCywvXgmzUQfnh+Ub07qTE0BIvbA2NLC1DloaJdsHbj8SsN0FasCcImu7wGlVol55tD+JdROy9SzFWD+bTeFROEPAV/3E4MCXAiZ4cpWoJe+3k2coxayKvmjdfFp/+fqOYtGmjkS4tUe3jZs8UJCvf5jwLZrXe2njAp4bDD2xGXqk9j1cWFnYLiqadCBIjf9M8EHlJRU19pb+p7Zf+N lisi@node1
image
#刪除之前的origin配置
git remote remove origin
#生成origin傳輸協(xié)議為ssh,ssh協(xié)議地址到項目的詳情頁進(jìn)行復(fù)制
[lisi@node1 zx]$ git remote add origin git@douergitlab.com:lisi/zxzn.git
[lisi@node1 zx]$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@douergitlab.com:lisi/zxzn.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
#上傳代碼 V_1版本
git init
git remote add origin git@douergitlab.com:lisi/zxzn.git
git add .
git commit -m "V_1"
git push -u origin master #這里直接通過SSH協(xié)議上傳了
刷新網(wǎng)頁查看
在這里插入圖片描述
在這里插入圖片描述
8. gitlab的克隆 clone
創(chuàng)建一個新的普通用戶 王二
image
#創(chuàng)建一個普通用戶wanger并生成ssh秘鑰
[root@node1 ~]# useradd wanger
[root@node1 ~]# su - wanger
[wanger@node1 ~]$ ssh-keygen -t rsa
[wanger@node1 ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyGDctK6P41EnTvn+ubVGyTMpa77zU7h4HUF7XhJirrp+8LUXe6HwdXWDKtzz88Eqd/OISh+ihMqsF9Wrs6TBL09Mda7YkxHZAHKlprJF3sfAmgCb6GYjHKj/mw+teYcg3Mu1YGr3GnR5q0sQvWcCBqwJCMZmaK8a0gVmsbJ5Jq+6d9N5Peko/m+U7MY9iX/kWPaiNHJ9l2UoDwelV5UCaU0hfTYNspgVTFlAZbSoTsjnMenHJFhWmzXytjJh3KyU9GKq1VErcMhjR0Px601IHtj1uprkqs9MfF62SLSYtMG348IGHxcWA5UhIL8b9Zhxlg1UrHK/YKpAwfI+24dyj wanger@node1
#使用李四用戶的SSH克隆鏈接 第一次需要輸入 yes
[wanger@node1 ~]$ git clone git@douergitlab.com:lisi/zxzn.git
[wanger@node1 ~]$ tree
.
└── zxzn
└── services
找到王二用戶的個人郵箱
lichenxing@in365robot.com
9.gitlab版本升級
gitlab升級,最好要小版本跨,不要直接跳級
官方規(guī)定在主要版本系列中首先到達(dá)最后一個次要版本,才能升級至下一個主要版本。
V10--->V11.8---V11.11--->V12.0
#關(guān)閉gitlab核心服務(wù)
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
#備份
gitlab-rake gitlab:backup:create
#查看當(dāng)前版本
[root@node1 ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
11.9.12
#下載gitlab的rpm安裝包進(jìn)行升級
cd /server/tools
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
rpm -Uvh gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
11.11.8
#訪問重啟后的gitlab,查看是否成功,繼而升到最新版本
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm
rpm -Uvh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
#更新配置
gitlab-ctl reconfigure
gitlab-ctl restart
#查看新版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.0.3
10. svn遷移到Gitlab
1.安裝svn服務(wù)器,將svn中的數(shù)據(jù)遷移到git倉庫
git-svn
git clone svnsvn是一個中心化的版本控制工具,git是分布式的,每個人都可以有完整的代碼倉庫
#安裝svn
yum install subversion -y
mkdir /svn/repo -p
#初始化倉庫
svnadmin create /svn/repo
cd /svn/repo/conf
vim svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /svn/repo
[sasl]
vim passwd
[users]
admin = 123456
vim authz
[/]
admin = rw
test = r
啟動svn服務(wù)
svnserve -d -r /svn/repo
#svn遷移到git
yum install git-svn -y
git svn clone svn://10.0.0.11 --username=admin --no-metadata --authors-file=password.txt git
cat password.txt
admin=<245684979@qq.com>
11. 忘記gitlab的root密碼
甚至也忘記了郵箱,或許是默認(rèn)郵箱無法使用
需要在服務(wù)器上面直接修改數(shù)據(jù)
gitlab-rails console production
user = User.where(id: 1).first
user.password = 'secret_pass'
user.password_confirmation = 'secret_pass'
user.save!
如下提示代表成功:
irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 7dc9cc44-0296-4a62-8b9a-335d4d5da11b) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1
=> true
3. 持續(xù)部署
3.1 用腳本實現(xiàn)html類型自動化代碼上線
腳本需求:
假設(shè)1一個集群有5個節(jié)點
a:實現(xiàn)一鍵部署5個節(jié)點
b:實現(xiàn)一鍵回滾到上個版本(秒級回滾) web web_v0.1 web_v0.2
gitlab 拉取代碼
本地打包
for 循環(huán)
do
scp 目標(biāo)主機 傳輸壓縮包
從負(fù)載均衡上摘下來
ssh 目標(biāo)主機 解壓壓縮包, 刪除軟連接,新建軟連接
curl 訪問 200
從負(fù)載均衡上加回去
done
3.2 準(zhǔn)備環(huán)境
gitlab 10.0.0.11
lb01負(fù)載均衡 10.0.0.5
web01 10.0.0.7
web02 10.0.0.8
#lb01,web01,web02都安裝nginx
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nginx -y
grep -Ev '^$|#' nginx.conf.default > nginx.conf
配置lb01負(fù)載均衡
#修改nginx.conf配置文件
[root@lb01 nginx]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream monitor {
include /etc/nginx/upstream_monitor;
}
server {
listen 80;
server_name www.in365robot.com;
location / {
proxy_pass http://monitor;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
#創(chuàng)建upstream資源池文件
vim /etc/nginx/upstream_monitor
server 10.0.0.7;
server 10.0.0.8;
#檢查語法并重啟nginx
nginx -t
systemctl restart nginx
systemctl enable nginx
配置web01和web02,文件配置內(nèi)容相同
vim /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name in365robot.com;
location / {
root /usr/share/nginx/html/web;
index index.html index.htm;
}
}
}
#檢查語法并重啟nginx
nginx -t
systemctl restart nginx
systemctl enable nginx
在web01上創(chuàng)建首頁并創(chuàng)建軟連接
mkdir /usr/share/nginx/html/web_v1
cd /usr/share/nginx/html/
echo 'web01' >/usr/share/nginx/html/web_v1/index.html
ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
ls
web web_v1
在web02上創(chuàng)建首頁并創(chuàng)建軟連接
mkdir /usr/share/nginx/html/web_v1
cd /usr/share/nginx/html/
echo 'web02' >/usr/share/nginx/html/web_v1/index.html
ln -s /usr/share/nginx/html/web_v1 /usr/share/nginx/html/web
ls
web web_v1
在windows上做hosts解析
C:\Windows\System32\drivers\etc\hosts
10.0.0.5 www.in365robot.com
image
3.3 新建gitlab項目
image
流程
image
#在gitlab上
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
mkdir /code
cd /code/
ls
wget http://192.168.37.202/linux59/monitor_html.tar.gz
ls
tar xf monitor_html.tar.gz
cd monitor/
ls
ls .git/
git branch
git log --oneline
[root@k8s-node2 monitor]# mkdir -p /server/scripts
[root@k8s-node2 monitor]# cd /server/scripts/
============================================================
[root@lb scripts]# cat auto_deploy.sh
#!/bin/bash
serverlist="10.0.0.7 10.0.0.8"
#代碼更新
fabu() {
cd /code/monitor/ && \
git pull -u origin
version=`git tag|tail -1`
echo $version
tar zcf /code/monitor_${version}.tar.gz *
for ip in $serverlist
do
scp -rp /code/monitor_${version}.tar.gz root@${ip}:/code
ssh root@${ip} "mkdir -p /code/web_${version} &&
tar xf /code/monitor_${version}.tar.gz -C /code/web_${version} && \
rm -fr /code/web && ln -s /code/web_${version} /code/web && rm -fr /code/monitor_${version}.tar.gz "
done
}
huigun() {
cd /code/monitor/
version=`git tag|tail -1`
last_version=`git tag|tail -2|head -1`
for ip in $serverlist
do
ssh root@${ip} "rm -fr /code/web && ln -s /code/web_${last_version} /code/web"
done
}
case $1 in
deploy)
fabu;
;;
rollback)
huigun;
;;
*)
echo '無效的參數(shù)';
esac
========================================================
[root@lb ~]# ssh-keygen -t rsa
[root@lb ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsPPhatOoCoYEt/PBoKeC6Kd8Uj+Ll+dD0Bnrw3aiYsL7fWc83bCyp45wub31Wqt7sCcoqxuqwbidk6vlsZyb3CbGKxVcroMln91ASD+bmaYIJkl4KINAqktTzBIIDLRG0GUYRZw9npNq5d0MCc1XLTSmoAWpWpvuwIEpCFJcSYwSlUWkEXWtEFkJX5oWCNJX77iCfCp00JJI7TF59gReUojZ2YcXzxBSNz/lAvcvudcflJvu/rc9nBXMnwtXEYiY/QfXk2I9igqfR1lfU2FnfptJOKHKHHibajkuGVaovMypiBQxm66fHG88z7ZL+05+IDk/+LBj5In/tkYi1VWi5 root@lb
添加秘鑰4. jenkins安裝
#下載jenkins安裝包
[root@lb01 tools]# ls
jenkins-2.176.1-1.1.noarch.rpm jenkins_2.176_plugins.tar.gz
#安裝jenkins
yum install -y java
yum localinstall *.rpm
rpm -ql jenkins
systemctl restart jenkins
route del -net 0.0.0.0/0 gw 10.0.0.254
#將語言包導(dǎo)入
[root@lb tools]# ls
jenkins-2.176.1-1.1.noarch.rpm jenkins_2.176_plugins.tar.gz plugins
tar xf jenkins_2.176_plugins.tar.gz
\cp -a plugins/* /var/lib/jenkins/plugins/
systemctl restart jenkins.service
systemctl restart network
cd /var/lib/jenkins/
ls
瀏覽器訪問8080端口image
[root@lb01 tools]# cat /var/lib/jenkins/secrets/initialAdminPassword
0af61163d6e146a0b77f2085e6d7fdaa
image
訪問10.0.0.5:8080漢化成功
image
升級插件
清華源下載鏈接image
imageimageimage
5. java項目代碼上線
思路
1:創(chuàng)建數(shù)據(jù)庫
2:編譯java代碼 maven編譯
mvn clean package
3:scp 推送war包 10.0.0.7,10.0.0.8,重啟tomcat
4: 通知機制
gitlab 拉取代碼
編譯代碼
本地打包
for 循環(huán)
do
scp 目標(biāo)主機 傳輸壓縮包
從負(fù)載均衡上摘下來
ssh 目標(biāo)主機 解壓壓縮包, 刪除軟連接,新建軟連接
curl 訪問 200
從負(fù)載均衡上加回去
done
