文章目錄
參考博客:
自動化部署
開發寫代碼的演變
- 一個開發單打獨鬥,擼代碼,開發網站,自由自在;
- 多個開發同時開發一個網站,同時改一份代碼。但是同時改變一個文件會導致衝突。
- 分支結構,每天上班第一件事克隆代碼,下班前最後一件事合併代碼。
[外鏈圖片轉存失敗(img-0cEuUpmn-1568726530598)(D:/我的堅果雲/typora-image/1568637272397.png)]
- 好景不長,開發越來越多了,代碼文件越來越多。每天下班前合併代碼時,發現很多合併失敗的文件。最後每天加班3小時人工合併代碼。
- 解決方法:將合併代碼的週期縮短,以前一天,現在一小時,半小時
- 隨時隨地將代碼合併,這種方法叫做持續集成
持續集成
- 持續集成(CONTINOUS INTEGRATION,簡稱CI)
- 持續集成指的是,頻繁的(一天多次)將代碼集成到主幹。
- 它的好處主要有兩個。
- 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易。
- 防止分支大幅偏離主幹。如果不是經常集成,主幹又在不斷更新,會導致以後集成的難度變大,甚至難以集成。
運維上線代碼的演變
- 初級運維很苦逼,剛開始開發每天合併一次代碼,然後運維把代碼pull下來測試就可以了。
- 但是,後來開發引進了持續集成方法論,開發們都“彈冠相慶”。
- 運維同學感覺好苦逼,一天到晚不停的測試代碼。
- 每天下班之後,運維拖着疲倦的身子回到宿舍,就想,有沒有辦法自動化?
- 初級運維請教大佬,知道了一種方法。
- 藉助一個自動化的部署工具,叫做Jenkins
- 開發上傳自己的代碼到gitlab,gitlab發送消息通知Jenkins,隨後Jenkins從倉庫拉取代碼,最後全自動部署到測試服務器進行相關測試,並將測試結果通知運維和開發。
- 還有偷懶的方法,直接把這個工具交給開發使用,從此就可以高枕無憂了。
- 這種自動測試的方法叫做持續交付。
- 代碼測試通過了,該到生產環境部署了,運維又該幹活了。
- 其實這是一錘子買賣了,要麼成功,要麼失敗回滾。
- 可以使用自動部署工具,但是很多公司還是相信人工上線。
- 但是我們還有偷懶方法,比如ansible,saltstack
- 這裏也有個方法論叫做持續部署
持續交付
- 持續交付(CONTINUOUS DELIVERY)指的是,頻繁的將軟件的新版本,交付給質量團隊或者用戶,義工評審。如果評審通過,代碼就進入生產階段。
- 持續交付可以看做持續集成的下一步。它強調的是,不管怎麼更新,軟件是隨時的可以交付的(測試)。
持續部署
- 持續部署(CONTINUOUS DEPLOYMENT)是持續交付的下一步,指的是代碼通過評審以後,自動部署到生產環境。
- 持續部署的目標是,代碼在任何時刻都是可部署的,可以進入生產階段。
行話:CI/CD -->持續集成/持續交付/持續部署
jenkins介紹
- Jenkins是一個用Java編寫的開源的持續集成工具。在與oracle發生爭執後,項目從HUDSON項目獨立出來。
- JENKINS提供了軟件開發的持續集成服務。它運行在servlet容器中(例如APACHE TOMCAT)。它支持軟件配置管理(SCM)工具(包括ACCUREV SCM、CVS、SUBVERSION、GIT、PERFORCE、CLEARCASE和RTC),可以執行基於APACHE ANT和APACHE MAVEN的項目,以及任意的shell腳本和Windows批處理命令。Jenkins的主要開發者是川口耕介。Jenkins是在MIT許可證下發布的自由軟件。
安裝Jenkins
環境準備
-
準備2臺安裝好centos7.2系統的虛擬機,內存1G+。
-
所有虛擬機的防火牆和selinux關閉
-
主機名及IP地址關係如下:
Jenkins 192.168.152.170 不需要安裝軟件
gitlab 192.168.152.175 安裝好gitlab
-
Linux中能發郵件的賬號
- 常規安裝方法:使用rpm包安裝(推薦)
- rpm包下載地址:http://pkg.jenkins.io/redhat-stable/
- 清華源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable
yum安裝jdk
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
安裝rpm包
rpm -ivh jenkins-2.73.1-1.1.noarch.rpm
或者yum安裝
yum -y install Jenkins
啓動
/etc/init.d/jenkins start
systemctl start Jenkins
-
離線安裝方法:
- 使用老師提供的三個軟件包:
- jenkins_yum.tar.gz #所有依賴包的緩存文件
- jenkins-2.73.1-1.1.noarch.rpm #Jenkins安裝包
- jenkins_plugins.tar.gz ##Jenkins常用插件
-
步驟1/2:
1.安裝插件離線包
tar xfP jenkins_yum.tar.gz
tar xfP jenkins_plugins.tar.gz
yum -C --nogpgcheck install java-1.8.0-openjdk java-1.8.0-openjdk-devel
rmp -ivh jenkins-2.73.1-1.1.noarch.rpm
/etc/init.d/jenkins start
注:Jenkins插件目錄/var/lib/jenkins/plugins
2.查看rpm安裝的目錄
rpm -ql jenkins
測試/安裝插件
1. 打開網頁
2. 解鎖Jenkins,需要管理密碼
cat /var/lib/jenkins/secrets/initialAdminPassword
3.安裝插件,會到公網下載,很慢(jenkins_plugins.tar.gz提前下載好的插件)
- 升級:
jenkins的升級,只需要將war包解壓到/var/lib/jenkins目錄下,重啓jenkins即可,卡啓動問題 jenkins在第一次安裝啓動時會向官網回傳信息,如果網絡離線可以正常安裝。
當網絡在線,但是 還有可能是內存不足
備份: tar zcvf jenkins.tar.gz /var/lib/jenkins,寫一個定時任務的腳本,保留15天的備份,通過增量備份。
- 到可選插件中下載(時間長,jenkins_plugins.tar.gz裏有所有默認插件)
- 然後重啓 Jenkins服務
Jenkins配置文件
- 配置文件
- 目錄結構
[root@jenkins plugins]# rpm -ql jenkins
/etc/init.d/jenkins # 啓動文件 啓動文件裏的變量是去配置文件裏拿的
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins # 配置文件
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war # war包存放位置
/usr/sbin/rcjenkins
/var/cache/jenkins # 程序文件
/var/lib/jenkins # 工作目錄 升級只要把war包放在這裏即可
/var/log/jenkins # 日誌文件
[root@jenkins ~]# grep -vE "^$|#" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" # jenkins工作目錄
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" # Jenkins的啓動用戶
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true" # java的啓動選項
JENKINS_PORT="8080" # jenkins端口
JENKINS_LISTEN_ADDRESS="" # Jenkins監聽端口
JENKINS_HTTPS_PORT="" # HTTPS 的指定端口
JENKINS_HTTPS_KEYSTORE="" # HTTPS 指定認證
JENKINS_HTTPS_KEYSTORE_PASSWORD="" # HTTPS 指定KEY文件
JENKINS_HTTPS_LISTEN_ADDRESS="" # HTTPS 指定監聽地址
JENKINS_DEBUG_LEVEL="5" # 日誌級別
JENKINS_ENABLE_ACCESS_LOG="no" # 不記錄訪問日誌
JENKINS_HANDLER_MAX="100" # 最大的工作線程
JENKINS_HANDLER_IDLE="20" # idle工作的線程數
JENKINS_ARGS="" # 啓動參數
在測試環境中改成root用戶來進行配置
vim /etc/sysconfig/jenkins
將用戶修改爲root,可以調用root工具
29 JENKINS_USER="root"
修改啓動端口85行,$JENKINS_PORT
service jenkins restart
- 非root用戶啓動Jenkins,假如是work
chown -R work:work /var/lib/jenkins
chown -R /var/cache/jenkins/
chown -R /var/log/jenkins/
登錄Jenkins
http://localhost:8080 #瀏覽器訪問
cat /var/lib/jenkins/secrets/initialAdminPassword #Jenkins管理員的初始密碼
Jenkins插件
1.Git parameter #git參數構建
2.build-name-setter #修改build的每次的名稱
#${BUILD_NUMBER}-$module-$release_tag
3.user build vars plugin #獲取運行job的用戶名
4.Jenkins 修改本地默認主題
主題URL:(不知道對不對)
http://afonsof.com/Jenkins-material-theme
1)chrome 瀏覽器 安裝stylish css導進去
2)安裝插件 simple Theme
放入靜態文件 /var/cache/jenkins/war/css
http://localhost/css/material-teal.css
- 步驟3:配置併發執行任務數量
- 系統管理–》系統設置(5個併發),一般設置爲5,不超過10
- 步驟4:郵件配置
- 系統管理–》系統設置
配置smtp服務器
關聯gitlab
- 創建一個新任務,起一個名字,選擇風格(現企業多用pipeline)
- 關聯git(自己的gitlab項目地址)
- 將公鑰放入gitlab中
- 將私鑰放入Jenkins,gitlab的用戶是git
- 在Jenkins生成一對密鑰對,把Jenkins的公鑰填寫到gitlab的ssh key中
Jenkins的私鑰放入Jenkins
構建環境
- 測試(在Jenkins上)
[root@jenkins ~]# mkdir /data/www -p
[root@jenkins ~]# chown -R jenkins.jenkins /data/www/ #不給權限就sudo
sh test.sh #也可以在shell環境直接執行腳本
- jenkins 構建工作的目錄/var/lib/jenkins/workspace/
[root@Jenkins php-deploy]# pwd
/var/lib/jenkins/workspace/php-deploy
[root@Jenkins php-deploy]# ls
README.md
執行代碼:
gitlab 先任務文件,再到Jenkins執行任務
- 關於Jenkins部署代碼權限三種方案
- 第一種方法:修改Jenkins進程用戶爲root
JENKINS_USER="root"
- 第二種方法:將代碼目錄用戶改爲Jenkins
mkdir /data/www -p
chown -R jenkins.jenkins /data/www/
- 第三種方法:使用sudo授權
配置Gitlab Push自動觸發jenkins構建
一、下載 gitlab plugin
Jenkins>插件管理
下載並安裝gitlab plugin
二、配置 gitlab認證
路徑Jenkins>Credentials>System>Global credentials (unrestricted)> Add Credentials
-
Kind選擇Gitlab API token
-
其中API token填寫gitlab中有庫權限的賬號profile>account>Private Token
-
ID填寫用戶賬號
三、選擇連接
路徑 系統管理> 系統設置
1、 填寫連接名
2、填寫 gitlab 訪問URL
3、 選擇 gitlab認證
4、 測試連接
四、配置 任務
在job配置中選擇–>configure–>gitlab connection自動出現token
點高級—》generate–》生成祕鑰
五、任務配置
在 job配置界面
1、 勾選 build when a change……
2、 選擇 push events事件觸發構建
3、 選擇分支過濾
4、 Secret token需要安入 gitlab 項目中的 webhook
六、 配置gitlab中的 webhook(改成了system hooks)
1、 寫入項目 URL(這個地址不是gitlab的克隆地址,而是在jenkins配置時生成的地址)
2、 Secret Token寫入 jenkins生成的token
url地址是
- 推送時觸發條件
pipline構建
報錯:因爲gitlab的項目並沒有關聯Jenkins的公鑰
gitlab–>gitlab的項目—>setting---->Repository Settings—>Deploy Keys—>Expand(關聯Jenkins傳來的公鑰)