導航:首頁 > 配伺服器 > gitlab伺服器地址

gitlab伺服器地址

發布時間:2023-01-07 01:11:09

1. 基於GitLab的CI/CD系統重點記要

Gitlab是套功能完善的源碼管理系統,平時用於公司內部各研發組的源碼同步、問題跟蹤、開發協同。Gitlab自帶的CI/CD功能與Gitlab更簡單、靈活的協同工作,也減小了日常維護的壓力,因此,本文針對Gitlab的CI/CD功能做的要點分享。

基於GitLab的CI/CD系統由Gitlab與Gitlab-runner兩個主要部分構成。

Gitlab源碼庫管理系統,提供基於Git的源碼庫管理、協作、許可權等豐富的功能。

在Gitlab源碼庫的根目錄中如果創建有`.gitlab-ci.yml`文件,相當於為當前源碼庫啟用了CI/CD功能。

該文件用於控制CI/CD流程與行為,每次源碼的提交、合並動作都會觸發Gitlab執行當前操作分支上的該文件。

該文件中通過gitlab提供的關鍵字、預定義變數、腳本代碼等等來規劃pipeline和定義Job,實現依據條件控制不同Gitlab-Runner中的執行器進行需要動作,共同完成代碼的編譯、打包、發布等操作。

Gitlab-Runner運行在本地或遠程目標機上的一個程序,作用是接收執行Gitlab的指令,比如編譯、打包部署等等。

一個Gitlab可接入多個Gitlab-Runner,每個Runner可以注冊多種相同或不同形式的「執行器」。

Runner與Gitlab聯接需要通過Gitlab生成的Token,每個Runner對應且僅對應到一個唯一的Token。

Gitlab-Runner基於Go語言開發,可運行在多種系統平台。Gitlab-runner在Gitlab中有三種使用許可權范圍,第一種是全局共享,第二種是群組共享,第三種是項目特定。

Gitlab-Runner的作用是接收Gitlab指令,並控制與管理「執行器」的程序。具體動作執行則是由Runner派生出的「執行器」這個邏輯模塊來完成,Runner支持多種「執行器」形式,有Shell,有Docker等等。

Gitlab-Runner的安裝有兩種方式,一種是直接安裝到原生系統,另一種是以Docker容器方式進行安裝。Runner安裝完成後,需要執行Runner中的注冊命令,建立與Gitlab的關聯。

在注冊過程中需要填入Gitlab伺服器地址、Gitlab提供的Token、執行器形式,以及不同執行器的配置等等。

將Runner以原生系統方式進行安裝(也可以以Docker形式安裝),並在Runner注冊時選擇Docker執行器形式。

在注冊過程中會要求指定一個Docker Image,該Docker Image是默認用於執行指令的實體(即在`.gitlab-ci.yml`中未指定Image時默認使用,也可以在Job中明確指定其它的Docker Image)。Runner注冊完成後會在`/etc/gitlab-runner`中生成一個`config.toml`文件,如要修改Runner配置,可重新注冊(重新注冊原配置不會刪除,原注冊的執行器還保持有效,需要在Gitlab端刪除)或修改該文件。另外,一個Runner實例可以配置多個同類型或不同類型的執行器。

執行器是用於Job執行不同的指令,因此執行器的環境需要依據Job的具體要求進行配置,比如用於Java構建,則執行器環境中需要支持jdk、maven等指令。由於本篇用的是Docker形式的執行器,因此在指定的DockerImage中要安裝好JDK與MAVEN包(註:為了更好的利用自建的DockerImage,需要創建一個Docker私服,可以用Harbor或Nexus3來實現自定義的Docker Image的管理)。

每個Job都會重新啟動一個新的容器,並且會自動完成源碼庫的下載(放在啟動容器的`/build`目錄中),並且這個不要求執行器鏡像支持Git(原理不清楚,有清楚的歡迎評論區指教!),如何在Job中禁止下載原碼還需要再學習(有清楚的歡迎評論區指教!)。

以下是`config.toml`文件及主要欄位說明:

`.gitlab-ci.yml`文件必須在源碼庫的根目錄中,該文件用於控制源碼何時、何地、如何加工處理代碼的配置腳本,並且需要符合`YAML`的格式與語法。

在該腳本中,通過`stages`關鍵字定義代碼處理階段,定義的上下順序則是階段執行次序。

然後就是各種各樣的JOB定義,在Job中需要指明哪個階段執行,在哪個執行器運行,什麼條件下執行,以及執行的具體動作。多個不同的JOB可以關聯到同一個階段,實現並發處理不同的事務。

Gitlab為CI/CD提供了平台與機制,在微服務、異構系統開發時代CI/CD已成為必不可少的效率工具,也可以說是軟體自動化生產線,但要用好和維護好一套CI/CD,需要有豐富的研發經驗與廣泛的系統知識。

2. docker快速部署gitlab代碼倉庫

GitLab 是一個用於倉庫管理系統的開源項目,使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務。

GitLab由烏克蘭程序員DmitriyZaporozhets和ValerySizov開發,它使用 Ruby語言 寫成。後來,一部分用 Go語言 重寫。截止2018年5月,該公司約有290名團隊成員,以及2000多名開源貢獻者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O』ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等組織使用。

