持續部署之jenkins與gitlab(一)

主要部分node

  • 安裝部署Jenkins和gitlib
  • 瞭解gitlib的經常使用命令
  • 部署haproxy與tomcat環境
  • 配置Jenkins使用gitlib更新代碼
  • 經過sonar實現代碼檢測
  • 實現gitlib觸發Jenkins自動部署
  • 經過Jenkins實現自動部署
  • 實現haproxy動態添加刪除後端服務器
  • 編寫腳本實現自動化部署與回滾

持續集成的分類:linux

  • 持續集成:持續集成是指程序員在代碼的開發工程中,能夠頻繁的將代碼部署到主幹上,並進行自動化測試
  • 持續交互:持續交互是指在持續集成的基礎之上,將代碼部署到線上測試環境
  • 持續部署:持續部署是指在持續交互的基礎之上,將要部署的代碼實現自動部署,包括持續交互、持續部署

 

Gitlab簡介nginx

    gitlab是使用Ruby語言所研發,實現自動託管的git項目倉庫,能夠經過web界面訪問進行配置。gitlab擁有與GitHub相似的功能,可以瀏覽代碼,管理缺陷和註釋,能夠管理團隊對倉庫的訪問,它很是容易使用,並提供一個歷史回顧,便於往後的管理和維護及其查找。 c++

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

圖示:程序員

 

 

 

 

Gitlab安裝web

安裝前準備:redis

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

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源 

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

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

可配置好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‘] = "chengong101300@163.com"

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‘] = "chengong101300@163.com"

user["git_user_email"] = "chengong101300@163.com"

 

 

#gitlab-ctl reconfigure #修改配置文件後需重新編譯此文件

#gitlab-ctl status #查看gitlab狀態信息 默認佔用80、8080端口

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

[root@node1 ~]#

[root@node1 ~]# 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                           :::*

[root@node1 ~]# 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

[root@node1 ~]#

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 "admin@example.com"

Create a new repository

git clone git@node1.alren.com: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 git@node1.alren.com:mywebs/webs.git

git add .

git commit

git push -u origin master

可將多個用戶添加到同一個組,之後組內的成員將對此項目擁有必定的權限

 

 

 

 

 

 

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

咱們點擊REDME可編輯一個文檔,隨意寫一些內容,點擊提交 

 

 

填寫完將會出現路上所訴,可查看其內容。此時從gitlab中clone時需輸入用戶名和密碼,免去祕鑰登陸需添加ssh-key,免祕鑰登陸。

 

 

[root@node1 ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

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

Password for ‘http://root@node1.alren.com‘:

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

[root@node1 ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

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

Password for ‘http://root@node1.alren.com‘:

warning: You appear to have cloned an empty repository.

[root@node1 ~]# ls

anaconda-ks.cfg  webapp  webs

[root@node1 ~]# rm -rf webs/

[root@node1 ~]# git clone  git@node1.alren.com: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.

[root@node1 ~]# ls

anaconda-ks.cfg  webapp  webs

[root@node1 ~]#

 

Git總結:工做區就是編輯文件的目錄區域,須要將工做區的修改好的文件add到暫存區才能提交到git服務器,在工做區有多個文件的時候能夠將一個或多個文件添加至暫存區提交到git服務器便可,剛提交後的暫存區和服務器的文件是一致的,所以也能夠將最新的暫存區的文件進行上線和回滾,可是生產當中仍是使用服務器進行代碼更新和回滾。

 

Jenkins簡介

Jenkins是一個高度插件化的管理平臺,這就是Jenkins流行的緣由,由於Jenkins什麼插件都有,有很是靈活的API,開發能夠調用編寫插件,可完成不一樣任務的編排和執行。Jenkins有Java語言所研發,此環境則需部署在Java環境之上,可下載rpm包或下載.war包丟到webapps目錄下,啓動服務,便可訪問。

Jenkins官網地址:https://jenkins.io/

 

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郵件通知等

 

 

 

 

 

 

在系統管理--->插件管理中可安裝大部分插件

 

 

相關文章
相關標籤/搜索