使用 GitLab + Jenkins 實作持續集成(CI)環境
- 一、持續集成簡介
- 1.GitLab 簡介
- 2.Jenkins 簡介
- 3.GitLab 和 GitHub 的區別
- 4.持續集成系統的作業流程
- 二、使用 GitLab + Jenkins 實作持續集成(CI)環境
- 1.安裝 Gitlab
- 1)登錄 Gitlab
- 2)配置郵件報警
- 3)創建群組
- 4)創建專案
- 5)配置免密克隆
- 2.安裝 Jenkins
- 1)登錄 Jenkins,并安裝相關插件
- 2)配置 Jenkins 實作 GitLab 更新代碼
- 3)在 Jenkins 上創建專案
- 4)將代碼發布到 Web 服務器
- 5)驗證
- 3.實作 Jenkins 自動部署
- 1)安裝插件
- 2)配置身份驗證令牌
- 3)在 Jenkins 上配置觸發器
- 4)在 GitLab 專案配置界面設定鏈接和 Token
- 5)驗證
- 4.Jenkins 版本升級
一、持續集成簡介
持續集成:Continuous Integration
- 簡單來說就是指,程式員在開發代碼的程序中,可以頻繁的將代碼部署到主干上,并進行自動化測驗,
持續交付:Continuous Delivery
- 簡單來說就是指在持續集成的基礎上,將代碼部署到預生產環境,
持續部署:Continuous Deoloyment
- 簡單來說就是指在持續交付的基礎上,將要部署的代碼實作自動部署,包括持續互動,持續部署,
1.GitLab 簡介
GitLab 是一個用于倉庫管理系統的開源專案,使用 Git 作為代碼管理工具,可以通過 Web 界面來管理 Git 倉庫,
2.Jenkins 簡介
Jenkins 是一個獨立的開源軟體專案,是基于 Java 開發的一種持續集成工具,用于監控持續重復的作業,旨在提供一個開放易用的軟體平臺,使軟體的持續集成變成可能,
作用:
- 保證團隊開發人員提交代碼的質量,還能夠減輕軟體發布時的壓力;
- 持續集成中的任何一個環節都是自動完成的,無需太多人工干預,有利于減少重復程序以節省時間、費用和作業量,
Jenkins 特點:
- 開源免費;
- 跨平臺,支持所有的平臺,
- Master/Slave 支持分布式的
build(構建)
3.GitLab 和 GitHub 的區別
相同點:
- 二者都是基于 Web 的 Git 倉庫,在很大程度上 GitLab 是仿照 GitHub 來做的,它們都提供了分享開源專案的平臺,
不同點:
- GitHub 如果要使用私有倉庫,超過 4 個是需要付費的,GitLab 可以在上面創建私人的免費倉庫,
- GitLab 讓開發團隊對他們的代碼倉庫擁有更多的控制,
4.持續集成系統的作業流程
- 開發者將新版本代碼
push到 GitLab 遠程倉庫上; - 隨后 GitLab 會觸發 Jenkins 來進行拉取到本地(通過 Web Hook 或定時檢測)
- 最后 Jenkins 會根據事先配置好的腳本進行 Build,
二、使用 GitLab + Jenkins 實作持續集成(CI)環境
準備作業
| 主機名 | 作業系統 | 硬體 | IP 地址 |
|---|---|---|---|
| GitLab | CentOS 7.4 | 4 G(聯網狀態) | 192.168.1.1 |
| Jenkins | CentOS 7.4 | 4 G(聯網狀態) | 192.168.1.2 |
| Apache | CentOS 7.4 | 2 G | 192.168.1.3 |
1.安裝 Gitlab
安裝 Gitlab 所需組件
[root@GitLab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python
開啟 Postfix 郵件服務
[root@GitLab ~]# systemctl start postfix
[root@GitLab ~]# systemctl enable postfix
安裝 Gitlab
[root@GitLab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@GitLab ~]# ls
anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@GitLab ~]# yum -y localinstall gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
配置 Gitlab 訪問地址
[root@GitLab ~]# sed -i "/^external_url/cexternal_url 'http://192.168.1.1'" /etc/gitlab/gitlab.rb
- 注意:你們也可以將 IP 地址替換為域名,
重置 Gitlab(時間較長)
[root@GitLab ~]# gitlab-ctl reconfigure
[root@GitLab ~]# netstat -anpt | grep nginx