Git、Github、Gitlab的區別:

• Git

一種代碼版本管理系統,可以理解為標准或者統稱。

• Github

產品名稱,基於git開發的代碼管理系統,必須公開於互聯網上的公共倉庫,安全較低,私有項目需要另外付費。

• Gitlab

產品名稱,基於git開發的私有代碼管理系統,開源免費、可自行管理的私有倉庫,安全較高。

• 其它Git

msysGit、 Gitee(碼雲)、Gitea、 Gogs、 GitBucket類似於Github、Gitlab

下面我們介紹如何用docker快速部署一套功能強大的gitlab-ce社區版代碼倉庫。

第一步、centos 7.6安裝、配置IP、dns、網關等(略)

第二步、安裝docker安裝,參考作者前幾天的文章《centos 7下安裝docker》

https://www.toutiao.com/i6994343127452566054/

第三步、安裝docker-compose,參考作者前幾天的文章《使用docker-compose運行docker容器》

https://www.toutiao.com/i6994600889604440608/

第四步、下載gitlab-ce 13.12.10官方鏡像

docker pull gitlab/gitlab-ce:13.12.10-ce.0

第五步、建立相關目錄結構,配置目錄許可權

mkdir -p /data/gitlab/config

mkdir -p /data/gitlab/data

mkdir -p /data/gitlab/logs

第六步、建立docker-compose.yml

cd /data/gitlab && vi docker-compose.yml

docker-compose.yml具體配置和說明放本文章後面。

第七步、使用dc up -d起動容器

cd /data/gitlab && dc up -d

等待幾分鍾後服務初始化完成,使用宿主機IP在瀏覽器上進入gitlab,配置root管理員的密碼。一套功能強大的gitlab代碼倉庫搭建完成,關於gitlab的具使用,後面會推出相關視頻/文章說明。

附:docker-compose.yml

version: '3.6' #配置編排的版本

services:

gitlab:

image: gitlab/gitlab-ce:13.12.10-ce.0

TZ: 'Asia/Shanghai' #配置容器時區,不會有8小時差異

GITLAB_OMNIBUS_CONFIG: |

external_url 'http://172.18.95.158' #伺服器訪問地址,也可以是域名

gitlab_rails['time_zone'] = 'Asia/Shanghai' #配置gitlab服務的時區

gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" #管理員郵箱smtp地址

gitlab_rails['smtp_port'] = 465 #管理員郵箱伺服器埠

gitlab_rails['smtp_user_name'] = "[email protected]" #管理員郵箱地址

gitlab_rails['smtp_password'] = "ZSfS11AssBXX" #管理員郵箱密碼,配置後才可以給用戶發郵件等信息

gitlab_rails['smtp_domain'] = "xxxxxx.com" #管理員郵箱域名

gitlab_rails['smtp_authentication'] = "login" #管理員郵箱的驗證方式為login

gitlab_rails['smtp_enable_starttls_auto'] = true #使用安全加密方式登陸管理員郵箱

gitlab_rails['smtp_tls'] = true

gitlab_rails['gitlab_email_from'] = '[email protected]' #管理員郵箱賬號

gitlab_rails['gitlab_shell_ssh_port'] = 22

ports: #放開gitlab 80埠,後面我們用80埠訪問gitlab

- '80:80'

volumes: #掛載配置、數據持久化、日誌目錄

- ./config:/etc/gitlab

- ./data:/var/opt/gitlab

- ./logs:/var/log/gitlab

3. Gitlab郵箱設置

用阿里雲企業郵箱作為Gitlab的郵箱SMTP服務。

首先,需要在阿里雲的控制台申請一個企業郵箱,這要求你至少有一個ECS伺服器和對應的域名。我這里用的是10knet.com來申請的,每個阿里雲賬號只能申請一個免費企業郵箱。

阿里雲企業郵免費版申請地址:https://wanwang.aliyun.com/mail/freemail/

如果你的公司在使用【釘釘】,那麼也可以免費獲得一個企業域名後綴的免費郵箱。

申請成功之後在阿里雲官網的【控制台-企業郵箱】可以看到郵箱的基本信息。

注意這里的管理員賬號是 [email protected] ,我們從阿里雲企業郵箱網址 https://qiye.aliyun.com 用這個賬號登錄,如果不知道密碼你可以先【重置密碼】。

登錄之後進入 【賬號管理】(或右上角的小扳手域管理) ,設置員工賬號,你可以創建一個類似 [email protected] 的賬號,用來專門發送各種自動郵件,設置好之後建議測試一下這個新賬號登錄企業郵箱是否能正常。

用管理員賬號登錄企業郵箱,在管理設置右上角進入【幫助中心】,然後搜索 SMTP ,找到 企業郵箱的POP3、SMTP、IMAP地址是什麼? ,點進去可以得到以下信息:

我們需要關注SMTP的伺服器地址和加密埠號,稍後要用到。

用sftp工具登錄你的Gitlab部署的伺服器,找到 /etc/gitlab/gitlab.rb 文件並打開編輯,添加如下內容。

需要特別注意的是埠選擇465,不要忘記最後一行 gitlab_rails['smtp_tls'] = true 。否則後面發送測試郵件可能遇到 eoferror (end of file reached) 或 net::opentimeout (execution expired) 的問題。

