CentOS7安裝GitLab和Jenkins構建CICD環境


CI/CD自動集成-發布-部署

  • 持續集成:簡稱CI。持續集成(continuous integration)是指開發者在代碼開發過程中,可以頻繁將代碼部署集成到主干,並進行自動化測試。持續集成的優點:快速發現錯誤,容易定位到錯誤。防止分支大幅度偏離主干。

  • 持續交付:簡稱CD。是指在持續集成的基礎之上,將代碼部署到預生產環境。持續交付可以看作是持續集成的下一步,無論如何更新,軟件是隨時隨地可交付的。

  • 持續部署:CD 在持續交付的基礎之上,把部署到生產環境的過程自動化。

持續集成流程:

  1. 開發者將新版本 push 到 Gitlab

  2. Gitlab 隨后觸發 jenkins master 節點進行一次 build。(或者通過 web hook 定時檢測)

  3. jenkins master 節點將這個 build 任務分配給若干個注冊的 slave 結點中的一個,這個 slave 結 點根據一個事先設置好的腳本進行 build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給 jenkins 來做。

  4. 我們在 build 中要迚行編譯,這里使用了分布式編譯器 distcc 來加快編譯速度。

CICD流程

gitlab 創建代碼項目--->gitlab 部署公鑰--->jenkins 安裝插件--->創建新項目--->綁定私鑰--->添加觸發器--->測試部署--->增加 Build Pipeline 插件以流程圖的形式展示各個 Job 的順序

GitLab

GitLab是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自托管的 Git項目倉庫,可通過Web 界面進行訪問公開的或者私人項目。Ruby on Rails 是一個可以使你開發、部署、維護 web 應用程序變 得簡單的框架。
GitLab 擁有與 Github 類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。可以管理團隊對倉庫的訪問, 它非常易於瀏覽提交過的版本並提供一個文件歷叱庫。它還提供一個代碼片段收集功能可以輕松實現代碼 復用,便於日后有需要的時候進行查找。

GitLab 中文網:https://www.gitlab.com/installation/#centos-7

清華大學鏡像站: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

GitLab包含軟件:

alertmanager
gitaly
gitlab-exporter
gitlab-workhorse
grafana
logrotate
nginx
node-exporter
postgres-exporter
postgresql
prometheus
redis
redis-exporter
sidekiq
unicorn

GitLab安裝

# 服務器節點內存需要大於4G
# 安裝依賴
yum install -y policycoreutils-python

# 上傳rpm包
rpm -ivh gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

# 配置gitlab域名
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.63:9999'

# 初始化gitlab,會重置為最原始的配置
gitlab-ctl reconfigure

# 查看狀態
gitlab-ctl status

# 瀏覽器訪問驗證
http://192.168.1.63/users/sign_in

# 關閉 gitlab: 
gitlab-ctl stop 

# 啟動 gitlab: 
gitlab-ctl start 

# 重啟 gitlab: 
gitlab-ctl restart

# gitlab啟動報warning: redis: unable to open supervise/ok: file does not exist;解決如下:
systemctl restart gitlab-runsvdir

# GitLab的配置文件
/etc/gitlab/gitlab.rb 	//可以自定義一些郵件服務等 
日志地址:/var/log/gitlab/ 	 // 對應各服務 服務地址:/var/opt/gitlab/ 	// 對應各服務的主目錄 倉庫地址:/var/opt/gitlab/git-data  //記錄項目倉庫等提交信息

# 查看所有的logs; 按 Ctrl-C 退出
sudo gitlab-ctl tail

# 拉取/var/log/gitlab下子目錄的日志
sudo gitlab-ctl tail gitlab-rails

# 拉取某個指定的日志文件
sudo gitlab-ctl tail nginx/gitlab_error.log

# 檢查gitlab
gitlab-rake gitlab:check SANITIZE=true --trace    

GitLab漢化

# 方式1
# 漢化gitlib
tar zxvf gitlab-patch-zh.tat.gz
yum install -y git patch
git   diff   v10.2.3   v10.2.3-zh   > ../10.2.3-zh.diff
chmod -R 777 gitlab
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < ../10.2.3-zh.diff

# 方式2:
# 下載漢化包並解壓
gitlab-12-3-stable-zh.zip

# 備份原文件
cp -rp /opt/gitlab/embedded/service/gitlab-rails{,.bak_$(date +%F)}