1)登錄 Gitlab
訪問:http://192.168.1.1



- 注意:在 GitLab 中配置的中文并不是全部都是中文,你們可以安裝中文插件,我這邊使用的是谷歌瀏覽器轉換,
2)配置郵件報警
[root@GitLab ~]# vim /etc/gitlab/gitlab.rb # 在第 57 行后添加以下內容
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.qq.com' # SMTP 服務器
gitlab_rails['smtp_port'] = 465 # SMTP 服務器埠號
gitlab_rails['smtp_user_name'] = '2085077346@qq.com' # 郵件賬號
gitlab_rails['smtp_password'] = '' # 郵件授權碼
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '2085077346@qq.com'
重置 Gitlab
[root@GitLab ~]# gitlab-ctl reconfigure
登錄控制臺發送測驗郵件
[root@GitLab ~]# gitlab-rails console
irb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now

查看

修改 GitLab 中 root 用戶的密碼

3)創建群組
點擊創建群組

填寫群組資訊

創建一個賬號

填寫用戶資訊

給河北彭于晏配置密碼

把新建用戶添加到群組

GitLab 用戶在組中有五種權限:
Guest:可以創建問題、發表評論、不能讀寫版本庫(訪客)Reporter:可以克隆代碼,不能提交(測驗人員)Deveoper:可以克隆代碼、開發、提交、上傳(開發人員)Master:可以創建專案、添加tag、保護分支、添加專案成員、編輯專案(運維)Owner:所有事情都可以做,包括設定專案的訪問權限(老板,但老板一般都在辦公室)
4)創建專案
使用河北彭于晏用戶登錄創建

創建專案

在剛才創建的專案中創建檔案


5)配置免密克隆
[root@GitLab ~]# ssh-keygen -t rsa # 配置密鑰對 (三連回車即可)
[root@GitLab ~]# cat .ssh/id_rsa.pub # 查看公鑰
將公鑰上傳到 GitLab 中

驗證(克隆程序中不需要輸入密碼即可)
[root@GitLab ~]# git clone git@192.168.1.1:ZhangSan/test.git
[root@GitLab ~]# ls
anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm test
[root@GitLab ~]# cd test/
[root@GitLab test]# ls
1.html
2.安裝 Jenkins
安裝 JDK(因為 Jenkins 是使用 Java 撰寫的,所以需要先安裝 JDK)
[root@Jenkins ~]# tar xf jdk-8u181-linux-x64.tar.gz
[root@Jenkins ~]# ls
anaconda-ks.cfg jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
[root@Jenkins ~]# mv jdk1.8.0_181/ /usr/local/java
[root@Jenkins ~]# cat <<END >> /etc/profile
JAVA_HOME=/usr/local/java/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
END
[root@Jenkins ~]# source /etc/profile
[root@Jenkins ~]# java -version # 查看 Java 版本
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
安裝 Jenkins
[root@Jenkins ~]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm
[root@Jenkins ~]# ls
anaconda-ks.cfg jenkins-2.222.4-1.1.noarch.rpm
[root@Jenkins ~]# yum -y localinstall jenkins-2.222.4-1.1.noarch.rpm
修改組態檔
[root@Jenkins ~]# sed -i '/^JENKINS_USER/cJENKINS_USER="root"' /etc/sysconfig/jenkins
創建軟連接優化執行路徑
[root@Jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/
啟動 Jenkins
[root@Jenkins ~]# systemctl start jenkins
[root@Jenkins ~]# netstat -anpt | grep 8080

1)登錄 Jenkins,并安裝相關插件
訪問:http://192.168.1.2:8080

