持續集成Jenkins+Gitlab

持續集成Jenkins+Gitlab

0.1 2018.04.21 15:11* 字數 1203 閱讀 760評論 3喜歡 17

1、相關概念

1.1 持續集成:

持續集成(Continuous Integration),簡稱CI,是指開發者在代碼的開發過程當中,能夠頻繁的將代碼部署集成到主幹,並進程自動化測試。java

 
CI

1.2 持續交付:

持續交付(Continuous Delivery),指的是在持續集成的環境基礎之上,將代碼部署到預生產環境node

 
CD

1.3 持續部署:

持續部署(Continuous Deployment),是指在持續交付的基礎上,把部署到生產環境的過程自動化,持續部署和持續交付的區別就是最終部署到生產環境是自動化的。nginx

 
Continuous Deployment
 

PS:目前大部分公司都是作到持續交付,作到持續部署的還不多,由於上生產環境,還要有不少步驟須要作。git

1.4上線基本流程:

1.代碼獲取(直接了拉取最新代碼,使用tag標籤獲取某個版本代碼)
2.編譯 (可選)
3.配置文件放進去
4.打包
5.scp到目標服務器
6.將目標服務器移除集羣
7.解壓並放置到Webroot
8.Scp 差別文件
9.重啓 (可選)
10.測試
11.加入集羣web

 

2、Gitlab

2.1Gitlab簡介

GitLab是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自託管的Git項目倉庫,可經過Web界面進行訪問公開的或者私人項目。
GitLab擁有與Github相似的功能,可以瀏覽源代碼,管理缺陷和註釋。能夠管理團隊對倉庫的訪問,它很是易於瀏覽提交過的版本並提供一個文件歷史庫。它還提供一個代碼片斷收集功能能夠輕鬆實現代碼複用,便於往後有須要的時候進行查找redis

2.2Gitlab部署

#環境準備
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
[root@node1 ~]# uname -r
3.10.0-693.el7.x86_64

#更換阿里yum源
[root@node1 yum.repos.d]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm 
[root@node1 ~]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@node1 ~]# yum update -y

#更換gitlabyum源爲清華大學
[root@node1 ~]# vim /etc/yum.repos.d/gitlab-ce.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
[root@node1 ~]# yum makecache
[root@node1 ~ ]#  yum install -y gitlab-ce

