構建GitLab 與 Jenkins 持續整合環境
什麼是持續整合?
持續整合 Continuous Integration
簡單來說就是在開發過程當中,可以頻繁地將程式碼部署到主幹上。
持續交付 Continuous Delivery
指的是在持續整合的環境基礎上,將程式碼部署到預發環境。
持續部署 Continuous Deoloyment
在持續交付的基礎上,將程式碼部署到生產環境的自動化。
gitlab簡介
GitLab和GitHub一樣屬於第三方基於Git開發的作品,免費且開源,可通過 Web介面來進行管理git倉庫。
jenkins簡介
Jenkins是一個開源的、且基於JAVA程式碼開發的持續整合系統
提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。
搭建gitlab
[root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python #安裝所需元件
[root@gitlab ~]# systemctl start postfix #開啟postfix郵件服務
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm #安裝gitlab
[root@gitlab ~]# rpm -ivh gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #配置訪問路徑,第十三行紅色部分配置成本機ip地址,也可以改為自定義的域名
[root@gitlab ~]# gitlab-ctl reconfigure #重置gitlab
http://192.168.100.102 #訪問gitlab
使用gitlab
gitlab-ctl stop #關閉gitlab
gitlab-ctl start #啟動gitlab
gitlab-ctl restart #重啟gitlab
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #主配置檔案
/var/log/gitlab #日誌地址
gitlab-ctl reconfigure #慎用!!!
gitlab設定中文頁面如下↓
配置郵件報警
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com" #SMTP伺服器
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]" #郵箱賬號
gitlab_rails['smtp_password'] = "deuyzxdrnlvdecdf" #這個授權碼要去qq郵箱裡面才可以得到
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '[email protected]' #郵箱賬號
[root@gitlab ~]# gitlab-ctl reconfigure #過載gitlab
[root@gitlab ~]# gitlab-rails console #登入控制檯傳送測試郵件
irb(main):001:0> Notify.test_email('[email protected]', 'test', 'biubiubiu').deliver_now
#標題內容
#進郵箱可以看到剛剛編輯的郵件已經送到。
修改郵箱預設為[email protected],修改成我們自己的建立組時會發送郵件警告
建立一個群組
##來郵件了
##新增新成員
將使用者test1新增到剛剛建立的test組裡
Gitlab使用者在組中有五種許可權:
Guest、Reporter、Developer、Master、Owner
Guest:可以建立issue、發表評論,不能讀寫版本庫
Reporter:可以克隆程式碼,不能提交,QA(測試人員)、PM(主管或者產品經理)可以賦予這個許可權
Developer:可以克隆程式碼、開發、提交、push,RD(研發人員)可以賦予這個許可權
Master:可以建立專案、新增tag、保護分支、新增專案成員、編輯專案,核心RD負責人可以賦予這個許可權
Owner:可以設定專案訪問許可權 - Visibility Level、刪除專案、遷移專案、管理組成員,開發組leader可以賦予這個許可權
##去網易郵箱設定密碼
##使用新賬號登入gitlab
可以看到我們設定的測試組。
##建立專案
##在專案中新建一個
[root@gitlab ~]# ssh-keygen -t rsa ##配置金鑰,一直回車即可
[root@gitlab ~]# cat .ssh/id_rsa.pub ##檢視公鑰
將公鑰上傳到gitlab上
[root@gitlab ~]# yum -y install git ##安裝git
[root@gitlab ~]# git clone [email protected]:test1/prod1.git 測試免密,從下圖可以看到從gitlab克隆到本地不需要密碼。
搭建jenkins
##因為jenkins是java寫的,所以我們需要先安裝jdk。
[root@jenkins ~]# tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/ ##解壓jdk
[root@jenkins ~]# mv /usr/local/jdk1.8.0_171/ /usr/local/java/
[root@jenkins ~]# vim /etc/profile
##配置jdk環境變數
[root@jenkins ~]# source /etc/profile ##使環境變數生效
##檢視java版本
[root@jenkins ~]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm ##安裝jenkins
[root@jenkins ~]# rpm -ivh jenkins-2.222.4-1.1.noarch.rpm
[root@jenkins ~]# vim /etc/sysconfig/jenkins
建立軟鏈並啟動jenkins
##jenkins預設使用8080埠
訪問jenkins並安裝相關外掛
http://192.168.100.108:8080
安裝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公鑰上傳到gitlab上
[root@jenkins ~]# ssh-keygen -t rsa
[root@jenkins ~]# cat .ssh/id_rsa #將私鑰上傳到jenkins上
##在jenkins上新建一個專案
##儲存配置,下載一下程式碼
##藍色代表成功,紅色則失敗
部署apache伺服器
[root@httpd ~]# yum -y install httpd
[root@httpd ~]# systemctl start httpd
[root@jenkins ~]# ssh-copy-id [email protected] ##jenkins配置與httpd免密
建立指令碼
呼叫指令碼
##驗證
在jenkins伺服器上生成 Token,openssl rand 生成隨機密碼
注:-hex:輸出結果為16進位制資料; 數字12是指定生成的隨機字元為12位元組,即24個 16 進位制個數。
##在jenkins上構建觸發器
當我們配置好觸發器後,只要我們在gitlab上修改程式碼,gitlab自動通知Jenkins構建任務並把它部署到對應的伺服器上。