修改保存,上傳更新Gitlab.rb之後,執行下面的命令刷新設置並重新啟動Gitlab:

上面的兩個命令成功之後,我們用下面的命令進入Gitlab控制台狀態。

稍等會出現提示

然後輸入下面的命令發送測試郵件:

正常的話將收到成功的提示,郵件也會正確的發送到指定郵箱。

歡迎訪問我的個人站點,獲取最新文章和更多資源

專輯站點傳送門
10knet.com全部專輯傳送門

4. GitLab 遠程 定時備份

一、環境准備

1.gitlab所在的伺服器A(centos7,192.168.1.1)
2.備份伺服器B(centos7,192.168.1.2)
3.gitlab本地備份目錄設置為/var/opt/gitlab/backups/log,本篇也是以此展開
gitlab已經配置了本地備份。如果沒有配置,可以參考 http://www.cnblogs.com/straycats/p/7671204.html 。

二、通過密鑰配對取消scp傳輸密碼的限制
手動備份數據費時費力。最好的方法就是通過腳本實現遠程自動備份。但遠程無論是通過SSH登陸,還是通過scp拷貝文件都需要輸入密碼。

為了克服這個問題,首先需要實現不需要密碼的SSH登陸,這樣就可以使用 rsync,scp,rexec等命令來做的遠程備份了。

2.1 生成密鑰對

假設A,B兩伺服器,現在需要在A機上用root登陸B機,而不需要輸入密碼。那我們可按照下面的步驟來做:

** 1)在gitlab伺服器A上生成rsa證書 **

1、生成的過程中提示輸入密鑰對保存位置,直接回車,接受默認值就行了。
2、因為之前已經有/root/.ssh/id_rsa 文件存在,因此提示你是否覆蓋,輸入y表示覆蓋
3、接著會提示輸入一個密碼,直接回車,讓它空著。當然,也可以輸入一個密碼。
4、接著輸入確認密碼,輸入完之後,回車密鑰對就生成完了。

這樣,在/root/.ssh下生成id_rsa 和 id_rsa.pub 兩個文件,其中公共密鑰保存在 /root/.ssh/id_rsa.pub,私有密鑰保存在/root/.ssh/id_rsa。

** 2)在gitlab伺服器A上cp生成rsa公鑰證書 **

在/root/.ssh下復制備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到遠程伺服器B。

2.2 生成rsa公鑰證書上傳到備份伺服器B

先在伺服器B上創建目錄/root/.ssh。

使用scp命令進行遠程復制,將伺服器A生成的id_rsa.pub.A拷貝到伺服器B的/root/.ssh目錄下。

此時使用scp命令需要輸入密碼,當把下面的「2.3 密鑰配對」執行後,以後gitlab伺服器A使用scp命令復制文件到備份伺服器B的話,就不需要輸入密碼了。

2.3 密鑰配對

1)創建authorized_keys文件

在備份伺服器B的/root/.ssh下創建authorized_keys文件。

2)將id_rsa.pub.A文件內容追加到authorized_keys 文件中

通過 cat 命令 把id_rsa.pub.A 追寫到 authorized_keys 文件中。

3)修改authorized_keys文件的許可權

authorized_keys文件的許可權很重要,如果設置為777,那麼登錄的時候,還是需要提供密碼的。

4)測試上傳文件是否還要輸入密碼

不放心的話,立刻測試下gitlab伺服器A使用scp命令復制文件到備份伺服器B是否還要輸入密碼。

發現在2.3之前,由於沒有設置ssh證書授權認證時,上傳需要輸入密碼;2.3操作完後,由於授權認證,已經不需要輸入密碼了。

三、定時將備份文件傳到備份伺服器

3.1 創建遠程備份腳本

在gitlab伺服器A上 ,在/root目錄下創建定期備份腳本auto_backup_to_remote.sh。

添加下面的內容,並wq保存。

3.2 修改遠程備份腳本auto_backup_to_remote.sh的許可權

要能讓系統執行 auto_backup_to_remote.sh ,必須修改該腳本的許可權。

3.3 創建日誌存放目錄

3.4 測試遠程備份腳本的功能是否可用

現在為了驗證腳本是否可以正常運行,我們需要手動執行腳本。

在gitlab伺服器A上執行find命令,看是否能夠正常查找出我們要scp到遠程伺服器的Gitlab備份文件。

手動執行腳本auto_backup_to_remote.sh,看是否能夠正常上傳

等待1-2分鍾左右,查看備份伺服器B的目錄/root/gitlab_backup下是否有伺服器A傳過來的備份文件。

在備份伺服器B上能找到伺服器A傳過來的備份文件,說明遠程備份腳本的功能OK。

如果每次上傳都通過人工運行腳本的方式,人工的消耗太大,接著配置定時執行該腳本。

3.5 添加定時計劃

定時備份的思路建立在手動的基礎上,通過crontab添加定時計劃就可以解決這個問題。

一般添加定時計劃可以有2種方式:

1.使用命令crontab -e,將定時任務添加後保存。

2.將定時任務添加到/etc/crontab文件中。

我這里採取第一種,使用crontab -e。

