Gitlab 仓库搭建(详细版)
目錄
前言
一、gitlab 介紹
二、git和svn 的區(qū)別
1、?集中式vs分布式
2、?版本庫(kù)與工作區(qū)
3. 全局版本號(hào)和全球版本號(hào)
4、部分檢出和全局檢出
5、更新和提交
三、Git和svn的優(yōu)缺點(diǎn)比較
1、SVN優(yōu)缺點(diǎn)
2、Git優(yōu)缺點(diǎn)
四、git、gitlab、GitHub的簡(jiǎn)單區(qū)別
五、Gitlab 搭建
1、gitlab 安裝
方法一、設(shè)置gitlab的yum源(使用清華鏡像源安裝GitLab)
方法二、腳本安裝gitlab
?方法三、清華開源軟件rpm下載
六、gitlab安裝目錄?
七、GitLab常用命令匯總
八、Gitlab訪問(wèn)測(cè)試
1、Gitlab登錄
?2、配置默認(rèn)訪問(wèn)密碼
3、想要登錄自己創(chuàng)建的用戶?
九、Gitlab 圖形化界面操作?
1、Gitlab關(guān)閉自動(dòng)注冊(cè)
2、Gitlab登錄免密認(rèn)證?
3、Gitlab創(chuàng)建項(xiàng)目?
4、使用管理員創(chuàng)建用戶?
5、Gitlab 添加郵箱設(shè)置
5.1、開啟smtp功能
?5.2、驗(yàn)證
6、修改登錄歡迎頁(yè)面?
十、Gitlab命令行操作?
?編輯1、命令行新建分支?
2、上傳代碼到倉(cāng)庫(kù)
3、Git 命令行常用指令的使用?
3.1、提交與修改操作
十一、項(xiàng)目創(chuàng)建(測(cè)試)
1、GitLab權(quán)限
1.1、訪問(wèn)權(quán)限
1.2、GitLab分支角色管理
1.3、工程權(quán)限
1.4、組權(quán)限
2、設(shè)置用戶權(quán)限?
3、數(shù)據(jù)流向圖
十二、Gitlab 數(shù)據(jù)備份?
?1、Gitlab 創(chuàng)建備份
1.1、手動(dòng)備份
2、更改Gitlab備份目錄
3、Gitlab自動(dòng)備份
定時(shí)自動(dòng)備份
3.1、方法一、輸入: crontab -e 然后添加相應(yīng)的任務(wù)
3.2、腳本執(zhí)行g(shù)itlab 備份?
十三、Gitlab-CI/CD?
CICD是什么?
持續(xù)集成的好處是什么?
持續(xù)交付的好處是什么?
持續(xù)部署的好處是什么?
十四、總結(jié)
前言
公司代碼的管理不統(tǒng)一,一部分人用SVN,一部分人用Git,對(duì)于習(xí)慣了使用Linux或者M(jìn)ac命令行的人來(lái)說(shuō),Git的操作更方便和快捷,和小伙伴商量了一下把整個(gè)代碼管理工具切換成了Git,GitHub如果不是開源項(xiàng)目的話是需要付費(fèi)使用,所以選擇使用GitLab。
一、gitlab 介紹
? ? ? ?Gitlab是一個(gè)用于倉(cāng)庫(kù)管理系統(tǒng)的開源項(xiàng)目,使用Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來(lái)的web服務(wù)。Gitlab有烏克蘭程序員DmitriyZaporozhets和ValerySizov開發(fā),它由Ruby寫成。后來(lái),一些部分用Go語(yǔ)言重寫,現(xiàn)今并在國(guó)內(nèi)外大中型互聯(lián)網(wǎng)公司廣泛使用。gitlab-ce是它的社區(qū)版,gitlab-ee是企業(yè)版,是收費(fèi)的。
二、git和svn 的區(qū)別
Git:?是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。
下圖就是分布式版本控制工具管理方式:
Git:是分布式版本控制系統(tǒng),它沒有中央服務(wù)器,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù),這樣工作的時(shí)候就不需要聯(lián)網(wǎng)了,因?yàn)榘姹径际窃谧约旱碾娔X上。既然每個(gè)人的電腦都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比如說(shuō)自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時(shí),你們兩之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
SVN:?是一個(gè)開放源代碼的版本控制系統(tǒng),通過(guò)采用分支管理系統(tǒng)的高效管理,簡(jiǎn)而言之就是用于多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目,實(shí)現(xiàn)共享資源,實(shí)現(xiàn)最終集中式的管理。集中管理方式在一定程度上看到其他開發(fā)人員在干什么,而管理員也可以很輕松掌握每個(gè)人的開發(fā)權(quán)限。
下圖就是標(biāo)準(zhǔn)的集中式版本控制工具管理方式:
但是相較于其優(yōu)點(diǎn)而言,集中式版本控制工具缺點(diǎn)很明顯:
服務(wù)器單點(diǎn)故障
容錯(cuò)性差
Git 的內(nèi)容完整性要優(yōu)于svn:
GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞。
一個(gè)研發(fā)隊(duì)伍的成員正常包括:需求分析、設(shè)計(jì)、美工、程序員、測(cè)試、實(shí)施、運(yùn)維,每個(gè)成員在工作中都有產(chǎn)出物, 包括了文檔、設(shè)計(jì)代碼、程序代碼,這些都需要按項(xiàng)目集中進(jìn)行管理的。SVN能清楚的按目錄進(jìn)行分類管理, 使項(xiàng)目組的管理處于有序高效的狀態(tài),SVN更適用于項(xiàng)目管理, Git更適用于代碼管理。
1、?集中式vs分布式
Subversion(svn)屬于集中式的版本控制系統(tǒng)
Git屬于分布式的版本控制系統(tǒng)
2、?版本庫(kù)與工作區(qū)
SVN的版本庫(kù)和工作區(qū)是分離的
Git 的版本庫(kù)和工作區(qū)如影隨形
3. 全局版本號(hào)和全球版本號(hào)
SVN的全局版本號(hào)和CVS的每個(gè)文件都獨(dú)立維護(hù)一套版本號(hào)相比,是一個(gè)非常大的進(jìn)步。在看似簡(jiǎn)單的全局版本號(hào)的背后,是Subversion提供對(duì)于事物處理的支持,每一個(gè)事物處理(即一次提交)都具有整個(gè)版本庫(kù)全局唯一的版本號(hào)。
Git的版本號(hào)則更進(jìn)一步,版本號(hào)是全球唯一的。Git 對(duì)于每一次提交,通過(guò)對(duì)文件的內(nèi)容或目錄的結(jié)構(gòu)計(jì)算出一個(gè)SHA-1 哈希值,得到一個(gè)40位的十六進(jìn)制字符串,Git將此字符串作為版本號(hào)?
4、部分檢出和全局檢出
Subversion可以將整個(gè)庫(kù)檢出到工作區(qū),也可以將某個(gè)目錄檢出到工作區(qū)。對(duì)于要使用一個(gè)龐大、臃腫的版本庫(kù)的用戶來(lái)說(shuō),部分檢出是非常方便和實(shí)際的。
Git只能全部檢出,不支持按照目錄進(jìn)行的部分檢出。
5、更新和提交
在SVN中,因?yàn)橹挥幸粋€(gè)中心倉(cāng)庫(kù),所以所謂的遠(yuǎn)程更新,也就是svn update ,通過(guò)此命令來(lái)使工作區(qū)和版本庫(kù)保持同步。如果不能連接到服務(wù)器上,基本上不可以工作。
對(duì)于git來(lái)說(shuō),別人的改動(dòng)是存在于遠(yuǎn)程倉(cāng)庫(kù)上的,所以git checkout命令盡管在某些功能上和svn中的update類似(例如取倉(cāng)庫(kù)特定版本的內(nèi)容),但是在遠(yuǎn)程更新這一點(diǎn)上,還是不同的,不屬于git checkout的功能涵蓋范圍。 Git使用git fetch和git pull來(lái)完成遠(yuǎn)程更新任務(wù),fetch操作只是將遠(yuǎn)程數(shù)據(jù)庫(kù)的object拷貝到本地,然后更新remotes head的refs,git pull 的操作則是在git fetch的基礎(chǔ)上對(duì)當(dāng)前分支外加merge操作。可離線工作。
三、Git和svn的優(yōu)缺點(diǎn)比較
1、SVN優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、 管理方便,邏輯明確,符合一般人思維習(xí)慣。
2、 易于管理,集中式服務(wù)器更能保證安全性。
3、 代碼一致性非常高。
4、 適合開發(fā)人數(shù)不多的項(xiàng)目開發(fā)。
缺點(diǎn):
1、 服務(wù)器壓力太大,數(shù)據(jù)庫(kù)容量暴增。
2、 如果不能連接到服務(wù)器上,基本上不可以工作,如果服務(wù)器不能連接上,就不能提交,還原,對(duì)比等等。
3、 不適合開源開發(fā)(開發(fā)人數(shù)非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明確的權(quán)限管理機(jī)制(例如分支訪問(wèn)限制),可以實(shí)現(xiàn)分層管理,從而很好的解決開發(fā)人數(shù)眾多的問(wèn)題。
2、Git優(yōu)缺點(diǎn)
優(yōu)點(diǎn):?
1、適合分布式開發(fā),強(qiáng)調(diào)個(gè)體。
2、公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大。
3、速度快、靈活。
4、任意兩個(gè)開發(fā)者之間可以很容易的解決沖突。
5、離線工作。
缺點(diǎn):
1、學(xué)習(xí)周期相對(duì)而言比較長(zhǎng)。
2、不符合常規(guī)思維。
3、代碼保密性差,一旦開發(fā)者把整個(gè)庫(kù)克隆下來(lái)就可以完全公開所有代碼和版本信息。
四、git、gitlab、GitHub的簡(jiǎn)單區(qū)別
git 是一種基于命令的版本控制系統(tǒng),全命令操作,沒有可視化界面
gitlab 是一個(gè)基于git實(shí)現(xiàn)的在線代碼倉(cāng)庫(kù)軟件,提供web可視化管理界面,通常用于企業(yè)團(tuán)隊(duì)內(nèi)部協(xié)作開發(fā)
github 是一個(gè)基于git實(shí)現(xiàn)的在線代碼托管倉(cāng)庫(kù),亦提供可視化管理界面,同時(shí)免費(fèi)賬戶和提供付費(fèi)賬戶,提供開放和私有的倉(cāng)庫(kù),大部分的開源項(xiàng)目都選擇github作為代碼托管倉(cāng)庫(kù)
其中:
Gitlab和GitHub的區(qū)別
相同點(diǎn):二者都是基于web的Git倉(cāng)庫(kù),在很大程度上Gitlab是仿照GitHub來(lái)做的;
它們都提供了分享開源項(xiàng)目的平臺(tái),為開發(fā)團(tuán)隊(duì)提供了存儲(chǔ)、分享、發(fā)布
和合作開發(fā)項(xiàng)目的中心化云存儲(chǔ)的場(chǎng)所。
不同點(diǎn):GitHub如果要使用私有倉(cāng)庫(kù),是需要付費(fèi)的。Gitlab可以在上面創(chuàng)建私人的免費(fèi)倉(cāng)庫(kù)。
Gitlab讓開發(fā)團(tuán)隊(duì)對(duì)他們的代碼倉(cāng)庫(kù)擁有更多的控制,相比于GitHub,它有不少的特色:允許免費(fèi)設(shè)置倉(cāng)庫(kù)權(quán)限;允許用戶選擇分享一個(gè)project的部分代碼;允許用戶設(shè)置project的獲取權(quán)限,進(jìn)一步的提升安全性;可以設(shè)置獲取到團(tuán)隊(duì)整體的改進(jìn)進(jìn)度;通過(guò)innersourceing讓不在權(quán)限范圍內(nèi)的人訪問(wèn)不到該資源。從代碼私有性方面來(lái)看有時(shí)公司并不希望員工獲取到全部的代碼,這個(gè)時(shí)候Gitlab無(wú)疑是更好的選擇。但是對(duì)于開源項(xiàng)目而言,GitHub依然是代碼托管的首選。
五、Gitlab 搭建
1、gitlab 安裝
方法一、設(shè)置gitlab的yum源(使用清華鏡像源安裝GitLab)
gitlab-ce是它的社區(qū)版,gitlab-ee是企業(yè)版,是收費(fèi)的。
在 /etc/yum.repos.d/ 下新建 gitlab-ce.repo,寫入如下內(nèi)容:cd /etc/yum.repos.d/
vim gitlab-ce.repo[gitlab-ce]
name=gitlab-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
gpgcheck=0
enabled=1yum clean all && yum makecache
安裝 GitLab
# 直接安裝最新版
yum install -y gitlab-ce
下圖表示gitlab安裝成功
# 如果要安裝指定的版本,在后面填上版本號(hào)即可
yum install -y ?gitlab-ce-×××
# 如果安裝時(shí)出現(xiàn)gpgkey驗(yàn)證錯(cuò)誤,只需在安裝時(shí)明確指明不進(jìn)行g(shù)pgkey驗(yàn)證
yum install gitlab-ce -y --nogpgcheck?
方法二、腳本安裝gitlab
如果執(zhí)行腳本出現(xiàn)壞的解釋器:腳本文件保存時(shí)使用了DOS格式,用DOS2UNIX轉(zhuǎn)為UNIX格式,也可以用vim打開,用:set ff=unix轉(zhuǎn)換。
#!/bin/bash#安裝依賴
systemctl stop firewalld
setenforce 0
a=`ifconfig ens33 |grep inet |awk 'NR==1{print $2}'`yum install curl wget policycoreutils policycoreutils-python openssh-server openssh-clients postfix -y >/dev/nullsystemctl enable sshdsystemctl start sshdsed -i 's/inet_interfaces = localhost/inet_interfaces = all/g' /etc/postfix/main.cf#正式安裝gitlabcurl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash > /dev/nullsed -i "s/baseurl=https:\/\/packages.gitlab.com\/gitlab\/gitlab-ce\/el\/7\/\$basearch/baseurl=https:\/\/mirrors.tuna.tsinghua.edu.cn\/gitlab-ce\/yum\/el\$releasever\//g" /etc/yum.repos.d/gitlab_gitlab-ce.repoyum makecache &>/dev/nullyum install gitlab-ce -y#已經(jīng)安裝完成#驗(yàn)證是否安裝成功right=$(yum list installed | grep gitlab-ce)gitlab='gitlab-ce'if [[ ${right} =~ "${gitlab}" ]];thenecho "gitlab-ce已經(jīng)安裝成功啦!"elseecho "gitlab-ce沒有安裝成功,請(qǐng)重新檢查!"exitfi
sed -i '32s/gitlab.example.com/'$a':9099/' /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure > /dev/null
echo "此時(shí)訪問(wèn)本地IP:9099 就可以顯示gitlab 的頁(yè)面了!"
?方法三、清華開源軟件rpm下載
?Index of /gitlab-ce/yum/el7/ | 清華大學(xué)開源軟件鏡像站 | Tsinghua Open Source Mirror???網(wǎng)站地址
安裝依賴
yum install -y curl policycoreutils openssh-server openssh-clients
#啟動(dòng)ssh服務(wù)&設(shè)置為開機(jī)啟動(dòng)
systemctl enable sshd
systemctl start sshd
安裝Postfix
Postfix是一個(gè)郵件服務(wù)器,GitLab發(fā)送郵件需要用到
#安裝postfix
yum install -y postfix#啟動(dòng)postfix并設(shè)置為開機(jī)啟動(dòng)
systemctl enable postfix
systemctl start postfix
開放ssh以及http服務(wù)(80端口)
#開放ssh、http服務(wù)
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent說(shuō)明允許ssh服務(wù)通過(guò)成功
?說(shuō)明80端口通過(guò)成功
#重載防火墻規(guī)則
firewall-cmd --reload
或者
直接關(guān)閉防火墻以及開機(jī)自關(guān)閉
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
?安裝gitlab,安裝完gitlab需要修改配置文件,并加載
vim /etc/gitlab/gitlab.rb 進(jìn)入配置文件
#找到下面一行,修改ip
修改好配置文件后,要使用 gitlab-ctl reconfigure 命令重載一下配置文件,否則不生效即可啟動(dòng)Gitlab。注意,啟動(dòng)過(guò)程較長(zhǎng),需要耐心等待。
我們查看一下Gitlab的狀態(tài),執(zhí)行命令:
六、gitlab安裝目錄?
?以下是gitlab常用的默認(rèn)安裝目錄
gitlab組件日志路徑:/var/log/gitlab
?
gitlab配置路徑:/etc/gitlab/ ?路徑下有g(shù)itlab.rb配置文件
?
應(yīng)用代碼和組件依賴程序:/opt/gitlab
?
各個(gè)組件存儲(chǔ)路徑: /var/opt/gitlab/
?
倉(cāng)庫(kù)默認(rèn)存儲(chǔ)路徑 ? /var/opt/gitlab/git-data/repositories
?
版本文件備份路徑:/var/opt/gitlab/backups/
?
nginx安裝路徑:/var/opt/gitlab/nginx/
?
redis安裝路徑:/var/opt/gitlab/redis
七、GitLab常用命令匯總
#查看服務(wù)狀態(tài)
gitlab-ctl status
使用控制臺(tái)實(shí)時(shí)查看日志
# 查看所有的logs; 按 Ctrl-C 退出
gitlab-ctl tail
# 拉取/var/log/gitlab下子目錄的日志
gitlab-ctl tail gitlab-rails
# 拉取某個(gè)指定的日志文件
gitlab-ctl tail nginx/gitlab_error.log
#啟動(dòng)關(guān)閉gitlab?? ?
gitlab-ctl start ? ? ?
gitlab-ctl stop ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#停止 ? ? ? ? ? ?
gitlab-ctl status ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看狀態(tài)
gitlab-ctl restart ? ? ? ? ? ? ? ? ? ? ? ? ? ? #重啟
gitlab-ctl reconfigure?? ??? ??? ? ? #更新配置文件
gitlab-ctl help ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#幫助
gitlab-rake gitlab:check SANITIZE=true --trace?? ?檢查gitlab
#gitlab 默認(rèn)的日志文件存放在/var/log/gitlab 目錄下
gitlab-ctl tail ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看所有日志
#禁止 Gitlab 開機(jī)自啟動(dòng)
systemctl disable gitlab-runsvdir.service?
#啟用 Gitlab 開機(jī)自啟動(dòng)
systemctl enable gitlab-runsvdir.service
八、Gitlab訪問(wèn)測(cè)試
1、Gitlab登錄
打開瀏覽器輸入gitlab服務(wù)器地址,注冊(cè)用戶,如下圖
注冊(cè)用戶
例:
完成后想登錄http://192.168.111.50:9091 需要賬號(hào)和密碼登錄,注冊(cè)一個(gè)后登錄報(bào)錯(cuò)誤,需要管理員賬號(hào)初始化。(密碼最少的是8位數(shù)字)
?2、配置默認(rèn)訪問(wèn)密碼
切換到命令運(yùn)行的目錄 cd /opt/gitlab/bin/執(zhí)行如下命令:gitlab-rails console -e production 進(jìn)行初始化密碼
在irb(main):001:0> 后面通過(guò) u=User.where(id:1).first 來(lái)查找與切換賬號(hào)(User.all 可以查看所有用戶)
gitlab-rails console -e production
u=User.where(id:1).first
u.password='12345678'
u.password_confirmation='12345678'
u.save!
exit出現(xiàn)true說(shuō)明設(shè)置成功!
此時(shí)就可以用root/12345678來(lái)登錄頁(yè)面
成功登錄root用戶
3、想要登錄自己創(chuàng)建的用戶?
?解決方案?
需要用root賬號(hào)通過(guò)下
點(diǎn)擊批準(zhǔn)
??再次登錄,即可登錄成功?
注: 覺得英文難受的可以在下圖設(shè)置成中文?
九、Gitlab 圖形化界面操作?
1、Gitlab關(guān)閉自動(dòng)注冊(cè)
在企業(yè)生產(chǎn)環(huán)境中,我們一般由項(xiàng)目負(fù)責(zé)人負(fù)責(zé)創(chuàng)建用戶并分配權(quán)限,一般禁止員工私自注冊(cè)用戶,以防給項(xiàng)目開發(fā)工作帶來(lái)安全性上的風(fēng)險(xiǎn)。為了避免員工自動(dòng)注冊(cè),我們一般會(huì)禁止Gitlab的自動(dòng)注冊(cè)功能。在Gitlab的主菜單上,選擇Menu——Admin,如下所示:
前提:使用root管理員賬號(hào)密碼登陸GitLab。
?之后,選擇Settings——Sign-up restrictions,點(diǎn)擊右邊的Expand,如下所示:
在彈出的頁(yè)面中,取消掉Sign-up enabled選項(xiàng)前面的勾,如下所示:?
這樣,點(diǎn)擊下方的Save后,就可以使得我們的配置生效了。這樣在登錄的時(shí)候,就無(wú)法實(shí)現(xiàn)自動(dòng)注冊(cè)了。
2、Gitlab登錄免密認(rèn)證?
Gitlab的登錄免密驗(yàn)證,配置完成后,可以使得我們的Gitlab自動(dòng)執(zhí)行Git命令而無(wú)需登錄,對(duì)于腳本的編寫以及其他項(xiàng)目(如Jenkins)的運(yùn)用這一步是必須的。
首先,在想要進(jìn)行驗(yàn)證的設(shè)備上執(zhí)行命令:
ssh-keygen
?確認(rèn)新生成的密鑰文件
完成上述配置后,可以生成本設(shè)備的公私鑰對(duì),執(zhí)行命令:
可以查看本設(shè)備的公鑰,如下所示:
我們將該公鑰復(fù)制下來(lái),之后,我們打開Gitlab,點(diǎn)擊右上角的用戶圖標(biāo),在彈出的選擇框中選擇Edit Profile,然后點(diǎn)擊左邊的SSH Keys,如下所示:
之后在彈出的頁(yè)面中,我們將之前復(fù)制的公鑰復(fù)制到上面去,如下所示:
?然后點(diǎn)擊Add key,即可完成添加,添加完成后的頁(yè)面如下:
3、Gitlab創(chuàng)建項(xiàng)目?
?Gitlab上創(chuàng)建項(xiàng)目。由于新項(xiàng)目的創(chuàng)建必須依賴于一個(gè)組,因此,我們?cè)趧?chuàng)建項(xiàng)目前,先創(chuàng)建組。
進(jìn)入Gitlab主頁(yè)面后,點(diǎn)擊Overview中的Groups選項(xiàng),然后點(diǎn)擊右邊的New group,選擇新創(chuàng)建一個(gè)組,如下所示:
輸入組的名稱和描述,組的URL會(huì)隨著組名稱的輸入而自動(dòng)出現(xiàn),在組的權(quán)限處,我們選擇Private,并取消掉下方允許用戶訪問(wèn)的請(qǐng)求,配置完成后如下所示:
?接下來(lái),我們點(diǎn)擊最下方的Create Group,就可以完成組的創(chuàng)建了,如下所示:?
?接下來(lái),我們來(lái)創(chuàng)建項(xiàng)目。項(xiàng)目的創(chuàng)建與組的創(chuàng)建過(guò)程類似,都是輸入項(xiàng)目名稱,選擇組的名稱,項(xiàng)目描述以及權(quán)限等,配置好的項(xiàng)目如下所示:
配置完成后,就可以創(chuàng)建項(xiàng)目了。
創(chuàng)建項(xiàng)目后,Gitlab會(huì)自動(dòng)創(chuàng)建一個(gè)README.md的文件,我們可以在線對(duì)該文件機(jī)型編輯,如下所示:
4、使用管理員創(chuàng)建用戶?
前提:使用root管理員賬號(hào)密碼登陸GitLab
初始密碼由管理員設(shè)置,
當(dāng)用戶第一次登錄時(shí),由用戶進(jìn)行修改密碼
5、Gitlab 添加郵箱設(shè)置
?郵箱是企業(yè)進(jìn)行工作中的通知,交互必不可少的部分,gitlab同樣支持郵箱的配置,方便對(duì)一些操作有郵件的提醒,以QQ郵箱為例,進(jìn)行g(shù)itlab郵箱的添加。(郵件授權(quán)碼)
5.1、開啟smtp功能
修改gitlab配置
vim /etc/gitlab/gitlab.rb
#更新配置文件
gitlab-ctl reconfigure
gitlab-ctl restart
?5.2、驗(yàn)證
Notify.test_email('收件人郵箱', '郵件標(biāo)題', '郵件正文').deliver_now
Notify.test_email('229xxxx@qq.com', 'GitLab email', 'Hellow world').deliver_now
執(zhí)行 gitlab-rails console進(jìn)入控制臺(tái)交互界面,
然后在控制臺(tái)提示符后輸入下面內(nèi)容發(fā)送一封測(cè)試郵件,測(cè)試完成后exit()退出。
?
6、修改登錄歡迎頁(yè)面?
看下圖操作即可
設(shè)置完的效果圖:
十、Gitlab命令行操作?
第一次使用該項(xiàng)目地址的話,需要?jiǎng)?chuàng)建新版本庫(kù),首先從主項(xiàng)目上fork一個(gè)自己的項(xiàng)目。
從自己項(xiàng)目上獲取clone(克隆)鏈接地址。在想要存放的目錄下執(zhí)行
git clone http://192.168.111.50:9091/ceshi/git-test.git
?查看日志
1、命令行新建分支?
查看當(dāng)前所在的分支
git branch 查看分支
?
git branch deve 創(chuàng)建分支,deve為新的分支名,可改
git checkout dave 進(jìn)入到剛剛創(chuàng)建的分支
切換分支
查看狀態(tài)(跟源文件有出入的文件)
git status
git push -u origin dave 提交到新分支中
添加分支成功
?在切換回main分支
2、上傳代碼到倉(cāng)庫(kù)
?首次使用Git的話,需要設(shè)置全局的用戶名和郵箱設(shè)置,如下圖所示:
在命令行或終端中使用下面的命令可以設(shè)置git自己的名字和電子郵件。這是因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。
git config --global user.name "root"
git config --global user.email "admin@example.com"
在命令行或終端中使用下面的命令可以設(shè)置git自己的名字和電子郵件。
這是因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。
git config --global user.name "root"
git config --global user.email "admin@example.com"
# 查看配置git config --list
git init 初始化git
git remote add origin http://192.168.111.50:9091/ceshi/git-test.git 將本地git和服務(wù)器上的連接
git add 1.java 添加要提交的本地項(xiàng)目 (.代表所有 可用文件名代替. 上傳某個(gè)文件)
git commit -m "測(cè)試代碼" 提交到本地倉(cāng)庫(kù)
git push -u origin main 將項(xiàng)目推送到gitlab端出現(xiàn)報(bào)錯(cuò):fatal: 遠(yuǎn)程 origin 已經(jīng)存在
解決:#刪除遠(yuǎn)程配置 git remote rm origin
#重新添加 git remote add origin http://192.168.58.10:9091/ceshi/git-test.git
這樣就可以了,刷新gitlab頁(yè)面就可以看到上傳的項(xiàng)目了
?
3、Git 命令行常用指令的使用?
git status ?? ?#上次提交后是否對(duì)文件再做了修改項(xiàng)目
git add . ?? ??? ?#添加所有的變動(dòng)
git checkout -b 文件夾名稱 ?? ??? ?#創(chuàng)建本地分支并切換分支 git checkout -b pr/ffr
git commit -m “描述”?? ??? ??? ? #提交修改 git commit -m “修改什么”
git merge origin/develop “本地分支” ?? ??? ?#合并origin/develop上別人所做的修改到自己的本地分支 git merge origin/develop pr/ffr
git push origin “本地分支” #推送本地分支到遠(yuǎn)程,并建立聯(lián)系 git push origin pr/ffr
git rebase -i 編號(hào) #合并多次提交,將前幾次的提交合并為一次
git checkout 分支名 #切換分支 git checkout pr/FFR-color git cherckout develop
git pull #更新當(dāng)前分支的狀態(tài)
git branch #列出本地分支
git branch -a #列出本地分支與遠(yuǎn)程分支
git branch -D 分支名 #刪除分支(目前僅用于刪除本地分支)
git remote -v #可以查看遠(yuǎn)程倉(cāng)庫(kù)信息
git branch 分支名 #僅僅創(chuàng)建 一個(gè)新分支,并不會(huì)自動(dòng)切換到新分支中去
git rebase --abort #退出git rebase
git reset 提交編號(hào) #git rebase -i 提交編號(hào),之后出現(xiàn)錯(cuò)誤,可以回退到之前未合并時(shí)的日志狀態(tài)
git commit --amend -m “描述” #修改上一次的提交的描述
git stash #暫存上一次的修改,準(zhǔn)備切換到其他的分支
git stash pop #還原上一次的修改,將暫存的修改加入到新的分支
3.1、提交與修改操作
|
命令 |
說(shuō)明 |
|
git add |
添加文件到暫存區(qū) |
|
git status |
查看倉(cāng)庫(kù)當(dāng)前的狀態(tài),顯示有變更的文件。 |
|
git diff |
比較文件的不同,即暫存區(qū)和工作區(qū)的差異。 |
|
git commit |
提交暫存區(qū)到本地倉(cāng)庫(kù) |
|
git reset |
回退版本 |
|
git rm |
刪除工作區(qū)文件 |
|
git mv |
移動(dòng)或重命名工作區(qū)文件 |
十一、項(xiàng)目創(chuàng)建(測(cè)試)
1、GitLab權(quán)限
1.1、訪問(wèn)權(quán)限
訪問(wèn)權(quán)限是在建立項(xiàng)目時(shí)就需要選定的,主要用于決定哪些人可以訪問(wèn)此項(xiàng)目:
Gitlab中的組對(duì)項(xiàng)目有三種訪問(wèn)權(quán)限
|
權(quán)限名稱 |
權(quán)限類型 |
權(quán)限說(shuō)明 |
|
私有 |
Private |
只有屬于該項(xiàng)目成員才有權(quán)限查看和操作項(xiàng)目 |
|
內(nèi)部 |
Internal |
具有GitLab賬號(hào)的人員登陸后都可以克隆項(xiàng)目 |
|
公開 |
Public |
任何人都可以克隆 |
1.2、GitLab分支角色管理
Gitlab用戶在組中有五種權(quán)限:
|
角色名稱 |
角色類型 |
角色說(shuō)明 |
|
匿名用戶 |
Guest |
訪客【只能創(chuàng)建問(wèn)題和留言評(píng)論】 |
|
報(bào)告人 |
Reporter |
可以理解為測(cè)試員、產(chǎn)品經(jīng)理等,一般負(fù)責(zé)提交問(wèn)題等 |
|
開發(fā)人員 |
Developer |
負(fù)責(zé)項(xiàng)目開發(fā) |
|
管理者 |
Master |
一般是組長(zhǎng),負(fù)責(zé)對(duì)Master分支進(jìn)行維護(hù) |
|
所有者 |
Owner |
一般是項(xiàng)目經(jīng)理【擁有所有權(quán)限】 |
不同角色,擁有不同權(quán)限,下面列出Gitlab各角色權(quán)限 :
1.3、工程權(quán)限
注意:關(guān)于保護(hù)分支的設(shè)置,可以進(jìn)入Settings->Protected branches進(jìn)行管理?
1.4、組權(quán)限
2、設(shè)置用戶權(quán)限?
前提:使用root管理員賬號(hào)密碼登陸GitLab
選擇項(xiàng)目可以進(jìn)行權(quán)限分配
?先設(shè)置全局每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。
git clone http://192.168.111.50:9091/weilai/git-test.git 首先從主項(xiàng)目上fork一個(gè)自己的項(xiàng)目。
從自己項(xiàng)目上獲取clone(克隆)鏈接地址。
在想要存放的目錄下執(zhí)行以liy用戶登錄
?由于main 是受保護(hù)的分支,開發(fā)者沒有權(quán)限將代碼上傳到main 分支(主干分支)中
?Main 分支受保護(hù)中(主干分支)
?所以我們切換分支,切換到deve分支中?
開發(fā)者用戶liy 編寫代碼,將代碼上傳至倉(cāng)庫(kù),將代碼上傳至分支deve
?刷新查看倉(cāng)庫(kù),查看分支有我們開發(fā)者寫的代碼
使用管理員root 用戶創(chuàng)建新的用戶yong?
?創(chuàng)建用戶后,會(huì)發(fā)送郵箱,設(shè)置密碼
?設(shè)置密碼成功
?Yong 用戶登錄成功
?切換回root用戶
?邀請(qǐng)用戶yong 進(jìn)入項(xiàng)目 且為匿名用戶 guest ?只能進(jìn)行訪問(wèn)以及評(píng)論
?
定義全局用戶yong
用戶yong 無(wú)法克隆項(xiàng)目 ?用戶yong 為匿名用戶(客人),所以沒有權(quán)限下載項(xiàng)目
?
?可以進(jìn)行分支合并,主要就是開發(fā)者編寫完代碼后,與主干分支進(jìn)行合并,組成項(xiàng)目
??
?分支已合并?
3、數(shù)據(jù)流向圖
本文主要描述了gitlab 部分的一些操作
十二、Gitlab 數(shù)據(jù)備份?
?1、Gitlab 創(chuàng)建備份
1.1、手動(dòng)備份
創(chuàng)建備份文件
使用一條命令即可創(chuàng)建完整的Gitlab備份。
gitlab-rake gitlab:backup:create
使用命令會(huì)在/var/opt/gitlab/backups目錄下創(chuàng)建一個(gè)壓縮包,這個(gè)壓縮包就是Gitlab整個(gè)的完整部分。
生成完后,/var/opt/gitlab/backups目錄
創(chuàng)建一個(gè)名稱類似為1655990519_2022_06_23_15.0.2_gitlab_backup.tar的壓縮包
其中
/etc/gitlab/gitlab.rb 配置文件須備份
/var/opt/gitlab/nginx/conf nginx配置文件
/etc/postfix/main.cfpostfix 郵件配置備份
2、更改Gitlab備份目錄
也可以通過(guò)/etc/gitlab/gitlab.rb配置文件來(lái)修改默認(rèn)存放備份文件的目錄
修改為你想存放備份的目錄即可gitlab_rails['backup_path'] = "/home/gitlab-backup"#指定備份后數(shù)據(jù)存放的路徑、權(quán)限、時(shí)間配置
gitlab_rails['manage_backup_path'] = true 開啟備份功能
gitlab_rails['backup_path'] = "/home/gitlab-backup" 指定備份的路徑
gitlab_rails['backup_archive_permissions'] = 0644 備份文件的權(quán)限
gitlab_rails['backup_keep_time'] = 7776000 備份保留時(shí)間
修改完成之后使用下面命令重載配置文件即可.gitlab-ctl reconfigure
創(chuàng)建備份目錄并授權(quán)
chown -R git:git gitlab-backup
使用命令創(chuàng)建完整的Gitlab備份。
這個(gè)壓縮包就是gitlab 的整個(gè)完整部分
3、Gitlab自動(dòng)備份
定時(shí)自動(dòng)備份
實(shí)現(xiàn)每天凌晨2點(diǎn)進(jìn)行一次自動(dòng)備份:通過(guò)crontab使用備份命令實(shí)現(xiàn),需重啟cron服務(wù)
3.1、方法一、輸入: crontab -e 然后添加相應(yīng)的任務(wù)
?
#輸入命令crontab -e
crontab -e
#輸入相應(yīng)的任務(wù)
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
注意:環(huán)境變量CRON=1的作用是如果沒有任何錯(cuò)誤發(fā)生時(shí), 抑制備份腳本的所有進(jìn)度輸出#查看周期性計(jì)劃任務(wù)
crontab -l
3.2、腳本執(zhí)行g(shù)itlab 備份?
#!/bin/bash
a="/home/gitlab-backup"
back="/home/git_back"
date="$(date +%Y-%m-%d)"
logfile=$back/$date.log
gitlab-rake gitlab:backup:create > /dev/null
b=`ls $a |wc -l`
if [ $b -eq 0 ];then
echo "$date.tar 備份失敗" >> $logfile
elif [ $b -gt 0 ];then
echo " $date.tar 備份成功" >> $logfile
fi
mv $a/* $back/$date.tar
?將腳本加入周期性計(jì)劃執(zhí)行
十三、Gitlab-CI/CD?
擴(kuò)展
Gitlab CI/CD 是一個(gè)內(nèi)置在GitLab中的工具,用于通過(guò)持續(xù)方法進(jìn)行軟件開發(fā):
Continuous Integration (CI) ?持續(xù)集成
Continuous Delivery (CD) ? ? 持續(xù)交付
Continuous Deployment (CD) ? 持續(xù)部署
CICD是什么?
持續(xù)集成(Continuous Integration)、持續(xù)交付(Continuous Delivery) 、持續(xù)部署(Continuous Deployment) 的新方法,關(guān)于持續(xù)集成、持續(xù)交付、持續(xù)部署,總結(jié)如下:
1、持續(xù)集成的重點(diǎn)是將各個(gè)開發(fā)人員的工作集合到一個(gè)代碼倉(cāng)庫(kù)中。通常,每天都要進(jìn)行幾次,主要目的是盡早發(fā)現(xiàn)集成錯(cuò)誤,使團(tuán)隊(duì)更加緊密結(jié)合,更好地協(xié)作。
2、持續(xù)交付的目的是最小化部署或釋放過(guò)程中固有的摩擦。它的實(shí)現(xiàn)通常能夠?qū)?gòu)建部署的每個(gè)步驟自動(dòng)化,以便任何時(shí)刻能夠安全地完成代碼發(fā)布(理想情況下)。
3、持續(xù)部署是一種更高程度的自動(dòng)化,無(wú)論何時(shí)對(duì)代碼進(jìn)行重大更改,都會(huì)自動(dòng)進(jìn)行構(gòu)建/部署。
持續(xù)集成的好處是什么?
?持續(xù)集成可以使問(wèn)題盡早暴露,從而也降低了解決問(wèn)題的難度,持續(xù)集成無(wú)法消除bug,但卻能大大降低修復(fù)的難度和時(shí)間。
持續(xù)交付的好處是什么?
持續(xù)交付的好處在于快速獲取用戶反饋;適應(yīng)市場(chǎng)變化和商業(yè)策略的變化。開發(fā)團(tuán)隊(duì)保證每次提交的修改都是可上線的修改,那么決定何時(shí)上線,上線哪部分功能則完全由產(chǎn)品業(yè)務(wù)團(tuán)隊(duì)決定。
雖然持續(xù)交付有顯著的優(yōu)點(diǎn),但也有不成立的時(shí)候,比如對(duì)于嵌入式系統(tǒng)的開發(fā),往往需要軟硬件的配合。
持續(xù)部署的好處是什么?
持續(xù)部署的目標(biāo)是通過(guò)減少批量工作的大小,并加快團(tuán)隊(duì)工作的節(jié)奏,幫助開發(fā)團(tuán)隊(duì)在其開發(fā)流程中消除浪費(fèi)。這使團(tuán)隊(duì)能夠一直處于一種可持續(xù)的平穩(wěn)流狀態(tài), 讓團(tuán)隊(duì)更容易去創(chuàng)新、試驗(yàn),并達(dá)到可持續(xù)的生產(chǎn)率。
十四、總結(jié)
GitLab 是一個(gè)用于倉(cāng)庫(kù)管理系統(tǒng)的開源項(xiàng)目。使用Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來(lái)的web服務(wù)。
可通過(guò)Web界面進(jìn)行訪問(wèn)公開的或者私人項(xiàng)目。它擁有與Github類似的功能,能夠?yàn)g覽源代碼,管理缺陷和注釋。可以管理團(tuán)隊(duì)對(duì)倉(cāng)庫(kù)的訪問(wèn),它非常易于瀏覽提交過(guò)的版本并提供一個(gè)文件歷史庫(kù)。團(tuán)隊(duì)成員可以利用內(nèi)置的簡(jiǎn)單聊天程序(Wall)進(jìn)行交流。它還提供一個(gè)代碼片段收集功能可以輕松實(shí)現(xiàn)代碼復(fù)用。
?
總結(jié)
以上是生活随笔為你收集整理的Gitlab 仓库搭建(详细版)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【TV】三星曲面电视技术解析
- 下一篇: Linux11-权限的介绍 rwx详解