使用GitLab+Jenkins實現(xiàn)持續(xù)集成CI環(huán)境的示例代碼
一、持續(xù)集成簡介
持續(xù)集成:Continuous Integration
簡單來說就是指,程序員在開發(fā)代碼的過程中,可以頻繁的將代碼部署到主干上,并進行自動化測試。
持續(xù)交付:Continuous Delivery
簡單來說就是指在持續(xù)集成的基礎上,將代碼部署到預生產環(huán)境。
持續(xù)部署:Continuous Deoloyment
簡單來說就是指在持續(xù)交付的基礎上,將要部署的代碼實現(xiàn)自動部署,包括持續(xù)交互,持續(xù)部署。
1.GitLab 簡介
GitLab 是一個用于倉庫管理系統(tǒng)的開源項目。使用 Git 作為代碼管理工具,可以通過 Web 界面來管理 Git 倉庫。
2.Jenkins 簡介
Jenkins 是一個獨立的開源軟件項目,是基于 Java 開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續(xù)集成變成可能。
作用:
- 保證團隊開發(fā)人員提交代碼的質量,還能夠減輕軟件發(fā)布時的壓力;
- 持續(xù)集成中的任何一個環(huán)節(jié)都是自動完成的,無需太多人工干預,有利于減少重復過程以節(jié)省時間、費用和工作量。
Jenkins 特點:
- 開源免費;
- 跨平臺,支持所有的平臺。
- Master/Slave 支持分布式的
build
(構建)
3.GitLab 和 GitHub 的區(qū)別
相同點:
二者都是基于 Web 的 Git 倉庫,在很大程度上 GitLab 是仿照 GitHub 來做的,它們都提供了分享開源項目的平臺。
不同點:
- GitHub 如果要使用私有倉庫,超過 4 個是需要付費的。GitLab 可以在上面創(chuàng)建私人的免費倉庫。
- GitLab 讓開發(fā)團隊對他們的代碼倉庫擁有更多的控制。
4.持續(xù)集成系統(tǒng)的工作流程
- 開發(fā)者將新版本代碼
push
到 GitLab 遠程倉庫上; - 隨后 GitLab 會觸發(fā) Jenkins 來進行拉取到本地(通過 Web Hook 或定時檢測)
- 最后 Jenkins 會根據(jù)事先配置好的腳本進行 Build。
二、使用 GitLab + Jenkins 實現(xiàn)持續(xù)集成(CI)環(huán)境
準備工作
主機名 | 操作系統(tǒng) | 硬件 | IP 地址 |
---|---|---|---|
GitLab | CentOS 7.4 | 4 G(聯(lián)網(wǎng)狀態(tài)) | 192.168.1.1 |
Jenkins | CentOS 7.4 | 4 G(聯(lián)網(wǎng)狀態(tài)) | 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
登錄控制臺發(fā)送測試郵件
[root@GitLab ~]# gitlab-rails console irb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now
查看
修改 GitLab 中 root 用戶的密碼
3)創(chuàng)建群組
點擊創(chuàng)建群組
填寫群組信息
創(chuàng)建一個賬號
填寫用戶信息
給河北彭于晏配置密碼
把新建用戶添加到群組
GitLab 用戶在組中有五種權限:
Guest
:可以創(chuàng)建問題、發(fā)表評論、不能讀寫版本庫(訪客)Reporter
:可以克隆代碼,不能提交(測試人員)Deveoper
:可以克隆代碼、開發(fā)、提交、上傳(開發(fā)人員)Master
:可以創(chuàng)建項目、添加tag
、保護分支、添加項目成員、編輯項目(運維)Owner
:所有事情都可以做,包括設置項目的訪問權限(老板,但老板一般都在辦公室)
4)創(chuàng)建項目
使用河北彭于晏用戶登錄創(chuàng)建
創(chuàng)建項目
在剛才創(chuàng)建的項目中創(chuàng)建文件
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
創(chuàng)建軟連接優(yōu)化執(zhí)行路徑
[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
點擊繼續(xù)后,會出現(xiàn)推薦安裝和自定義安裝,我這里選擇的是推薦安裝
2)配置 Jenkins 實現(xiàn) GitLab 更新代碼
安裝 Jenkins 插件
Credentials # 簽名證書管理插件 Gitlab # 安裝后從 GitLab 獲取代碼 Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取源碼 GitLab Hook # GitLab 觸發(fā) Jenkins 構建項目 Gitlab Authentication # GitLab 和 Jenkins 認證插件 SSH Plugin # 進程執(zhí)行 Shell 腳本 Publish Over SSH # 用于通過 SSH 部署應用
注意:當安裝好 Jenkins 插件后,插件可能會跟 Jenkins 出現(xiàn)版本差異,不用管,后面我會對 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 上創(chuàng)建項目
下載一下代碼
4)將代碼發(fā)布到 Web 服務器
這邊簡單說一下大致的流程:
- 通過我們這一系列的操作也可以看出來,首先需要在 GitLab 上創(chuàng)建(上傳)項目,然后 Jenkins 會將代碼下載到本地;
- 最后可以使用 Jenkins 將代碼發(fā)送給指定服務器。
在 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
創(chuàng)建自動上傳 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 中
發(fā)布項目
5)驗證
3.實現(xiàn) Jenkins 自動部署
1)安裝插件
Gitlab Hook Plugin
Build Authorization Token Root
Build Token Trigger
2)配置身份驗證令牌
[root@Jenkins ~]# openssl rand -hex 12 038ef13e10ef686193784383
注意:-hex
輸出結果為 16 進制數(shù)據(jù),數(shù)字 12 是指定生成的隨機字符為 12 字節(jié),即 24 個 16 進制個數(shù)。
3)在 Jenkins 上配置觸發(fā)器
4)在 GitLab 的項目上配置鏈接和 Token
這里的網(wǎng)址和密鑰令牌都要和 Jenkins 上的匹配。
- 注意:當創(chuàng)建鉤子時出現(xiàn)
Urlis blocked: Requests to the local network are not allowed
- 原因是因為 GitLab 10.6 版本以后為了安全,不允許向本地網(wǎng)絡發(fā)送 WebHook 請求。
開啟請求
當開啟請求后,重新創(chuàng)建 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
查看
到此這篇關于使用GitLab+Jenkins實現(xiàn)持續(xù)集成CI環(huán)境的示例代碼的文章就介紹到這了,更多相關GitLab Jenkins持續(xù)集成CI環(huán)境內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關系
這篇文章主要為大家介紹了Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關系,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04鴻蒙開發(fā)搭建flutter適配的開發(fā)環(huán)境
文章詳細介紹了在Windows系統(tǒng)上如何創(chuàng)建和運行鴻蒙Flutter項目,包括使用flutter?doctor檢測環(huán)境、創(chuàng)建項目、編譯HAP包以及在真機上運行項目,打包鴻蒙Flutter應用的測試包和正式包的方法,并介紹了常見問題的解決方法2024-12-12vscode中使用Autoprefixer3.0無效的解決方法
這篇文章主要介紹了vscode中使用Autoprefixer3.0無效的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06