JenKins+Gitlab+Httpd實現CI/CD持續集成/持續交付(使用docker容器完成部署)

目錄

1.環境準備

2.整體思路

3.部署Gitlab服務器

4.部署Jenkins

5.部署Httpd服務器


 

1.環境準備

前言:

       1)一臺Linux系統,我在這次案例中使用Centos7.5,讀者可根據自己的系統調整命令。

       2)本實驗步驟非常多,第一次部署大概需要1-2個小時,請按照我描述的操作進行實驗,不要玩騷操作。

3)本實驗全程使用docker容器實驗,將會涉及大量的端口更改,所以需要保證宿主機(真機)環境乾淨,最好關閉一切不必要服務(如http,nginx等)。

要求:

1)Linux系統

2)聯網

3)配置好yum源

4)安裝好docker容器

 

2.整體思路

這裏一共5個部分,我們從程序員說起。

1)程序員寫好代碼,發佈到gitlab,每一次提交項目算一個版本

2)gitlab服務器存儲程序員寫好的項目,並且實現對版本的控制

3)Jenkins拉取gitlab的項目到本地,拉取到本地後將項目構建到應用服務器,Jenkins服務器是整個持續交付的核心,當運維人員做好了部署後,他將自動化的向gitlab拉取項目並構建到應用服務器上,對於使用者來說,只需要點一點鼠標就可以完成版本的上線或更新。

4)應用服務器是對外提供的下載網址

5)客戶端在應用服務器上下載最新版本的項目

 

3.部署Gitlab服務器

1)使用docker安裝Gitlab

使用docker搜索gitlab獲取鏡像,這裏推薦使用docker.io/gitlab/gitlab-ce

如果喜歡使用漢字的可以安裝docker.io/twang2218/gitlab-ce-zh

docker search gitlab

docker pull docker.io/gitlab/gitlab-ce

 

2)修改真機端口

爲了防止真機端口衝突,我們需要將真機上的ssh端口,httpd端口,https端口做修改

修改ssh端口:

重啓sshd服務後建議重連,如果使用xshell一定要記得加上端口,ssh root@ip:端口

vim /etc/ssh/sshd_config

Port 2022       #找到配置文件中的Port一行修改成2022

systemctl start sshd

刪除httpd服務:

 yum remove httpd

 

3)創建宿主機目錄

mkdir -p  /srv/gitlab/config  /srv/gitlab/logs /srv/gitlab/data

 

4) 運行Gitlab容器

docker run

-d \ ①

--name gitlab  \  ②

-p 8443:443 -p 8099:80 -p 2202:22  \ ③

-v /srv/gitlab/config:/etc/gitlab   \  ④

-v /srv/gitlab/logs:/var/log/gitlab \

-v /srv/gitlab/data:/var/opt/gilab \

docker.io/gitlab/gitlab-ce   ⑤

(可選)gitlab/gitlab-ce 在後臺運行容器(即“分離”模式)並輸出容器ID。如果您不指定此選項, 則在終端窗口中輸出正在運行的此容器的Docker日誌。
映射(例如“發佈”)gitlab/gitlab-ce 容器的端口80到主機上的端口8099。 第一個數字代表主機上的端口,而最後一個代表容器的端口。因此,如果您爲此選項指定 -p 49000:8080 ,您將通過端口49000訪問主機上的gitlab。
(可選,但強烈建議)映射在容器中的`/etc/gitlab` 目錄到具有名字 gitlab 的volume。 如果這個卷不存在,那麼這個 docker run 命令會自動爲你創建卷。 如果您希望每次重新啓動gitlab(通過此 docker run ... 命令)時保持gitlab狀態,則此選項是必需的 。 如果你沒有指定這個選項,那麼在每次重新啓動後,Jenkins將有效地重置爲新的實例。
這裏將所有的容器文件關聯到宿主機的路徑下,保證容器關閉不造成數據丟失。
你下載的gitlab鏡像名

