持續整合和釋出工具(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前端進行驗證:
在開發端計算機上傳專案程式碼(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埠
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伺服器新增專案:
2.4 Jenkins服務建立任務:建立一個自由風格的軟體專案
把我們上面拷貝gitlab的ssh程式碼倉庫扔過來
注意:下面填的是jenkins伺服器端生成的私鑰
注意:從gitlab程式碼倉庫拷貝的時候要http協議地址,然後再切回ssh
至此,Jenkins就可以從gitlab上獲取到程式碼了。但是還無法自動釋出。並且/var/lib/jenkins/workspace 目錄生成。
2.5 系統設定:(需要安裝外掛)
2.6 我們接下來接著開啟上面的專案構建觸發器:下面http的地址拷貝並儲存到一個地方,一會gitlab中需要用到
點選高階,生成一個token,並儲存下來,一會gitlab中需要用到
2.7 接著寫構建的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
在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直接就勾到並實現自動釋出了!!!
如有錯誤之處歡迎指出,謝謝大家。