Jenkins(可持續集成)


參考博客:
自動化部署

開發寫代碼的演變

  • 一個開發單打獨鬥,擼代碼,開發網站,自由自在;
  • 多個開發同時開發一個網站,同時改一份代碼。但是同時改變一個文件會導致衝突。
  • 分支結構,每天上班第一件事克隆代碼,下班前最後一件事合併代碼。

[外鏈圖片轉存失敗(img-0cEuUpmn-1568726530598)(D:/我的堅果雲/typora-image/1568637272397.png)]

  • 好景不長,開發越來越多了,代碼文件越來越多。每天下班前合併代碼時,發現很多合併失敗的文件。最後每天加班3小時人工合併代碼。
  • 解決方法:將合併代碼的週期縮短,以前一天,現在一小時,半小時
  • 隨時隨地將代碼合併,這種方法叫做持續集成

持續集成

  • 持續集成(CONTINOUS INTEGRATION,簡稱CI)
  • 持續集成指的是,頻繁的(一天多次)將代碼集成到主幹。
  • 它的好處主要有兩個。
    1. 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易。
    2. 防止分支大幅偏離主幹。如果不是經常集成,主幹又在不斷更新,會導致以後集成的難度變大,甚至難以集成。

運維上線代碼的演變

  • 初級運維很苦逼,剛開始開發每天合併一次代碼,然後運維把代碼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

環境準備

  1. 準備2臺安裝好centos7.2系統的虛擬機,內存1G+。

  2. 所有虛擬機的防火牆和selinux關閉

  3. 主機名及IP地址關係如下:

    Jenkins 192.168.152.170 不需要安裝軟件

    gitlab 192.168.152.175 安裝好gitlab

  4. 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自定義插件
在這裏插入圖片描述
在這裏插入圖片描述

  • 到可選插件中下載(時間長,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
在這裏插入圖片描述

  1. Kind選擇Gitlab API token

  2. 其中API token填寫gitlab中有庫權限的賬號profile>account>Private Token

  3. 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傳來的公鑰)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

參考博客

參考博客1
參考博客2
國內鏡像

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章