持續集成
第1章 行話
1.1 什麼叫持續集成? ---簡稱CI
在公司中,開發人員每天上班克隆一個自己的分支,下班前將分支進行合併,但是隨着開發人員越來越多,代碼也越來越多,每天下班之前要花很長時間進行人工合併代碼,爲了解決這樣的情況,將合併的週期縮短,以前每天合併,改爲每小時或者沒半小時進行合併,隨時隨地的將代碼進行合併,這種方法叫做持續集成
一句話:持續集成就是指,頻繁的將代碼集成到主幹!
1.1.1 持續集成的好處:
1. 快速的發現錯誤,沒完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易
2. 方式分支大幅度偏離主幹,如果不是經常集成,主幹又不斷的更新,會導致以後集成的難度變大,甚至難以集成
1.2 什麼叫做持續交付? ---簡稱CD
藉助一個自動化的部署工具,jenkins
當開發上傳自己的代碼到gitlab,gitlab發消息通知jenkins,隨後jenkins從倉庫拉取代碼,最後全自動部署到測試服務器進行相關測試,並將測試結果通知運維和開發,這種方法叫做持續交付
1.3 什麼叫持續部署? ---簡稱CD
持續部署是持續交付的下一步,指的是代碼通過評審以後,自動部署到生產環境
持續部署的目標是,代碼在任何時刻都是可部署的,可以進入生產進階
第2章 jenkins介紹
jenkins是一個用java編寫的開源的持續集成工具,在與oracle發生爭執後,項目從hudson項目獨立出來
jenkins提供了軟件開發的持續集成服務,他運行在servlet容器中(例如apache,tomgcat)他支持軟件配置管理,(SCM)工具,可以執行基於Apache ant和Apachemaven的項目,以及任意的shell腳本和windows批處理命令,jenkins的主要開發者是川口耕介,jenkins是在mit許可證下發布的自由軟件
第3章 部署jenkins:
3.1 軟件下載地址:
官方倉庫 https://pkg.jenkins.io/redhat-stable/
清華大學開源軟件鏡像站 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
3.2 進行安裝
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
rpm -ivh jenkins-2.73.1-1.1.noarch.rpm
/etc/init.d/jenkins start
3.3 安裝插件
[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz
[root@jenkins tools]# /etc/init.d/jenkins restart
3.3.1 rpm包安裝的內容:
[root@Jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins # 啓動文件
/etc/logrotate.d/jenkins # 日誌分割配置文件
/etc/sysconfig/jenkins # jenkins主配置文件
/usr/lib/jenkins # 存放war包目錄
/usr/lib/jenkins/jenkins.war # war 包
/usr/sbin/rcjenkins # 命令
/var/cache/jenkins # war包解壓目錄 jenkins網頁代碼目錄
/var/lib/jenkins # jenkins 工作目錄
/var/log/jenkins # 日誌
配置文件說明:
[root@Jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" #jenkins工作目錄
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" # jenkinx啓動用戶
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080" # 端口
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100" # 最大連接
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
3.4 輸入http://10.0.0.64:8080進入web管理界面
第4章 web界面安裝:
4.1 查看解鎖jenkins的密碼:
[root@jenkins secrets]# cat /var/lib/jenkins/secrets/initialAdminPassword
8c85ece6417d4c229434b26eaa5806bd
1.1 輸入密碼登錄後,會有安裝插件的提示,先關閉頁面,在安裝完jenkins後安裝插件
1.1 關閉安裝插件後,選擇開始使用jenkins
1.1 安裝完成
1.1 安裝jenkins插件: ---系統管理---管理插件
這裏直接上傳的軟件包
[root@jenkins tools]# tar xfP jenkins_plugins.tar.gz
[root@jenkins tools]# /etc/init.d/jenkins restart
第1章 jenkins配置
配置jenkins併發執行數量,提高執行效率
1.1.1 完成
1.1 設置郵件,在測試完成後,主動發送郵件通知測試情況
第1章 jenkins使用
1.1 創建一個新的任務
1.1 將jenkins與gitlab聯合
[root@Jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 root@Jenkins
The key's randomart image is:
+---[RSA 2048]----+
|==....=* .. |
|...o oo==. |
|+.= . =++.o |
|++ o o.+ . |
|... o S . |
|o.oo o |
| B+ . . . |
|++++ . |
|+Eo. |
+----[SHA256]-----+
1.1.1 在gitlab中添加公鑰信息
1.1.1 在jenkins中添加私鑰
1.1.1 選擇ssh密鑰和證書,然後選擇直接輸入,將私鑰複製到下框中即可
1.1.1 選擇剛纔創建的證書,完成後,選擇構建
1.1.1 選擇構建,拉到最底部,選擇使用shell腳本
1.1.1 腳本內容:
1.1 創建測試環境
[root@jenkins ~]# mkdir /data/www -p
[root@jenkins ~]# chown -R jenkins.jenkins /data/www/
說明:這裏創建完目錄後把站點目錄的屬主和屬組都交給jenkins用戶,因爲jenkins程序運行是jenkins用戶,要注意安全問題,各種服務都一樣!
1.1.1 選擇構建後,讓每次構建完成後將結果發送給管理員
1.1 配置簡單的測試項目完成
1.1.1 部署執行過程的日誌
jenkins項目所在目錄
[root@jenkins oldboyedu]# pwd
/var/lib/jenkins/workspace/oldboyedu
1.1 查看部署結果
[root@jenkins oldboyedu]# ll /data/www/
total 8
-rw-r--r-- 1 jenkins jenkins 10 Mar 21 23:08 jiang.txt
-rw-r--r-- 1 jenkins jenkins 782 Mar 21 22:24 README.md
第2章 配置更新代碼以後自動上線自動部署
2.1 添加gitlab-token,配置gitlab認證
1.1.1 添加新憑證
1.1.1 從gitlab設置中將token複製過來
1.1.1 將複製的token粘貼到api token中,點擊ok即可
1.1 系統全局配置連接上gitlab
1.1 打開項目,編輯項目的構建觸發器
1.1.1 在gitlab上配置連接jenkins,將jenkins的secret token與URL複製到gtilab中
1.1.1 保存之前進行測試,測試成功後保存即可
1.1.1 在gitlab上上傳文件,進行測試即可
1.1.1 在日誌中顯示是 Started by GitLab push by Administrator 即表示自動集成成功
第1章 代碼上線解決方案:
1.1 合理化上線方案:
1. 開發人員需在個人電腦的搭建LAMP環境測試開發好的網站代碼,並且在辦公室或者IDC機房的測試環境測試通過,最好有專職測試人員
2. 程序代碼上線要規定時間,這個上線時間需要從監控中分析數據得知,選擇流量低的時段進行上線
3. 代碼上線之前需要備份,網站程序有問題方便回滾,另外,從上線技巧上講,上傳代碼時儘可能先傳到服務器中網站的臨時目錄,傳完整後一步mv過去,或者通過做軟鏈接的方法實現
4. 儘量由運維人員管理上線,對於代碼的功能性,開發人員更在意,對於代碼的性能優化和上線後的穩定,運維更在意服務器的穩定,因此,如果網站宕機問題歸運維管理,就要讓運維上線,這樣規範更科學,否則,開發隨意更新,出了問題找不到根源
1.1 PHP程序代碼上線的具體方案:
對於php上線方法:發佈代碼時可以直接發佈到正式線臨時目錄,然後mv或者更改林肯的方式發佈到正式線上目錄,不需要重啓http服務,當然這也是新浪,趕集的上線方案
1.2 JAVA程序代碼上線的具體方案
對於java上線方法,較大公司需要分組平滑上線(如從負載均衡服務器上摘掉一般的服務器)發佈代碼後,重啓服務器進行測試,沒問題後,掛上上線好的一半,再換另外一半,如果前段有DNS智能解析,上線還可以分地區上線若干服務器,在逐漸普及到全國的服務器,這個被稱爲灰度發佈
1.2.1 灰度發佈:
通過ip地址定位,地區,返回指定網頁內容