#安裝依賴
[root@node1 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y

#啓動postfix
[root@node1 ~]# systemctl start postfix

#安裝gitlab-ce   版本爲gitlab-ce.x86_64 0:10.6.4-ce.0.el7
[root@node1 ~]# yum install -y gitlab-ce

#配置並啓動gitlab   比較久,須要耐心等待一下,在此以前須要保證80端口不被佔用
[root@node1 ~]# gitlab-ctl reconfigure

#等待完成,看到以下結果,說明配置成功
Running handlers:
Running handlers complete
Chef Client finished, 387/552 resources updated in 01 minutes 55 seconds
gitlab Reconfigured!

#查看啓動狀態 所有爲run說明正常啓動
[root@node1 ~]# gitlab-ctl status
run: gitaly: (pid 15333) 182s; run: log: (pid 14995) 225s
run: gitlab-monitor: (pid 15350) 181s; run: log: (pid 15153) 213s
run: gitlab-workhorse: (pid 15318) 182s; run: log: (pid 14876) 239s
run: logrotate: (pid 14928) 231s; run: log: (pid 14927) 231s
run: nginx: (pid 14895) 237s; run: log: (pid 14894) 237s
run: node-exporter: (pid 15132) 219s; run: log: (pid 15131) 219s
run: postgres-exporter: (pid 15387) 180s; run: log: (pid 15240) 199s
run: postgresql: (pid 14634) 273s; run: log: (pid 14633) 273s
run: prometheus: (pid 15370) 181s; run: log: (pid 15191) 205s
run: redis: (pid 14574) 279s; run: log: (pid 14573) 279s
run: redis-exporter: (pid 15175) 207s; run: log: (pid 15174) 207s
run: sidekiq: (pid 14858) 245s; run: log: (pid 14857) 245s
run: unicorn: (pid 14820) 247s; run: log: (pid 14819) 247s

至此最基本的gitlab已經正常運行起來了!sql

2.3Gitlab使用

2.3.1 此時咱們在瀏覽器中訪問http://192.168.66.129vim

Web頁面提示須要設置一個密碼(最少8位數)我這裏設置密碼爲:12345678瀏覽器

 
 
image.png
 

登陸系統,默認用戶名爲root服務器

 
 
image.png

關閉自動註冊 由於爲內部使用不須要用戶本身註冊,由管理員分配用戶便可
點擊Admin Area 進入管理區域
 
image.png
 

點擊settings 把Sign-up enabled的鉤去掉便可

 
 
image.png

保存便可

2.3.2 建立組,建立項目

進去管理區域,點擊New group

 
 
image.png
 

輸入相關信息,並選擇Private

 
 
image.png

點擊Create group便可,以下說明建立成果
 
image.png
 

相似上面的方法,建立一個項目,並選擇web組

 
 
image.png

看到以下,說明項目建立成功
 
image.png

測試一下
新建一個Readme,並隨意輸入
 
image.png

2.3.3 在客戶端測試,並配置ssh免祕

[root@node1 ~]# useradd www
[root@node1 ~]# passwd www
更改用戶 www 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
[root@node1 ~]# su www
[www@node1 root]$ ssh-keygen -t rsa -C "yuanjy@juweitu.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:J5Ja/RLAE4KPv70zz1YMmrz7r5ojLPfchGThH9hBdI8 yuanjy@juweitu.com
The key's randomart image is:
+---[RSA 2048]----+
|   .. ..o .      |
|  .  o o . o     |
|   o  = . E .    |
|  . .. O..       |
|   . .OoSo.      |
|    .=++ *o      |
|   ..o..+..      |
|  . =.*=..       |
|   o oB@*o.      |
+----[SHA256]-----+
[www@node1 root]$ cd 
[www@node1 ~]$ cd .ssh/
[www@node1 .ssh]$ ll
總用量 8
-rw------- 1 www www 1679 4月  21 16:40 id_rsa
-rw-r--r-- 1 www www  400 4月  21 16:40 id_rsa.pub
[www@node1 .ssh]$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGS5bnpPvBPLkh/j3OJ8j3Z0dkxgUgLMT2ebeL0U/c7cQ6xGRgKajfLLb2xp+U4XCgU6kKBncXvFWh4PY7/eBPpVbpstJmtf/13gAYB/skHen+jl58k1JP4m/9W/aB6KW3PBRuWF9BA3ki0fHt624R2qSHoaveHiP2YK/9hsYhAizzdN3Y6JMCfSxZ7/FluLb+tXuASLuVQqyilxxZGkAjY0/15zntXyNTovAfseeRrmyAktvMgjK9ZfdGZp/nzS3LXclw2/QhAyT4mLL9FzLLWE2adYuBxj/42UrVZrc7bfkTMUllYvSq4Qkg0VS/8n5FLxEjAIKwPDTkbeTFVKan yuanjy@juweitu.com
[www@node1 .ssh]$

上面建立了一個www用戶,並生產了祕鑰文件,在瀏覽器中點擊我的頭像,點擊settings進入設置,點擊SSH keys

 
 
 
image.png
 

輸入剛剛生成的公鑰,點擊Add key既可

 
 
 
image.png

獲取項目路徑,複製相關路徑
 
 
image.png
 

在客戶端測試

[www@node1 ~]$ git clone git@gitlab.example.com:web/web-demo.git
正克隆到 'web-demo'...
ssh: Could not resolve hostname gitlab.example.com: Name or service not known
fatal: Could not read from remote repository.

#PS 由於我這裏是虛擬機沒有配置相關域名,也沒有修改hosts,這裏就臨時把gitlab.example.com改爲IP既可,後面能夠修改配置文件
Please make sure you have the correct access rights
and the repository exists.
[www@node1 ~]$ git clone git@192.168.66.129:web/web-demo.git
正克隆到 'web-demo'...
The authenticity of host '192.168.66.129 (192.168.66.129)' can't be established.
ECDSA key fingerprint is SHA256:wJyF35WdLaQJxzWYaVgjv61ujKzHcTw1DpR789UPUQ8.
ECDSA key fingerprint is MD5:3c:96:f6:ad:15:ba:73:fd:67:ac:54:52:84:4d:0a:b3.
Are you sure you want to continue connecting (yes/no)? yes       
Warning: Permanently added '192.168.66.129' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收對象中: 100% (6/6), done.
[www@node1 ~]$ ll
總用量 0
drwxrwxr-x 3 www www 35 4月  21 16:49 web-demo
[www@node1 ~]$ cd web-demo/
[www@node1 web-demo]$ ll
總用量 4
-rw-rw-r-- 1 www www 44 4月  21 16:49 README.md
[www@node1 web-demo]$ cat README.md 
測試專用 測試 。。。。。。。。[www@node1 web-demo]$

至此Gitlab基本使用已經完成

3、Jenkins

3.1 Jenkins簡介

Jenkins只是一個平臺,真正運做的都是插件。這就是jenkins流行的緣由,由於jenkins什麼插件都有
Hudson是Jenkins的前身,是基於Java開發的一種持續集成工具,用於監控程序重複的工做,Hudson後來被收購,成爲商業版。後來創始人又寫了一個jenkins,jenkins在功能上遠遠超過hudson
Jenkins官網:https://jenkins.io/

3.2 Jenkins部署

Jenkins 是由java語言編寫,因此咱們這裏須要java環境,我事先已經安裝好了1.8.0_161
PS:由於gitlab中的unicorn組件會監聽8080端口,而Jenkins默認也是監聽8080,這裏咱們採用node2來部署jenkins

#jenkins本身提供了yum源,這裏採用yum方式,也能夠採用源碼編譯的方式

[root@node2 ~]# cd /etc/yum.repos.d/
[root@node2 yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo
[root@node2 ~]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[root@node2 ~]# yum install -y jenkins
[root@node2 ~]# systemctl start jenkins

在瀏覽器端訪問http://192.168.66.130:8080,看到以下界面就說明啓動成功

 
 
image.png
 

查看輸入密碼,登陸進入,會看到以下頁面

 
 
image.png

選擇安裝推薦插件便可,等待安裝完成
 
image.png
 

填寫要建立的管理用戶這裏使用Admin 密碼爲12345678,點擊保存並完成便可。

 
 
image.png

點擊開始使用Jenkins便可
 
 
image.png

至此基本的Jenkins已經正常的運行了

3.3 Jenkins插件安裝

由於咱們要和gitlab結合,因此這裏須要安裝gitlab的插件
在系統管理中,進入插件管理,搜索gitlab

 
 
 
image.png
 

按實際狀況,選擇須要的插件,點擊下載待重啓後安裝既可

 
 
 
image.png

等待安裝完成,並重啓Jenkins

4、實現持續集成

點擊建立一個新任務,輸入任務名字,選擇自由風格,點擊肯定既可

 
 
 
image.png
 

在源碼管理添加源碼路徑,點擊Add,添加認證,這裏是git,若是是svn,須要安裝svn相關插件

 
 
image.png

選擇SSH認證方式
 
image.png
 

在Gitlab上建立deploy keys

 
 
image.png

點擊新建,並在node2 新建www用戶,並建立祕鑰文件
[root@node2 yum.repos.d]# useradd www
[root@node2 yum.repos.d]# cd 
[root@node2 ~]# passwd www
更改用戶 www 的密碼 。
新的 密碼:
無效的密碼: 密碼未經過字典檢查 - 過於簡單化/系統化
從新輸入新的 密碼:
抱歉,密碼不匹配。
新的 密碼:
無效的密碼: 密碼未經過字典檢查 - 過於簡單化/系統化
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
[root@node2 ~]# su www
[www@node2 root]$ ssh-keygen -t rsa -C "yuanjy@juweitu.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CSt+dEEFmyv40qJ5d1e/NbCHbn9fgEYLaf2FhKHuptk yuanjy@juweitu.com
The key's randomart image is:
+---[RSA 2048]----+
|        oo. .o.  |
|       . o +.. . |
|      . + = o . .|
|     . o * o + . |
|    o + S . +.o  |
|   . = o . .. +. |
|    + +   o. + oo|
|   o.+. .=. ..o.+|
|  o. . .o.E ..oo+|
+----[SHA256]-----+
[www@node2 root]$ cd
[www@node2 ~]$ ll
總用量 0
[www@node2 ~]$ cd .ssh/
[www@node2 .ssh]$ ll
總用量 8
-rw------- 1 www www 1675 4月  21 23:42 id_rsa
-rw-r--r-- 1 www www  400 4月  21 23:42 id_rsa.pub
[www@node2 .ssh]$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZZE5beieQdGcCQLkHjeh/4TJXwGnybLc7A0xVfTSQszjq7jx/m6jjE4pOHMQX/yUqb9Pg+NdvsJynpV1ZSNr/ojm18vR4S7sj+6nEV0kIP0IWOLeqSlHKvr9BFggkvcAjSTzsSc31P1Wn8rs6z9xag8WWK759vSz1BdG85fW5xgDdlu8ynwGulF6roOa2pAKhCCk2ibRvwYbpElVGcFA6taf7LOnR63842JsYbeC+a8XTcZmWFWVq8JYfeDcoHZ/61gC9lmiIlsVlEGifAJaM6KHQxkViQtEpWzgfRvKEnBmXigiCUvbJPBNSPCbzSPVYK+Yv1llBsGJQfp/74glD yuanjy@juweitu.com
[www@node2 .ssh]$
 
image.png
 

點擊Create既可,填寫私鑰文件,點擊Add既可

 
 
image.png
 

點擊保存既可,點擊當即構建

 
 
image.png

點擊查看查看控制檯
 
image.png
至此持續集成初步已經完成了
相關文章
相關標籤/搜索