結合我之前對公司gitlab本地備份的設計,故設計在備份完10分鍾後上傳,故分別在每天12:10、19:10進行備份,故添加下面的內容,wq保存。

重啟crontab

四、定時刪除備份伺服器上的備份文件

每個Gitlab備份文件都很大。因此每天備份兩次,過不了多久的話,備份伺服器B上的磁碟空間可能就會被Gitlab備份文件佔用完。

故需要定期清理備份文件,參考備份伺服器的空間,暫定保留14天的備份文件。

4.1 創建刪除過期備份文件的腳本

設計備份伺服器B的/root/gitlab_backup作為接收遠程上傳備份文件的目錄, 故在備份伺服器B上 ,先創建該目錄。

創建刪除過期備份文件的腳本auto_remove_old_backup.sh。

添加下面的內容,並wq保存。

4.2 修改auto_remove_old_backup.sh腳本的許可權

4.3 添加定時計劃

定時備份的思路建立在手動的基礎上,通過crontab添加定時計劃就可以解決這個問題。

一般添加定時計劃可以有2種方式:

1.使用命令crontab -e,將定時任務添加後保存。

2.將定時任務添加到/etc/crontab文件中。

我這里採取第一種,使用crontab -e。

設計凌晨0點執行刪除過期備份文件的腳本,故添加下面的內容,wq保存。

重啟crontab

5. gitlab 在內網伺服器,怎麼使用

ubuntu 13/pub/ruby/1/gitlabhq/gitlab-shell/',本地區域網安裝的話默認localhost就行/gitlabhq/gitlabhq.git gitlab# 進入 gitlab 目錄cd /home/git/gitlab# 切換到 gitlab 的 5.3 分支.sudo -u git -H git checkout 5-3-stablecd /home/git/gitlab# 復制 gitlab 的示例配置文件到指定目錄sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml# 如果用的不是本地伺服器,更改 localhost 為 gitlab 的伺服器域名sudo -u git -H gedit config/gitlab.yml# 確保當前用戶對 gitlab 的 log 和 tmp 文件有讀寫許可權.sudo chown -R git log/sudo chown -R git tmp/sudo chmod -R u+rwX log/sudo chmod -R u+rwX tmp/# 創建一個我不認識的目錄...汗!sudo -u git -H mkdir /home/git/gitlab-satellites# 再創建兩個我不認識的目錄...並且確保 當前用戶對他有讀寫許可權.sudo -u git -H mkdir tmp/pids/sudo -u git -H mkdir tmp/sockets/sudo chmod -R u+rwX tmp/pids/sudo chmod -R u+rwX tmp/sockets/# 創建公共的上傳備份目錄,並確保當前用戶對其有讀寫許可權.否則備份會失敗.sudo -u git -H mkdir public/uploadssudo chmod -R u+rwX public/uploads# 復制示例配置文件到制定目錄sudo -u git -H cp config/puma.rb.example config/puma.rb# 找到其中有一行 # workers 2,去掉前面的 # 並將 2 改為 3.sudo -u git -H gedit config/puma.rb# 配置 gitlab 的全局設置.sudo -u git -H git config --global user.name GitLabsudo -u git -H git config --global user.email gitlab@localhost# 復制示例Mysql配置文件到指定目錄sudo -u git cp config/database.yml.mysql config/database.yml# 修改裡面的 root 為 gitlab, 密碼為創建的 gitlab mysql 用戶密碼sudo gedit config/database.yml# 安裝一個我不認識的東西...我沒臉翻譯了...大哥你還是看原版教程吧cd /home/git/gitlabsudo gem install charlock_holmes --version '0.6.9.4'sudo -u git -H bundle install --deployment --without development test postgressudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=proction# 下載 gitlab 的 開始/停止 腳本,並且加入當前用戶的可執行許可權.sudo cp lib/support/init.d/gitlab /etc/init.d/gitlabsudo chmod +x /etc/init.d/gitlab# 添加 gitlab 的開機啟動sudo update-rc.d gitlab defaults 21# 檢查 gitlab 的狀態和環境配置是否正確.sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=proction# 啟動 gitlabsudo service gitlab start# 或者sudo /etc/init.d/gitlab restart# 再次檢查 gitlab 的狀態,如果全部綠色,說明 gitlab 配置成功.不知道為什麼,我要運行這個命令兩次才會全綠sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=proction七. 配置 Nginx# 軟體源安裝Nginxsudo apt-get install nginx# 復制 gitlab 的示例配置到指定目錄sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlabsudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab# 修改配置文件.更改其中的 YOUR_SERVER_FQDN 為你的 gitlab 伺服器全稱域名或者本機IP地址,修改 listen 為 *:80sudo gedit /etc/nginx/sites-available/gitlab# 重啟 nginx 伺服器sudo service nginx restart# 打開瀏覽器輸入本機 IP,用下面的用戶密碼登錄既可[email protected]!fe

6. Gitlab 克隆項目時IP地址不一致的問題處理

問題發生的起源:

每次重啟了伺服器。clone時發現IP地址是一堆亂碼。不是域名地址。見截圖

解決方案

(注)gitlab部署在docker中,則需要執行第2步:「進入gitlab容器」的操作。反之,直接從第3步:「進入config目錄」開始執行即可

