持續整合Jenkins+Gitlab
一、相關概念
1.1 持續整合:
持續整合(Continuous Integration),簡稱CI,是指開發者在程式碼的開發過程中,可以頻繁的將程式碼部署整合到主幹,並程式自動化測試。
1.2 持續交付:
持續交付(Continuous Delivery),指的是在持續整合的環境基礎之上,將程式碼部署到預生產環境
1.3 持續部署:
持續部署(Continuous Deployment),是指在持續交付的基礎上,把部署到生產環境的過程自動化,持續部署和持續交付的區別就是最終部署到生產環境是自動化的。
PS:目前大部分公司都是做到持續交付,做到持續部署的還很少,因為上生產環境,還要有很多步驟需要做。
1.4上線基本流程:
1.程式碼獲取(直接了拉取最新程式碼,使用tag標籤獲取某個版本程式碼)
2.編譯 (可選)
3.配置檔案放進去
4.打包
5.scp到目標伺服器
6.將目標伺服器移除叢集
7.解壓並放置到Webroot
8.Scp 差異檔案
9.重啟 (可選)
10.測試
11.加入叢集
二、Gitlab
2.1Gitlab簡介
GitLab是一個利用
Ruby on Rails
開發的開源應用程式,實現一個自託管的Git專案倉庫,可通過Web介面進行訪問公開的或者私人專案。
GitLab擁有與Github類似的功能,能夠瀏覽原始碼,管理缺陷和註釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個檔案歷史庫。它還提供一個程式碼片段收集功能可以輕鬆實現程式碼複用,便於日後有需要的時候進行查詢
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已經正常執行起來了!
2.3Gitlab使用
2.3.1 此時我們在瀏覽器中訪問http://192.168.66.129
Web頁面提示需要設定一個密碼(最少8位數)我這裡設定密碼為:12345678
登入系統,預設使用者名稱為root
關閉自動註冊 因為為內部使用不需要使用者自己註冊,由管理員分配使用者即可
點選Admin Area 進入管理區域
點選settings 把Sign-up enabled的鉤去掉即可
儲存即可
2.3.2 建立組,建立專案
進去管理區域,點選New group
輸入相關資訊,並選擇Private
點選Create group即可,如下說明建立成果
類似上面的方法,建立一個專案,並選擇web組
看到如下,說明專案建立成功
測試一下
新建一個Readme,並隨意輸入
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
輸入剛剛生成的公鑰,點選Add key既可
獲取專案路徑,複製相關路徑
在客戶端測試
[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基本使用已經完成
三、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,看到如下介面就說明啟動成功
檢視輸入密碼,登入進入,會看到如下頁面
選擇安裝推薦外掛即可,等待安裝完成
填寫要建立的管理使用者這裡使用Admin 密碼為12345678,點選儲存並完成即可。
點選開始使用Jenkins即可
至此基本的Jenkins已經正常的執行了
3.3 Jenkins外掛安裝
因為我們要和gitlab結合,所以這裡需要安裝gitlab的外掛
在系統管理中,進入外掛管理,搜尋gitlab
按實際情況,選擇需要的外掛,點選下載待重啟後安裝既可
等待安裝完成,並重啟Jenkins
四、實現持續整合
點選建立一個新任務,輸入任務名字,選擇自由風格,點選確定既可
在原始碼管理新增原始碼路徑,點選Add,新增認證,這裡是git,如果是svn,需要安裝svn相關外掛
選擇SSH認證方式
在Gitlab上建立deploy keys
點選新建,並在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]$
點選Create既可,填寫私鑰檔案,點選Add既可
點選儲存既可,點選立即構建
點選檢視檢視控制檯
至此持續整合初步已經完成了
相關文章
- 利用Jenkins+Gitlab搭建持續整合(CI)環境JenkinsGitlab
- Linux下配置Jenkins+gitlab持續整合構建流程LinuxJenkinsGitlab
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 持續整合、持續交付、持續部署簡介
- 整合持續整合工具
- iOS 持續整合iOS
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- Jenkins持續整合Jenkins
- 從持續整合到持續交付——DockerCloud概覽DockerCloud
- 談談持續整合,持續交付,持續部署之間的區別
- 通過Docker容器執行持續整合/持續部署Docker
- 持續整合配置之Nuget
- Taro 小程式持續整合
- 持續整合JenkinsBlueOcean初探Jenkins
- Jenkins持續整合配置Jenkins
- 淺談持續整合的理解以及實現持續整合,需要做什麼?
- 使用流水線外掛實現持續整合、持續部署
- 我們正在路上—從持續整合到持續釋出
- Flutter web 持續整合實踐FlutterWeb
- Jenkens+Docker+Git 持續整合DockerGit
- jenkins+docker 持續整合JenkinsDocker
- iOS持續整合(一)——fastlane 使用iOSAST
- 持續整合 Jenkins 簡介Jenkins
- 小程式的持續整合方案
- iOS 持續整合系列 – 開篇iOS
- Jenkins 持續整合使用教程Jenkins
- 持續整合(三):最佳實踐
- CI 持續整合 - 阿里云云效阿里
- 持續整合及部署利器:GoGo
- 使用GitLabCI持續整合Gitlab
- 持續整合開源軟體
- SAP開源的持續整合-持續交付的解決方案
- CI/CD 持續整合部署實踐
- 微服務容器部署與持續整合微服務
- ick:一個持續整合系統
- iOS使用fastlane實現持續整合iOSAST