1. 程式人生 > >持續整合和釋出工具(CI/CD)

持續整合和釋出工具(CI/CD)

需要用到的工具:git & gitlab & jenkins

gitlab的安裝和部署:

一、gitlab部署
1.gitlab安裝:
首先配置yum源:

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

[gitlab]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever
enabled=1
gpgcheck=0

配置好yum源後,yum repolist後直接安裝

yum list |grep gitlab       //檢視有沒有gitlab包
yum install -y  gitlab-ce  //直接安裝
gitlab-ctl reconfigure     //gitlab初始化
gitlab-ctl status  //檢視gitlab狀態

修改gitlab的配置檔案:

gitlab-ctl stop  //修改配置檔案之前停止gitlab
vim /etc/gitlab/gitlab.rb    
external_url 'http://192.168.48.132'      //修改為本機url
gitlab-ctl reconfigure   //改完後重新配置
gitlab-ctl start   //啟動gitlab

然後瀏覽器直接輸入ip進行訪問:
修改密碼
輸入兩次修改你的密碼之後,用root直接登入即可,登入成功即可看到以下介面:
登陸成功
然後選擇create a project,看下圖新增即可
命名專案
完成後點選Create project,至此,我們的一個專案就新增完成了。
然後就會出現下圖的介面:
建立成功


接著我們來新增郵箱和上傳公鑰:

新增郵箱
新增郵箱
新增後需要到自己的郵箱裡認證,認證成功後下面會出現已認證圖示!
下面我們來進行公鑰上傳:

ssh-keygen -t rsa -f /root/.ssh/id_rsa  -C "[email protected]" -N ''  //在客戶端生成一個金鑰對,此處為了免密登入到github
cat /root/.ssh/id_rsa.pub   //將螢幕上輸出的公鑰拷貝到github上,點選setting,SSH and GPG keys,然後New SSH key

新增自己生成的公鑰
然後就可以在開發端克隆這個倉庫到本地了
在這裡插入圖片描述

[[email protected] ~]# git config --global user.name "smartdevops"
[
[email protected]
~]# git config --global user.email "[email protected]" [[email protected] ~]# git clone [email protected]:root/myfirstproject.git [[email protected] ~]#cd myfirstproject [[email protected] myfirstproject]# touch README.md [[email protected] myfirstproject]# vim README.md [[email protected] myfirstproject]# git add README.md [[email protected] myfirstproject]# git commit -m "add README" [[email protected] myfirstproject]# git push -u origin master

然後在Gitlab伺服器Web前端進行驗證:
gitlab前端
在開發端計算機上傳專案程式碼(Linux)

[[email protected] myfirstproject]# vim hello.py 
[[email protected] myfirstproject]# git add hello.py
[[email protected] myfirstproject]# git commit -m "add hello.py"
[[email protected] myfirstproject]# git push -u origin master

至此,就已經成功提交到gitlab伺服器上了

Jenkins的安裝和部署:

1、Jenkins部署:

1.1 Jenkins安裝包獲取:

wget -O/etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo  //獲取jenkins源
ls /etc/yum.repos.d/
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key   

1.2 Jenkins部署:

yum install -y jenkins
rpm -ql jenkins

/etc/sysconfig/jenkins //預設使用的是TCP 8080埠,如有衝突可以在此檔案中修改埠。

systemctl start jenkins    //啟動jenkins
systemctl status jenkins   //檢視jenkins狀態

輸入自己的IP訪問jenkins的8080埠
解鎖jenkins

less /var/lib/jenkins/secrets/initialAdminPassword   //複製貼上到管理員密碼處即可

自定義外掛
新手入門
1.3 使用admin管理員登入:
建立使用者
1.4例項配置:
例項配置
然後就可以使用了
開始使用
2.Jenkins與gitlab進行整合:
2.1 Jenkins伺服器生成SSH金鑰對:

ssh-keygen -t rsa -C "[email protected]   //把生成的公鑰拷貝出來

2.2 新增Jenkins伺服器公鑰到Gitlab Web前端:
生成金鑰對
2.3 Gitlab伺服器新增專案:
新增專案
建立專案
複製SSH
2.4 Jenkins服務建立任務:建立一個自由風格的軟體專案
建立任務
把我們上面拷貝gitlab的ssh程式碼倉庫扔過來
原始碼管理
管理
憑證
注意:下面填的是jenkins伺服器端生成的私鑰
私鑰
私鑰
注意:從gitlab程式碼倉庫拷貝的時候要http協議地址,然後再切回ssh
gitlab版本
構建測試
測試成功
至此,Jenkins就可以從gitlab上獲取到程式碼了。但是還無法自動釋出。並且/var/lib/jenkins/workspace 目錄生成。
2.5 系統設定:(需要安裝外掛)
安裝外掛
安裝外掛

2.6 我們接下來接著開啟上面的專案構建觸發器:下面http的地址拷貝並儲存到一個地方,一會gitlab中需要用到
構建觸發器
點選高階,生成一個token,並儲存下來,一會gitlab中需要用到
高階
生成token
2.7 接著寫構建的shell:
執行shell

#!/bin/bash
SOURCE_DIR=/var/lib/jenkins/workspace/${JOB_NAME}/
DEST_DIR=/usr/share/nginx/html    
REMOTE_IP=192.168.48.133       //推到需要釋出程式碼的伺服器中 ,這裡需要用到免密登入
/usr/bin/rsync -avpgolr --delete-before $SOURCE_DIR [email protected]$REMOTE_IP:$DEST_DIR

執行shell
在jenkins伺服器中生成的公鑰拷貝到web伺服器中:

ssh-copy-id [email protected]   //把公鑰推到web程式碼釋出端

2.8 jenkins系統管理-安全配置中,允許所有使用者有可讀可寫許可權:
匿名使用者許可權授予
最後一步直接點儲存即可!

2.8 在Gitlab伺服器配置Web Hook:
配置之前需要設定允許鉤子和服務訪問本地網路:
允許鉤子訪問本地網路
配置鉤子:如果鉤子不配置也可以手動在Jenkins端點選立即構建進行程式碼釋出
配置鉤子
增加鉤子
點選測試,提示確保你的專案已經提交,我們來git clone 到開發端,然後add、commit、push再次測試

萬事大吉了?還沒,接下來我們需要做兩件事:
第一:在jenkins伺服器端切換到jenkins使用者推送公鑰到

[[email protected] ~]#su - jenkins
[[email protected] ~]#ssh-keygen
[[email protected] ~]#ssh-copy-id [email protected]需要釋出程式碼的伺服器   //必須是jenkins使用者生成的公鑰

第二:修改/etc/passwd裡的jenkins使用者的預設bash改成/bin/bash

usermod -s /bin/bash jenkins

至此,可以在開發端push程式碼了,jenkins直接就勾到並實現自動釋出了!!!

如有錯誤之處歡迎指出,謝謝大家。