1、登陸搭建gitlab的伺服器

2、進入gitlab容器

dockerexec-it gitlab bash

3、進入config目錄。編輯gitlab.yml文件

cd  /opt/gitlab/embedded/service/gitlab-rails/config

vim gitlab.yml

 4、重啟gitlab。必須重啟

gitlab-ctl restart

7. 個人Gitlab搭建及配置

訪問http:// ip地址

設置密碼,然後通過 root + password 登錄,當然也可以自己新建用戶。

之後,將要訪問此GitLab的伺服器上的公鑰添加進來就可以進行愉快的玩耍了 (linux 系統一般在 /root/.ssh 目錄下,Windows一般在 C:\Users\用戶名.ssh 目錄下)

當你完成以上操作之後,你會發現你倉庫中的SSH和HTTP地址是下圖這樣的,所以我們要對GitLab進行IP顯示的配置及埠配置。

修改如下項

修改 gitlab.rb

當你完成以上配置後,還是不能通過 http:// ip location : prot 來訪問你的GitLab倉庫。

修改GitLab ngnix 監聽埠

完成以上設置之後,就可以通過 IP + PORT 來訪問你的GitLab庫了,同時倉庫的HTTP地址顯示也正常

修改SSH埠首先要修改伺服器的SSH埠,這會影響到 Xshell 對伺服器的連接。

完成以上操作之後,一切就都正常了

8. 代碼管理-gitlab使用方法建議

對gitlab的使用主要從兩個角度去分析,一個是管理員,一個是開發提交者。

1.1 初始配置

瀏覽器訪問 http://伺服器IP:11000

第一次訪問會默認以root管理員用戶登陸,需要輸入兩遍密碼。

登陸後,可以看到,gitlab中主要圍繞著以下幾個概念進行操作:

group 團隊

如果是作為個人使用,那麼使用root用戶創建project就可以實現上傳下載代碼了。

如果是小團隊項目,就需要創建group,並在group中創建projects,添加user到group中,並給用戶相應的許可權。

1.1.1 關閉系統注冊功能

為了便於管理,可以選擇關閉gitlab的注冊功能.

在主界面左邊條依次選擇 **Settings -> General -> Sign-up restrictions** ,點擊 Expand 按鈕,在 **Sign-up restrictions** 選項處將勾點掉,下拉點擊 **Save changes** 就可以了。

1.1.2 修改網站logo

為了讓我們的gitlab看起來更符合項目,可以對網站的logo進行調整,在 **Appearance** 中對 導航條圖標(Navigation bar)、網站圖標(Favicon)、登陸頁圖標(Sign in/Sign up pages)進行設置。

1.2 代碼管理

1.2.1 團隊協作方式

gitlab團隊協作主要有兩種方式:

使用fork

* 項目負責人在gitlab上新建一個項目,並分享URL給開發人員

* 開發人員在負責人的gitlab項目頁面上點擊「fork」按鈕,將此項目fork到自己的gitlab上,這相當於是從負責人那拷貝了一份項目副本,無論開發人員如何修改代碼都不會影響負責人那master分支上的代碼

* 然後開發人員可以根據自己的項目分工,像對待普通項目一樣做clone、add、commit、push等操作

* 如果開發人員人為一個小模塊做好了,可以點擊「**New Merge Request**」按鈕,向負責人發送代碼合並請求,要合並的代碼文件也會以列表的形式同時發送給負責人,此時負責人會看到開發人員的請求,經審核如果代碼沒問題則會合並模塊,並向開發人員發送確認合並的通知

不使用fork

1. 負責人為開發人員分別創建開發分支(namedev_branch)

* 項目負責人在gitlab上新建一個項目,並為每一個開發人員創建一個開發分支(namedev_branch)

* 開發人員clone項目之後,經git branch檢查發現本地只有master分支,因此也需要把屬於自己的開發分支也一起獲取下來

> `git fetch origin namedev_branch:namedev_branch`

> `#拉取遠程的一個叫namedev_branch的分支,並在本地創建一個叫namedev_branch的分支和遠程的分支匹配`

* 切換到namedev_branch分支

> `git checkout namedev_branch`

* 之後的操作如同對待普通項目一樣

> `git add hello.py`

> `git commit -m "add hello.py"`

> `git push -u origin namedev_branch #需要注意,是push到遠程的namedev_branch分支`

~~這個方式感覺有風險,項目成員要注意自己的branch,很容易因為忽略branch直接向master提交變更,對代碼管理會添加麻煩~~

2. 負責人不為開發人員分別創建開發分支 (開發者自己創建)

* 雖然項目負責人不分別為開發人員創建分支,但是需要把他們添加到一個group中,否則開發人員在向項目push自己的開發分支時遇到許可權錯誤

* 開發人員在把項目clone之後需要為自己新建一個開發分支(namedev_branch),因為經由git branch查看發現本地只有master分支

> `git branch namedev_branch #新建分支`

> `git checkout namedev_branch #切換到開發分支`

> `git push origin namedev_branch #將新建的開發分支push到遠程項目上`

* 之後的操作如同對待普通項目一樣

> `git add hello.py`

> `git commit -m "add hello.py"`

> `git push -u origin namedev_branch #需要注意,是push到遠程的namedev_branch分支`