# 將漢化包覆蓋過去(\也需要敲)
\cp -rf ./* /opt/gitlab/embedded/service/gitlab-rails

# 重啟gitlab,注意順序,
sudo gitlab-ctl start 
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

GitLab卸載

# 卸載gitlab
gitlab-ctl stop
rpm -e gitlab-ce
ps aux | grep gitlab
#殺掉第一個進程(就是帶有好多.............的進程)
kill -9 18777
find / -name gitlab | xargs rm -rf

GitLab使用

設置gitlab用戶root可以通過ssh公鑰直接下載代碼

將代碼發布到web服務器

可以通過執行命令或腳本的方式迚行代碼發布,我使用 root 用戶在各個 web 服務器上發布代碼。大 家也可以建立一些普通用戶如果 www 或 apache 來發布。如果使用普通用戶發布代碼,要保持所有服務 器上的用戶 id 一致,這樣沒有權限的問題

使用git克隆代碼,復制左側鏈接.

image-20200602170253358

git clone http://192.168.1.63:9999/root/harry.git

GitLab和GitHub的區別:

相同點: 二者都是基於webGit倉庫,在很大程度上 GitLab 是仿照 GitHub 來做的,它們都提供了分享開源項目的平台,為開發團隊提供了存儲、分享、發布和合作開發項目的中心化於存儲的場所。

不同點:
1、GitHub 如果要使用私有倉庫,是需要付費的。GitLab可以在上面創建私人的免費倉庫。
2、GitLab 讓開發團隊對他們的代碼倉庫擁有更多的控制,相比於 GitHub,它有不少的特色:允許 免費設置倉庫權限;允許用戶選擇分享一個 project 的部分代碼;允許用戶設置 project 的獲取權限,進一步的提升安全性;可以設置獲取到團隊整體的改進進度通過 innersourcing讓不在權限范圍內的人訪問不到該資源。

總結:從代碼私有性方面來看,有時公司並不希望員工獲取到全部的代碼,這個時候 GitLab無疑是更好的選擇。但對於開源項目而言,GitHub 依然是代碼托管的首選。

Git使用

git :是一種版本控制系統,是一個命令,是一種工具
gitlib :是用於實現 git 功能的開發庫
github :是一個基於 git 實現的在線代碼托管倉庫,包含一個網站界面,向互聯網開放
gitlab :是一個基於 git 實現的在線代碼倉庫托管軟件,一般用於在企業內部網絡搭 git私服 注: gitlab-ce 社區版 ; gitlab-ee 是企業版,收費。

# 安裝git
yum install -y git

安裝完成后,需要先配置自己的git環境。配置工作只需一次,以后升級時還會 沿用現在的配置。

第一個要配置的是你個人的用戶名稱和電子郵件地址。這兩條配置很重要,每次 Git 提交時都會引用 這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄。

git常用命令

git config --global user.name “name“ #設置全局用戶名
git config --global user.email   mail 	#設置全局郵箱
git config --global   --list 	#列出用戶全局設置
git   add index.html 	#添加文件到暫存區
git commit -m “描述內容“ 	#提交文件到工作區
git status 	#查看工作區的狀態
git push 	#提交代碼到 git 服務器上
git pull 	#獲取代碼到本地
git log 	#查看操作日志
vim   .gitignore 	#定義忽略文件
git reset --hard   HEAD^   #git 版本回滾, HEAD 為當前版本,加一個^為上一個,^^為上上一 個版本
git reflog  # #獲取每次提交的 ID,可以使用--hard 根據提交的 ID 迚行版本回退
git reset --hard 5ae4b06 	#回退到指定 id 的版本
git branch 	#查看當前所處的分支
git checkout --   file 	#從服務器更新某個那文件覆蓋本地的文件

工作區和暫存區及分支概述:

1、工作區就是編輯文件的目錄區域,需要將工作區的修改好的文件 add 到暫存區才能提交到 git 服 務器,在工作區有多個文件的時候可以將一個戒多個文件添加至暫存區,再提交到 git 服務器即可。

2、在服務器創建分支

# 例:把修改過的 index.html 文件更新主版本中
[root@harry63 test]# cd harry-web/
[root@harry63 harry-web]# echo "bbs.harry.cn" >> index.html
[root@harry63 harry-web]#   git add index.html 
[root@harry63 harry-web]# git commit -m "add bbs.harry.cn" 
[root@harry63 harry-web]# git push -u origin 	master   #上傳到 master 主干下 origin [ˈɒrɪdʒɪn] 起源,根
[root@harry63 harry-web]# rm -rf index.html 	#初除一些代碼 [root@harry63 harry-web]# git reset --hard   HEAD   #回滾到最新版本 [root@harry63 harry-web]# ls

查看 git 當前的版本: 
[root@harry63 ~]# git --version 
git version 1.8.3.1

[root@harry63 harry-web]# git reflog 	#獲取每次提交的 ID
9c1e21a HEAD@{0}: commit: aaa cd9d1d5 HEAD@{1}: commit: add bbs
b2866fd HEAD@{2}: clone: from http://192.168.1.63/harry/harry-web.git


# 工作區和暫存區及分支概述
# 1、工作區就是編輯文件的目錄區域,需要將工作區的修改好的文件 add 到暫存區才能提交到 git 服 務器,在工作區有多個文件的時候可以將一個或多個文件添加至暫存區,再提交到 git 服務器即可。
# 2、在服務器創建分支
[root@harry63 harry-web]#   git branch bbs 	#創建一個分支 [root@harry63 harry-web]#   git checkout bbs   #切換到分支 bbs [root@harry63 harry-web]#   git branch 	#查看當前所處的分支
[root@harry63 harry-web]#   vim a.txt 	#隨意在里面寫一些內容
[root@harry63 harry-web]#   git add a.txt
[root@harry63 harry-web]#   git commit -m "add a.txt“   #提交到暫存區中
[root@harry63 harry-web]#   git push -u origin   bbs   #上傳到分支 bbs 分支上

Jenkins

Jenkins 概述:是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。

官網地址:https://jenkins.io/

rpm包下載地址:http://pkg.jenkins.io/redhat-stable/

中文幫助:https://jenkins.io/zh/doc/book/installing/

插件下載地址:http://mirror.xmission.com/jenkins/updates/update-center.json

部署Jenkins:推薦方式2

方式1:

# 安裝jenkins
rpm -ivh jenkins-2.93-1.1.noarch.rpm

# 修改配置文件,配置端口、用戶及jdk(jdk如果沒有則需要安裝)
vim  /etc/sysconfig/jenkins
JENKINS_PORT=" 198 "
JENKINS_USER="root"
JENKINS_JAVA_CMD="/opt/cosmo/com/public/jdk_lin/1.8.0_171"

# 修改配置文件
vim  /etc/sysconfig/jenkins
JENKINS_USER="root"

# 啟動
/etc/init.d/jenkins start

# 開機自啟動
chkconfig jenkins on

# 查看管理員登錄密碼
cat /var/lib/jenkins/secrets/initialAdminPassword

方式2:

# 下載jenkins的war包
https://www.jenkins.io/download/

# 上傳war包至服務器,並啟動
java -jar jenkins.war --httpPort=8888

# 后台啟動
nohup java -jar jenkins.war --httpPort=8888 > /dev/null 2>&1 &

# 瀏覽器訪問驗證
http://192.168.1.63:8888

# 查看管理員登錄密碼
cat /var/lib/jenkins/secrets/initialAdminPassword

Jenkins插件下載:http://updates.jenkins-ci.org/download/plugins/

安裝插件方式選擇:
方法一(推薦):如果服務器可以上網,那邊選擇在線安裝最好不過了,安裝流程為: 系統管理(ConfigureSystem)----插件管理(Manage Jenkins)---選擇需要的插件直接安裝即可

方法二:如果服務器不能上網,那么就只能離線安裝,首先去http://updates.jenkins-ci.org/download/plugins/ 下載需要的 plugin,選擇匹配的版本號,下載到本 地,然后打開:系統管理()---插件管理—高級---找到”上傳插件”(瀏覽,找到擴展名為.hpi 的插件,上傳之 后默認直接就安裝了。重啟 jenkins,安裝的插件就可以使用了。

image-20200602171256663

Jenkins漢化

安裝這兩個漢化插件

image-20200602172506968

重啟jenkins

配置Jenkins使用gitlib更新代碼

  1. 導出GitLab項目
  2. 安裝插件(Jenkins需要插件來支撐)
Credentials Plugin(默認已經安裝)    #簽名證書管理插件
Gitlab Plugin   #安裝后從 gitlab 獲取代碼
Git Plugin   和 Git Client Plugin 	#用於 jenkins 在 gitlab 中拉取源碼
GitLab Hook #gitlab 觸發 jenkins 構建項目 #hook   [hʊk] 	鈎子 ; plugin   ['plʌgɪn] 插件
gitlab Authentication 	# gitlab 和 jenkins 認證相關的插件
SSH Plugin 	#進程執行 shell 腳本
Publish Over SSH   #用於通過 ssh 部署應用

實現 gitlib 觸發 Jenkins 自動部署

在公司的測試環境當中,當開發人員向 gitlab 倉庫提交代碼后,gitlab 自動通知 jenkins 進行構建項目、代碼質量測試然后部署至測試環境,這里先暫時部署到測試環境。對於生產環境,后期使用手動部署代碼。

安裝 Gitlab Hook Plugin 插件:
系統管理-管理插件-可選插件,安裝這兩個插件:Gitlab Hook PluginBuild Authorization Token RootBuild Token Trigger

增加 Build Pipeline 插件以流程圖的形式展示各個 Job 的順序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM