1. 程式人生 > >持續部署之jenkins與gitlab(一)

持續部署之jenkins與gitlab(一)

  持續部署之jenkinsgitlab(一)

主要部分

  • 安裝部署Jenkins和gitlib
  • 瞭解gitlib的常用命令
  • 部署haproxy與tomcat環境
  • 配置Jenkins使用gitlib更新程式碼
  • 通過sonar實現程式碼檢測
  • 實現gitlib觸發Jenkins自動部署
  • 通過Jenkins實現自動部署
  • 實現haproxy動態新增刪除後端伺服器
  • 編寫指令碼實現自動化部署與回滾

持續整合的分類:

  • 持續整合:持續整合是指程式設計師在程式碼的開發工程中,可以頻繁的將程式碼部署到主幹上,並進行自動化測試
  • 持續互動:持續互動是指在持續整合的基礎之上,將程式碼部署到線上測試環境
  • 持續部署:持續部署是指在持續互動的基礎之上,將要部署的程式碼實現自動部署,包括持續互動、持續部署

Gitlab簡介

    gitlab是使用Ruby語言所研發,實現自動託管的git專案倉庫,可以通過web介面訪問進行配置。gitlab擁有與GitHub類似的功能,能夠瀏覽程式碼,管理缺陷和註釋,可以管理團隊對倉庫的訪問,它非常容易使用,並提供一個歷史回顧,便於日後的管理和維護及其查詢。 

    版本控制分類:集中式版本控制、分散式版本控制,常見的集中式版本控制有:CVS,SVN,分散式版本控制有:GitLab、GitHub。git在每個使用者都有自己的私有倉庫及其中央倉庫,使用者先提交程式碼到本地的私有倉庫,而後確定無誤後將程式碼提交到中央倉庫,這樣大大的方便了開發者,而相比CVS和SVN都是集中式的版本控制系統,工作時需要從中央伺服器獲取最新程式碼,改完之後需推送到伺服器。如果是一個比較大的檔案則需要足夠快的網路才能快速提交完成,而使用分散式的版本控制系統,每個使用者都是一個完整的版本庫,即使沒有中央伺服器也可以提交程式碼或者回滾,最終再把改好的程式碼提交至中央伺服器進行合併即可。 

圖示:

Gitlab安裝

安裝前準備:

yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion -y

yum install curl policycoreutils openssh-server openssh-clients postfix -y

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

systemctl  disable firewalld

sed -i ‘/SELINUX/s/enforcing/disabled/‘ /etc/sysconfig/selinux

hostnamectl  set-hostname xxx.com.cn

yum update –y && reboot

1.關閉防火牆

systemctl stop firewalld systemctl disable firewalld  iptables -F  setenforce 0   

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘   /etc/sysconfig/selinux  #需重啟生效  

2.配置好base源和epel源 

可配置好gitlab官網源使用yum進行安裝,也可使用官方下載的rpm進行安裝配置 

vim  /etc/yum.repos.d/gitlab.repo

[gitlab-ce]

name=gitlab-ce

baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 

repo_gpgcheck=0

gpgcheck=0

enabled=1 

gpgkey=https://packages.gitlab.com/gpg.key

3.安裝配置gitlab依賴於Java環境,安裝之前先安裝jdk,可使用rpm包進行安裝等 

yum -y install jdk-8u111-linux-x64.rpm 

yum -y install gitlab-ce-8.13.5-ce.0.el7.rpm  

4.編輯配置檔案/etc/gitlab/gitlab.rb修改配置檔案,測試配置檔案,啟動服務 

external_url ‘http://node1.alren.com‘ #此處為本機IP地址

gitlab_rails[‘smtp_enable‘] = true

gitlab_rails[‘smtp_address‘] = "smtp.163.com"

gitlab_rails[‘smtp_port‘] = 25

gitlab_rails[‘smtp_user_name‘] = "[email protected]"

gitlab_rails[‘smtp_password‘] = "aaaaa"

gitlab_rails[‘smtp_domain‘] = "163.com"

gitlab_rails[‘smtp_authentication‘] = :login

gitlab_rails[‘smtp_enable_starttls_auto‘] = true

gitlab_rails[‘smtp_tls‘] = false

gitlab_rails[‘gitlab_email_from‘] = "[email protected]"

user["git_user_email"] = "[email protected]"

#gitlab-ctl reconfigure #修改配置檔案後需從新編譯此檔案

#gitlab-ctl status #檢視gitlab狀態資訊 預設佔用80、8080埠

#gitlab-ctl stop/restart/start 關閉、重啟、啟動gitlab服務

[[email protected] ~]#

[[email protected] ~]# ss -tnl

State       Recv-Q Send-Q Local Address:Port               Peer Address:Port

LISTEN      0      128       127.0.0.1:8080                          *:*

LISTEN      0      128               *:80                            *:*

LISTEN      0      128               *:22                            *:*

LISTEN      0      128       127.0.0.1:631                           *:*

LISTEN      0      100       127.0.0.1:25                            *:*

LISTEN      0      128               *:8060                          *:*

LISTEN      0      128              :::22                           :::*

LISTEN      0      128             ::1:631                          :::*

LISTEN      0      100             ::1:25                           :::*

[[email protected] ~]# gitlab-ctl status

run: gitlab-workhorse: (pid 115536) 34579s; run: log: (pid 16049) 300897s

run: logrotate: (pid 9121) 2913s; run: log: (pid 16068) 300889s

run: nginx: (pid 115547) 34579s; run: log: (pid 16055) 300895s

run: postgresql: (pid 115553) 34578s; run: log: (pid 15906) 300961s

run: redis: (pid 115561) 34578s; run: log: (pid 15823) 300967s

run: sidekiq: (pid 115565) 34577s; run: log: (pid 16038) 300903s

run: unicorn: (pid 115568) 34577s; run: log: (pid 16007) 300905s

[[email protected] ~]#

1.通過瀏覽器訪問微博介面,接下來操作都是在web介面中進行,輸入本機IP地址加上埠進行訪問

 

2.將此處的註冊按鈕去除,防止其他人員配置登入。需點選最下面的save按鈕生效。

3.在建立專案之前需事先建立使用者和組及其根據需求將使用者加入到組中

 

提示:在gitlab中要事先建立組後才能在組中建立專案或以root身份建立專案,此定義在其自動生成的地址中有明確規定

 

建立專案(project)後將可以對專案進行一定的命令列操作。如下為命令列字元命令

Command line instructions

Git global setup #git全域性設定

git config --global user.name "Administrator"

git config --global user.email "[email protected]"

Create a new repository

git clone [email protected]:mywebs/webs.git #從倉庫中克隆程式碼

cd webs

touch README.md

git add README.md #將修改的程式碼或檔案提交到本地的倉庫中

git commit -m "add README" #將修改的程式碼或檔案提交到本地的倉庫中並取名

git push -u origin master #推送到中央伺服器中

Existing folder or Git repository

cd existing_folder

git init

git remote add origin [email protected]:mywebs/webs.git

git add .

git commit

git push -u origin master

可將多個使用者新增到同一個組,以後組內的成員將對此專案擁有一定的許可權

 

 

建立完成之後它提示我們可以建立一個key對它進行管理,部署key之後則無需密碼可將專案克隆到本地,僅支援ssh模式免祕鑰,同時自動生成一個url,有兩種形式基於HTTP,SSH

我們點選REDME可編輯一個文件,隨意寫一些內容,點選提交 

 

填寫完將會出現路上所訴,可檢視其內容。此時從gitlab中clone時需輸入使用者名稱和密碼,免去祕鑰登入需新增ssh-key,免祕鑰登入。

 

[[email protected] ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

Username for ‘http://node1.alren.com‘: root

Password for ‘http://[email protected]‘:

fatal: Authentication failed for ‘http://node1.alren.com/mywebs/webs.git/‘

[[email protected] ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

Username for ‘http://node1.alren.com‘: root

Password for ‘http://[email protected]‘:

warning: You appear to have cloned an empty repository.

[[email protected] ~]# ls

anaconda-ks.cfg  webapp  webs

[[email protected] ~]# rm -rf webs/

[[email protected] ~]# git clone  [email protected]:mywebs/webs.git

Cloning into ‘webs‘...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

[[email protected] ~]# ls

anaconda-ks.cfg  webapp  webs

[[email protected]ode1 ~]#

Git總結:工作區就是編輯檔案的目錄區域,需要將工作區的修改好的檔案add到暫存區才能提交到git伺服器,在工作區有多個檔案的時候可以將一個或多個檔案新增至暫存區提交到git伺服器即可,剛提交後的暫存區和伺服器的檔案是一致的,因此也可以將最新的暫存區的檔案進行上線和回滾,但是生產當中還是使用伺服器進行程式碼更新和回滾。

Jenkins簡介

Jenkins是一個高度外掛化的管理平臺,這就是Jenkins流行的原因,因為Jenkins什麼外掛都有,有非常靈活的API,開發可以呼叫編寫外掛,可完成不同任務的編排和執行。Jenkins有Java語言所研發,此環境則需部署在Java環境之上,可下載rpm包或下載.war包丟到webapps目錄下,啟動服務,即可訪問。

Jenkins安裝及啟動

通過rpm包進行安裝:

rpm -ivh jdk-8u111-linux-x64.rpm

rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.27-1.1.noarch.rpm

可配置yum源,直接使用yum進行安裝:

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

在啟動之前編輯/etc/sysconfig/jenkins/配置檔案,可對其資料目錄、啟動的使用者、啟動的埠等進行修改後啟動,也可以預設。

JENKINS_HOME="/data"  #資料庫目錄,使用高i/o大容量磁碟

JENKINS_USER="jenkins" #啟動使用者

JENKINS_PORT="8080"  #啟動埠 

啟動服務:

systemctl jenkins start 或 /etc/init.d/jenkins start    

加入開機自啟動(預設Jenkins啟動會佔用8080埠,所以其他服務不能與之衝突):

chkconfig jenkins on 

輸入IP地址進行訪問:將/data/secrets/initialAdminPassword中將密碼輸入到選框中

 

下一步則是選擇外掛的步驟,可以自定義安裝,也可以安裝建議安裝的外掛,安裝過程中需連線網際網路,且速度非常慢,可先忽略安裝外掛,直接在將外掛解壓至Jenkins的外掛目錄。  

 

如出現外掛安裝失敗沒關係,使用準備好的外掛包解壓至jenkins的plugin目錄即可目錄結構預設在/var/lib/jenkins/plugins/。

 

Jenkins基礎功能

在jenkins-->系統管理-->系統設定設定管理員郵箱地址,當構建失敗時,則會發郵件通知

按照實際情況配置Jenkins URL及其系統管理員郵件地址

 

設定郵件通知,通過設定好的郵件給需要傳送的收件人發件reply-to-address

 

Jenkins專案構建

構建專案-->輸入專案名稱-->構建一個自由風格的軟體專案-->點選ok,不過在建立專案之前需事先配置好jenkins的Credentials-->將私鑰配置在此,將公鑰部署在gitlab中,這樣才能從gitlab中拉取程式碼或專案。

 

主介面包含系統的大部分配置

在系統設定中可配置郵件通知,maven、gitlab、sonar scanner郵件通知等

 

在系統管理--->外掛管理中可安裝大部分外掛