之後,兩種方式下項目負責人都可以在項目的gitlab主頁上看到每個開發人員的工作進度,並考慮何時merge開發人員的分支到master分支上以完善項目。

所有成員包括項目負責人除克隆、修改、提交代碼這些操作外,其它merge、建立分支等操作都在Gitlab網頁端進行。

所有分支中,master分支為主幹分支,此分支的代碼不允許直接修改,只能由其它分支(一般只由develop分支)發出merge請求,經項目管理員代碼審查通過後合並代碼,普通開發者無權執行push、merge等操作,確保此分支任何時候、任何tag處導出的項目代碼都是穩定可正常運行的代碼;develop分支為開發分支,可以接受由其它分支發起的merge請求,同樣只能經項目管理員代碼審查通過後予以合並。

1.2.2 團隊初始化

假設我們項目組分為兩個組team1、team2,每個組有不同的組員和對應的不同的子項目,對項目組用戶開放項目的訪問,使用fork方式來做代碼的更新和提交。

因此我們的gitlab的架構大概是這樣的:

1. 創建Group,在主界面上方的加號選擇**New Group**,創建Group只需要填寫 Group path 、Group name、Description 幾個選項就可以了。Visibility Level選項選擇 Private-私有倉庫

2. 創建user,對需要加進來的團員,由管理員負責給他們創建相應的用戶,創建用戶需要填寫合法的Email地址,正常情況下會向這個Email發送登陸的初始連接,但是如果不方便的話,也可以在創建後由管理員修改這個user的初始登陸密碼。

3. 選中Group添加相應的user,user的角色分以下幾種:Guest、Reporter、Developer、Maintainer、owner,基本上我們只會用到guest和developer兩種。

4. 在Group中創建project,選中Subgroup,點擊 New project 來創建新的項目。

5. 項目完成創建後,相應的團隊成員也可以使用fork來獲取項目的內容,fork後屬於成員自己的項目的git地址是不一樣的,這個一定要注意,後面提交代碼都是提交到這個fork項目的地址,只有在網頁端發起merge request 以及從master更新fork項目時才會用到主項目

1.2.3 代碼提交管理

當有新的代碼提交請求時,項目負責人可以通過查看merge requests獲取到來自fork或者branch的合並請求:

接受合並時,可以選擇 Open in Web IDE 來檢查審核變更的內容,確認沒問題後點擊Merge按鈕來合並。

1.2.4 活躍度查詢

右邊條選擇 Project -> Activity 可以看到push、merge、issue、comment(討論)等信息

選擇 Cycle Analytics 可以看到圖形化的分析內容,這部分需要有足夠的數據支持,還需要好好研究下。

> Cycle Analytics measures the time it takes to go from an idea to proction for each project you have.

> 周期分析功能是監測從每個項目一個想法到產品所需的時間。

## 項目開發方式 issue+milestone+label

如何結合gitlab提供的這些功能來完整的梳理、管理一個產品、或者一個模塊的開發方式

定義一個開發任務從開始如何分配到最後如何標識完成的過程。

這一塊是用好gitlab的重點,否則就是用gitlab來做一個簡單的代替svn的版本管理工具

2.1 fork項目

項目成員首先利用瀏覽器進入gitlab的系統後,查看自己的group和project,並fork自己需要參與開發的project。

> 在project的detail界面中點擊fork按鈕。

fork時會提示選擇**Namespace**,這個選擇是用來決定這個工程所屬的,可以選Users,或者選擇Groups,這個會影響到後面工程的url,項目成員都統一選擇users本人的命名空間就可以了。

2.2 獲取fork項目