點擊繼續后,會出現推薦安裝和自定義安裝,我這里選擇的是推薦安裝

2)配置 Jenkins 實作 GitLab 更新代碼
安裝 Jenkins 插件
Credentials # 簽名證書管理插件
Gitlab # 安裝后從 GitLab 獲取代碼
Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取原始碼
GitLab Hook # GitLab 觸發 Jenkins 構建專案
Gitlab Authentication # GitLab 和 Jenkins 認證插件
SSH Plugin # 行程執行 Shell 腳本
Publish Over SSH # 用于通過 SSH 部署應用

- 注意:當安裝好 Jenkins 插件后,插件可能會跟 Jenkins 出現版本差異,不用管,后面我會對 Jenkins 進行升級操作,
配置 Jenkins 免密拉取 GitLab 代碼
[root@Jenkins ~]# ssh-keygen -t rsa
[root@Jenkins ~]# cat .ssh/id_rsa.pub
將公鑰上傳到 GitLab 上

將私鑰上傳到 Jenkins 上


- Jenkins 的
root用戶公鑰在 GitLab 上,私鑰在 Jenkins 上,目的就是為了方便 Jenkins 可以直接拉去 GitLab 上的代碼,
3)在 Jenkins 上創建專案




下載一下代碼

4)將代碼發布到 Web 服務器
這邊簡單說一下大致的流程:
- 通過我們這一系列的操作也可以看出來,首先需要在 GitLab 上創建(上傳)專案,然后 Jenkins 會將代碼下載到本地;
- 最后可以使用 Jenkins 將代碼發送給指定服務器,
在 192.168.1.3 服務器上操作
[root@Apache ~]# yum -y install httpd
[root@Apache ~]# systemctl start httpd
在 Jenkins 上配置 SSH 免密登錄
[root@Jenkins ~]# ssh-copy-id root@192.168.1.3
創建自動上傳 Web 代碼的腳本
[root@Jenkins ~]# cat <<END > 1.sh
#!/bin/bash
scp /var/lib/jenkins/workspace/web/* root@192.168.1.3:/var/www/html/
END
[root@Jenkins ~]# chmod +x 1.sh
將腳本添加到 Jenkins 中

發布專案

5)驗證

3.實作 Jenkins 自動部署
1)安裝插件
Gitlab Hook Plugin
Build Authorization Token Root
Build Token Trigger
2)配置身份驗證令牌
[root@Jenkins ~]# openssl rand -hex 12
038ef13e10ef686193784383
- 注意:
-hex輸出結果為 16 進制資料,數字 12 是指定生成的隨機字符為 12 位元組,即 24 個 16 進制個數,
3)在 Jenkins 上配置觸發器

4)在 GitLab 專案配置界面設定鏈接和 Token
網址格式:http://jenkins地址/buildByToken/build?job=jenkins專案名&token=token值

- 注意:當創建鉤子時出現
Urlis blocked: Requests to the local network are not allowed - 原因是因為 GitLab 10.6 版本以后為了安全,不允許向本地網路發送 WebHook 請求,
開啟請求

- 當開啟請求后,重新創建 Token 值即可,
5)驗證


4.Jenkins 版本升級

下載后之后,我們只需要將 Jenkins 原有的包替換即可
[root@Jenkins ~]# rpm -ql jenkins # 查看 Jenkins 包安裝路徑
[root@Jenkins ~]# systemctl stop jenkins
[root@Jenkins ~]# cd /usr/lib/jenkins/
[root@Jenkins jenkins]# mv jenkins.war jenkins-2.222.4.war.bak
[root@Jenkins jenkins]# ls
jenkins-2.222.4.war.bak jenkins.war
[root@Jenkins jenkins]# systemctl start jenkins

查看

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292997.html
標籤:其他