注意: 

1)如果複製並粘貼上面的命令片段不起作用,請嘗試在此處複製並粘貼此無註釋版本 

2)本地端口80、22、443可能被佔用,請使用ss -autnpl 命令查看當前端口,並做相應調整,以防止端口衝突

3)/etc/gitlab,/var/log/gitlab ,/var/opt/gilab是容器路徑,在宿主機上創建文件並進行關聯映射

4)  docker.io/gitlab/gitlab-ce以自己的鏡像名爲基準

docker run -d   --name gitlab   -p 443:443 -p 80:80 -p 22:22   \

-v /srv/gitlab/config:/etc/gitlab    \

-v /srv/gitlab/logs:/var/log/gitlab  \

-v /srv/gitlab/data:/var/opt/gilab  \

docker.io/gitlab/gitlab-ce   

 

5)訪問Gitlab

在瀏覽器上輸入: http://本機ip

第一次修改密碼

使用root登錄 

 

6)創建羣組

組名隨意,項目選public公開發布 

 

7)創建用戶

填這三項即可

創建完後修改密碼

 

8)創建項目

 

組名選剛纔創建的,項目公開

 創建之後把剛纔創建的用戶添加進來,並設置Maintainer權限(中文意思爲管理者)

 

 

 9)使用創建用戶登錄

之前修改過密碼了,但是第一次登錄仍然會要求你再次修改密碼,修改密碼後登入進去,可以看到自己的如下界面,點擊進入自己的項目。

10)配置SSH免密登錄

創建祕鑰,-C後填你剛纔創建用戶填的郵箱

ssh-keygen -o -t rsa -b 4096 -C "[email protected]"

cat /root/.ssh/id_rsa.pub

將剛纔複製的公鑰填進去 

 

11)Linux系統上傳文件

現在我們需要創建一個項目,接下來的操作在Linux系統上進行

步驟依次爲:

①創建文件夾

②git倉庫初始化

③創建文件並提交到倉庫

④配置遠程倉庫地址

⑤上傳文件以及版本

$ mkdir myapp

$ cd myapp

$ git init

$ echo 'first test : hello!'  >  index.html

$ git add .

$ git commit -m 'new'

$ git remote add origin [email protected]:devops/myapp.git
$ git push -u origin --all

$ git tag v1.0

$ git push --tags

 

做到這裏我們GitLab部署就Ok了,接下來是Jenkins的部署

 

 

4.部署Jenkins

更加詳細的Jenkins安裝請看這篇文章【https://blog.csdn.net/ck784101777/article/details/104032392

1)搜索jenkins

有很多Jenkins版本,推薦下載docker.io/jenkinsci/blueocean

docker seach jenkins

 

2)安裝Jenkins

 docker pull docker.io/jenkinsci/blueocean

 

3)創建容器

映射端口寫8088,映射目錄寫/var/jenkins_home(這個是Jenkins的工作目錄),/svr/html(這個目錄的作用下面會講,這裏先這麼寫)

docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/jenkins_home:/var/jenkins_home \
  -v /srv/html:/srv/html
  jenkinsci/blueocean

 

4) 訪問Jenkins

遊覽器上輸入 http://本機ip:8088,返回成功後我們需要安裝一個插件

我已經安裝了,你們要點可選插件,然後篩選,直接安裝 

 

5)Jenkins新建項目

點擊新建

選擇構建一個自由風格的項目,由於我已經創建了一個叫myapp的項目,但是你要填myapp,如果你是按照我上面的實驗來做的話。

勾選參數化構建過程,以Git構建你的Jenkins軟件項目,參數類型(Parameter Type)選擇分支與標籤,這裏是什麼意思呢,就是說你的項目是以你的標籤命名的(git tag)

下面來配置git的來源,填寫你的git項目http地址,分支填你上面構建的參數名,點擊新增(add)添加一個子目錄(check out to a sub-direcotry),填寫項目名+分支參數(myapp-$myapp),完了之後點擊保存。

 