項目內容獲取主要使用git客戶端工具來實現,項目開發人員首先要在本機安裝git客戶端軟體,[下載地址](https://www.git-scm.com/)

安裝時基本都採用默認設置就可以了。

安裝完成後我們主要使用Git Bash命令行工具來工作。

2.3 設置賬戶信息

設置修改本地對應的gitlab用戶和郵箱。


2.4 配置ssh連接信息 (windows下沒調成功)

1. 創建 SSH密鑰

通過下面的命令生成密鑰,將命令中的[email protected]替換為注冊Gitlab時用的Email地址。

`ssh-keygen -t rsa -C "[email protected]"`

注意:Enter passphrase (empty for no passphrase) :時,可以直接按兩次回車鍵輸入一個空的 passphrase;也可以選擇輸入一個 passphrase 口令,如果此時你輸入了一個passphrase,請牢記,之後每次提交時都需要輸入這個口令來確認。

2. 獲取公鑰內容

SSH密鑰生成結束後,根據提示信息找到SSH目錄(通常ssh密鑰保存路徑均為~/.ssh 目錄),會看到私鑰id_rsa和公鑰id_rsa.pub這兩個文件,不要把私鑰文件id_rsa的信息透露給任何人。

用記事本打開id_rsa.pub,復制裡面的所有內容以備下一步使用。

3. 將密鑰中的公鑰添加到Gitlab

登錄Gitlab的web站點,進入個人資料設置 - SSH Keys頁面,將第2步所獲得的內容粘貼在文本框key內,並填寫title以便記憶,而後保存。

2.5 克隆代碼

在gitlab網頁端進入project的detail中可以下拉看到提示的代碼信息。

這樣在本地就可以獲取到fork的項目內容。

2.6 正常代碼更新提交



2.7 更新本地倉庫內容命令

2.8 請求合並到master

在網頁端進入到project的detail界面後,如果fork的項目代碼有變動,在界面右上角會提示**Create merge request** 來提交合並申請

點擊創建後,輸入本次提交的title和描述,描述要說明本次提交修改的腳本、修改的內容等信息,便於管理員審核。

2.9 【關鍵】同步最新master庫內容

fork後的項目不會自動從master主分支獲取更新,需要負責fork的開發人員自己更新版本

如何更新已經fork的代碼:

* 首先要先確定一下是否建立了主repo的遠程源:

在本地項目庫下執行 `git remote -v`

* 如果裡面只能看到你自己的兩個源(fetch 和 push),那就需要添加主repo的源:

* fetch源分支的新版本到本地

執行 `git fetch upstream`

執行後本地庫的內容會更新為與master庫一致的內容

* 合並本地兩個版本的代碼:

執行 `git merge upstream/master`

* 將在本地合並後的代碼push到自己的github上去,以更新github上fork的倉庫

執行 `git push origin master `

執行後網頁端的倉庫內容更新為合並後的新版本

對於開發人員來說,會使用fork克隆項目,會使用本地git客戶端對項目內容進行更新、編輯、提交,會在網頁端提交代碼合並申請並且規范編寫申請描述就足夠了。

對管理人員來說,使用gitlab能方便的知道每個員工負責的內容的提交進度情況,方便對他們提交的代碼進行質量的檢查走讀,還有更多統計類、開發進度管理等等功能,但是需要熟練掌握gitlab上的一些功能使用方法,比如使用issue來管理開發任務分配,使用milestone來制定和管理里程碑等等。

# 3. gitlab使用開發規范

參考:[gitlab使用開發規范](https://blog.csdn.net/ruanhao1203/article/details/80440824)

9. 搭建GitLab伺服器

GitLab是GitHub的免費私有庫替代方案,並且安裝與配置都很方便。

GitLab要求最少4GB內存,支持小團隊使用沒問題,實測2GB內存的VPS基本沒法用,開swapfile也不行,動不動就60秒超時。因此4GB內存是必須的。

關於這一點,內存大戶主要是Unicorn,基於ruby的http伺服器。Unicorn會在啟動後預先佔用大部分內存,內存會隨著使用逐漸增長,並且不會釋放。根據GitLab和Unicorn的官方文檔,這不是它們的鍋,那麼這個鍋可能是ruby和rails了。解決方法是unicorn-work-kill,會根據請求次數和內存佔用自動重啟Unicorn。Omnibus版的GitLab是默認開啟的。

GitLab分為社區版和企業版,在未付費的情況下,兩者的功能是一樣的。並且社區版整合了CI/CD,因此可以滿足絕大部分的開發需求。

安裝包主要包括Omnibus整合包,Docker、AWS等的雲鏡像,以及一些第三方維護的版本。其中Omnibus直接整合了所有服務端組件,適合自用和練手。

安裝以Omnibus整合包為例,操作系統為Ubuntu16.04。

Gitlab需要 curl,openSSH 和 ca-certificates 這幾個組件:

不過伺服器系統一般自帶,所以是可選的。

郵件服務,用於GitLab發送找回密碼的郵件:

不過如果伺服器沒有域名的話,大部分郵箱會拒收郵件,而管理員帳號可以直接重置其他賬號的密碼,所以是可選的。

官方提供的腳本:

這個腳本會自動添加源到apt 的source list,以及安全key。另外,如果自己伺服器在國內,腳本會自動添加清華的鏡像,速度還行。

先更新apt緩存:

推薦使用 apt 而不是 apt-get ,前者大多數情況下更簡單一點。

然後是安裝:

其中 EXTERNAL_URL ,改成自己的域名。沒有域名的話,可以直接設置成IP的形式: http://1.2.3.4 ,這個推測跟nginx服務以及GitLab中的項目地址有關,所以最好正確設置。當然也可以之後在配置文件里更改。

安裝完成後,可以在配置文件中修改配置 /etc/gitlab/gitlab.rb 。

比如之前的 EXTERNAL_URL :

官方還有一個關於 unicorn 的優化建議:

默認值是2,如果伺服器只用於GitLab的話,官方建議是CPU核心數加一,可以提高伺服器的響應速度。不過如果內存只有4G,或者伺服器同時承載其他服務,就不要改了,以免內存不足。另外,這個參數最小值是2,設為1,伺服器可能會卡死。

配置完成後,刷新配置:

每次修改完 gitlab.rb ,都要刷新配置。

如果沒有報錯的話,GitLab就配置完畢並且正常運行了。接下來可以打開瀏覽器開始訪問了。

10. Gitlab+Jenkins通過鉤子實現自動部署web項目,圖文詳細教程

擴展參考:Jenkins+Gitlab通過腳本自動部署回滾web項目至集群

1):Gitlab伺服器:ubuntu 192.168.152.131 ---參考搭建:Linux安裝gitlab,docker安裝gitlab教程

2):Jenkins伺服器:ubunu 192.168.152.130 ---參考搭建:linux安裝Jenkins,或docker安裝Jenkins教程