6)構建項目

回到首頁後構建你的項目

 

 點擊構建項目(Build with Parameters),選擇一個分支,這裏我做了三次修改,所以有三個分支,如果你安裝我上面的步驟一步步到這裏可能只有一個版本,你可以回去多去提交幾次版本。點擊開始構建。

構建完成後 ,可以看得#1 變成灰藍色,點進去可以查看構建過程

 

7)查看項目

回到Linux系統,進入到/var/jenkins_home/workspace目錄下(取決於你映射的目錄),可以看到項目。

你構建幾次就有幾個,命名取決你之前在Jenkins中指定的git參數,如果按照我的步驟來的話應該是如下命名

 

5.部署Httpd服務器

1)下載httpd鏡像

建議安裝docker.io/httpd

docker search httpd

docker pull docker.io/httpd

2)啓動容器

之前在配置gitlab的時候已經使用了80端口,所以這裏要使用其他的端口;

/srv/html/目錄我在配置Jenkins的時候提過,目的就是在這裏使他們訪問的是同一個目錄,大概的思路是這樣,Jenkins需要完成自動將項目打包到httpd服務器的目錄下,但是他們都是基於容器的,爲了讓Jenkins能訪問到這個目錄(還需要改變目錄的所有者),我們需要把在宿主機上做一個公共目錄,並且爲兩個容器做映射。

mkdir -p /srv/html/deploy

chown -R jenkins.jenkins /srv/html/deploy

docker run -d -p 8077:80 -v /srv/html/:/var/www/html docker.io/httpd 

3)Jenkins配置參數修改

這裏需要寫一個腳本,實現Jenkins構建後自動將項目打包到httpd服務器上,需要做到將項目文件打包並記錄當前版本,下面的內容會比較複雜並且難以理解,讀者可以先自己做一遍實驗看看效果,在體會每一步的含義。

在執行這個腳本之前,默認將在Jenkins的目錄下,也就是/var/jenkins_home/workspace

實現思路如下:

①定義一個路徑變量,爲web服務器的發佈目錄

②將Jenkins目錄下的目錄拷貝到web服務器目錄下

③進入到web目錄

④刪除.git隱藏文件,因爲是將git項目拷貝過來,所以會有.git目錄

⑤將項目打包成壓縮文件

⑥刪除項目,只保留壓縮文件

⑦生成校驗值,寫到一個文件,校驗值用於檢驗這個版本是否有損壞(將與完整的校驗值比對,若不匹配即爲損壞文件)

⑧回退到上一個目錄,寫下當前的版本文件

 

shell腳本如下 

deploy_dir=/srv/html/deploy/pkgs
cp -r myapp-$myapp $deploy_dir 
cd $deploy_dir 
rm -rf $deploy_dir/.git
tar czf myapp-$myapp.tar.gz myapp-$myapp
rm -fr myapp-$myapp
md5sum myapp-$myapp.tar.gz | awk '{print $1}' > myapp-$myapp.tar.gz.md5
cd ..
[ -f live_ver ] && cat live_ver > last_ver
echo $myapp > live_ver

 

4)Jenkins發佈測試 

進入Jenkins的項目路徑下,刪除之前構建過的項目,重新測試構建一次。

 

構建之後進入web服務器的目錄(/srv/html/deploy/pkgs)

cd /srv/html/deploy/pkgs

進入到這個文件夾下後,可以看到我們發佈並打包的項目和校驗碼,到這一步如果你沒有出錯就證明你在Jenkins中的配置沒有錯誤,如果沒有看到文件或者沒有按照你的格式輸出文件,你就需要去檢查一下你的Jenkins配置文件的Shell腳本是否寫錯。 

查看當前版本

 

遊覽器上輸入 http://本機ip:8077/deploy/

 

 

 

發佈了214 篇原創文章 · 獲贊 88 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章