在伺服器上生成ssh-keygen,用於配置web伺服器和Gitlab伺服器。

3):web伺服器:centos 192.168.152.150 ---已搭建好LNMP環境

4):開發者電腦:Windows+key密鑰 (用於提交代碼)

1:在gitlab創建項目Test Project

2.1): 配置一個開發者電腦的ssh公鑰到gitlab

配置一個開發者電腦的ssh公鑰到gitlab,這樣才能模擬開發上傳代碼到gitlab。

windows生成key過程及git安裝,可參考:Windows下git和github的使用圖文詳細教程_the丶only的博客-CSDN博客_github win

在windows測試clone,和提交代碼。


註:最新版git 已經將默認分支master改為main了。所以看到main,而不是master不要太奇怪

測試成功,在gitlab也顯示有index.html文件。

2.2): 配置jenkins公鑰到gitlab

同理,同樣需要jenkins公鑰,因為jenkins也需要拉去gitlab的代碼。

jenkins伺服器 上查看公鑰並復制添加到gitlab,並命名為jekins。

1:插件管理,安裝插件

jenkins本身沒什麼功能,主要是依靠插件來實現各種強大的功能。

基本需要添加的插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git Parameter

可以在 Manage Jenkins >> Manage Plugins 查看管理插件。在Available 選項搜索安裝插件即可。

安裝完成後,重啟Jenkins。

2:添加需要部署的web主機

在 Manage Jenkins >> Configure System 中往下翻,找到 Publish over SSH 選項,點擊add ssh server。

在Jenkins伺服器上,查看私鑰,注,是私鑰,不是公鑰。

將私鑰填寫在key位置,還有添加web伺服器相關信息。

註:如果測試報錯如下

Failed to connect or change directory
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@2e54414f]

是因為默認用ssh-keygen命令,默認生成了OPENSSH 格式密鑰。而Jenkins暫時不支持這種私鑰,私鑰開頭結尾如下:

所以,需要生成rsa密鑰格式的。用開頭說的ssh-keygen加其他參數生成即可。

私鑰開頭結尾如下:

再次測試,顯示success,則成功。然後點擊save保存即可。

3:構建任務項目

首頁創建任務或者一個項目

命名為web-project,選擇為freestyle project 自由項目。然後ok確認。

3.1):源碼管理 Source Code Management

選擇源碼管理,添加gitlab的項目clone地址。

註:最後路徑選擇分支,我gitlab主分支名字為main,如果是master,則寫master,或者合並的其他分支。

在add添加用戶

添加完成後,選擇git用戶,這時沒有紅色提醒,說明已成功連接

3.2):構建觸發器 Build Triggers

現在Build Triggers,勾選build when....,其他默認,並記下鏈接 http://192.168.152.130:8080/project/web-project

點擊高級 advance 選項。

勾選filter branches regex選擇,填寫分支,生產token。其他默認

3.3):構建 Build

選擇Build 選項。選擇ssh

添加web伺服器

添加完畢,最後save保存。

1:添加鉤子webhooks.

選擇自己的項目Test Project,在設置setting里,選擇鉤子webhooks.

填寫剛才記下的http://192.168.152.130:8080/project/web-project和token值。

最後Add webhook完成:

2:如添加失敗,報錯,更改Network

註:如填寫失敗提示Url is blocked: Requests to the local network are not allowed

還需更改Network選項。

3:測試鉤子

添加完成後,下面會出現鉤子選擇。點擊test中的,push event。

出現successful,即添加成功。

在Jenkins也可以看到剛才的測試時間信息。

在開發電腦上測試提交,我這里為Windows電腦測試。

打開Git Bash,輸入以下命令:

提交成功,回到Jenkins,查看是否構建成功:

綠色顯示構建成功,無錯誤顯示。回到gitlab查看項目。

時間顯示剛才也提交成功,無錯誤。最後在瀏覽器輸入web地址測試,本人配置了web訪問埠8082。所以輸入IP加埠訪問。

內容也已經自動更新成功。

完結撒花!!!

閱讀全文

與gitlab伺服器地址相關的資料

熱點內容
水壓縮後有彈性 瀏覽:42
蘇州阿里雲伺服器數據備份 瀏覽:522
消息提示音怎麼設置安卓 瀏覽:277
怎麼去掉安卓手機的小圓圈 瀏覽:474
女程序員每天教你一招 瀏覽:590
葯劑學pdf下載 瀏覽:477
打開的共享文件夾少東西 瀏覽:643
芝麻黑頭解壓去除視頻 瀏覽:186
光明與黑暗怎麼進入伺服器 瀏覽:659
20歲的程序員 瀏覽:238
p4備份伺服器是什麼意思 瀏覽:350
棗庄空氣壓縮機維修 瀏覽:621
色弱程序員 瀏覽:415
oraclelinux修改ip 瀏覽:665
雲上城之歌九游通用伺服器 瀏覽:348
加密貨幣需要投資嗎 瀏覽:533
php選擇文件夾 瀏覽:564
資料庫命令文件用什麼創建 瀏覽:66
空調壓縮機接頭 瀏覽:376
安卓命令代碼大全 瀏覽:13