Jenkins持續整合與構建
- jenkins環境
[[email protected] ~]# ls
anaconda-ks.cfg jdk-8u171-linux-x64.tar.gz TortoiseSVNv1.9.7.27907.zip
install.log jenkins.war install.log.syslog Python-3.5.2.tgz
- 安裝Java(解壓,移動即可)
[[email protected] ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/ [
[email protected] ~]# cd /usr/local/ [[email protected] local]# mv jdk1.8.0_171/ jdk #全路徑驗證Java是否安裝成功 [[email protected] local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
- 配置Java環境變數/etc/proflle
[[email protected] local]# vim /etc/profile #在末尾加上環境變數 export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [[email protected] local]# source /etc/profile [[email protected] local]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
- jenkins的下載和執行
#啟動jenkins並後臺執行
[[email protected] local]# cd ~
[[email protected] ~]# nohup java -jar jenkins.war &> /tmp/jenkins.out &
[1] 1252
[[email protected] ~]# netstat -antup | grep java | grep -v grep
tcp 0 0 :::8080 :::* LISTEN 1252/java
tcp 0 0 ::ffff:192.168.239.12:39374 ::ffff:52.202.51.185:443 ESTABLISHED 1252/java
tcp 0 0 ::ffff:192.168.239.12:39373 ::ffff:52.202.51.185:443 ESTABLISHED 1252/java
訪問192.168.239.128:8080
[[email protected] ~]# cd .jenkins/secrets/
[[email protected] secrets]# cat initialAdminPassword
13ff87a7518648f580cbe04fa37345d3 #訪問jenkins生成的隨機密碼
在jenkins中,每個使用者都具有所有許可權。(常用於公司內部)
jenkins實現命令結果的視覺化
(1)新增ssh方式的被管理伺服器
系統管理---->系統設定----->找到Publish over SSH可以新增對應的操作伺服器
若單獨給新建立的www專案建立一個檢視
先【應用】,再【儲存】;點選【立即構建】
jenkins+svn實現持續化整合
需求:開發改完程式碼上傳(commit)到svn上,svn更新版本,(運維)jenkins就會自動去svn把最新版程式碼tar打包,然後批量部署到業務伺服器上(web1目錄和web2目錄)。分發完,將在專案中配置的命令,備份WEB伺服器的原網頁目錄,然後再把新傳送的程式碼覆蓋進去,就會自動上線(更新)。ansible將寫好的指令碼直接批量分配給業務伺服器。
- 設定svn的連線密碼並進行程式碼的部署測試
#web1和web2中安裝svn
[[email protected] ~]# mount /dev/sr0 /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[[email protected] ~]# yum -y install subversion
Loaded plugins: fastestmirror
Determining fastest mirrors
[[email protected] ~]# mkdir -p /application/svndata
[[email protected] ~]# mkdir -p /application/svnpasswd
[[email protected] ~]# svnadmin create /application/svndata/yunjisuan
[[email protected] conf]# cp authz /application/svnpasswd/
[[email protected] conf]# cp passwd /application/svnpasswd/
[[email protected] conf]# cp svnserve.conf{,.bak}
[[email protected] conf]# vim svnserve.conf
12 anon-access = none #禁止匿名訪問
13 auth-access = write #驗證訪問可寫
20 password-db = /application/svnpasswd/passwd #密碼檔案位置
27 authz-db = /application/svnpasswd/authz #驗證檔案位置
#啟動svn
[[email protected] conf]# svnserve -d -r /application/svndata/
[[email protected] conf]# netstat -antup | grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1101/svnserve
#在/application/svnpasswd/passwd檔案末尾追加如下內容:
[[email protected] conf]# vim /application/svnpasswd/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
yunjisuan = 123456 #設定賬號密碼
benet = 123456 #設定賬號密碼
stu0001 = 123456 #設定賬號密碼
stu0002 = 123456 #設定賬號密碼
#編輯authz配置檔案進行授權,在authz末尾加入以下幾句程式碼
[[email protected] conf]# egrep -v "#|^$" /application/svnpasswd/authz
[aliases]
[groups]
sagroup = stu001,stu002 #新增本行,定義組名
[yunjisuan:/] #定義授權的範圍
yunjisuan = rw #使用者單獨授權
benet = r #使用者單獨授權
@sagroup = r #組使用者授權
設定完畢後,應用儲存。
在windows上對svn的yunjisuan專案進行版本提交後
選擇立刻構建專案
模擬真實環境web伺服器的程式碼部署和備份
[[email protected] tmp]# mkdir -p /www/{html,backup}
[[email protected] tmp]# tree /www/
/www/
├── backup #html網頁目錄的備份放置目錄
└── html #網頁目錄
在jenkins上設定webA,webB兩臺伺服器作為專案的構建目標
將以下shell指令碼程式碼複製到構建目標的Exec command裡
#備份web伺服器舊網頁目錄程式碼,並將部署到伺服器上的新程式碼覆蓋到網頁目錄裡
cd /www
/usr/bin/tar zcf html_$(date +%F-%H-%S).tar.gz html
rm -rf html/*
mv html_*.tar.gz backup/
mv /tmp/test/* /www/html/
選擇立刻構建進行測試
#檢查webA和webB,程式碼構建情況
[[email protected] tmp]# tree /www/
/www/
├── backup
│ └── html_2018-06-25-12-58.tar.gz #舊網頁目錄備份
└── html
└── mycode
├── python.py
├── \344\272\221\350\256\241\347\256\227\346\234\200\347\273\2
10\346\236\266\346\236\204\347\244\272\344\276\213\346\250\241\346\23
5\277\357\274\210\344\270\200\357\274\211.png
├── \344\272\221\350\256\241\347\256\227\346\234\200\347\273\2
10\346\236\266\346\236\204\347\244\272\344\276\213\346\250\241\346\23
5\277\357\274\210\344\272\214\357\274\211.png
└── \344\272\221\350\256\241\347\256\227\346\234\237\344\270\2
55\346\236\266\346\236\204\346\250\241\347\211\210\357\274\210\344\27
0\200\357\274\211.png
3 directories, 5 files
[[email protected] tmp]# tree /www/
/www/
├── backup
│ └── html_2018-06-25-12-58.tar.gz #舊網頁目錄備份
└── html
└── mycode
├── python.py
├── \344\272\221\350\256\241\347\256\227\346\234\200\347\273\2
10\346\236\266\346\236\204\347\244\272\344\276\213\346\250\241\346\23
5\277\357\274\210\344\270\200\357\274\211.png
├── \344\272\221\350\256\241\347\256\227\346\234\200\347\273\2
10\346\236\266\346\236\204\347\244\272\344\276\213\346\250\241\346\23
5\277\357\274\210\344\272\214\357\274\211.png
└── \344\272\221\350\256\241\347\256\227\346\234\237\344\270\2
55\346\236\266\346\236\204\346\250\241\347\211\210\357\274\210\344\27
0\200\357\274\211.png
3 directories, 5 files
模擬真實環境,開發進行程式碼回滾
(1)右鍵點選共享目錄選擇TortoiseSVN—>Show log
右鍵點選想要回滾的版本選擇Revert to this revision
此時你發現你的共享目錄裡的東西已經被回滾到了指定的版本。
最後我們千萬別忘記了右鍵點選共享目錄,將結果進行提交(SVN commit)
(2)重新進行jenkins專案構建,並檢查部署情況
[[email protected] tmp]# tree /www/
/www/
├── backup
│ ├── html_2018-06-25-12-58.tar.gz
│ └── html_2018-06-25-13-15.tar.gz
└── html
└── mycode
├── python.py
└── \346\226\260\345\273\272\346\226\207\346\234\254\346\226\2
07\346\241\243.txt
3 directories, 4 files
[[email protected] tmp]# tree /www/
/www/
├── backup
│ ├── html_2018-06-25-12-58.tar.gz
│ └── html_2018-06-25-13-15.tar.gz
└── html
└── mycode
├── python.py
└── \346\226\260\345\273\272\346\226\207\346\234\254\346\226\2
07\346\241\243.txt
3 directories, 4 files
至此,測試成功!
Jenkins實現ansible視覺化
(1)安裝jenkins ansible外掛,啟動ansible外掛
最後進入安裝介面最下方勾選,安裝完成時重啟Jenkins
(2)系統管理—>全域性工具配置---->配置ansible
(3)新建一個專案任務,使用ansible進行構建,跑個shell和copy模組
新建一個叫做ansible_test的新專案任務,過程略
進入專案的配置裡。構建一個基於ansible的任務
然後點選立刻構建功能,並檢視輸出結果
(4)新建一個專案任務,使用ansible-playbook進行構建
#準備一個playbook的配置檔案
[[email protected] scripts]# cat /service/scripts/test.yaml
---
- hosts: all
tasks:
- name: test jenkins ansible-playbook
shell: echo "welcome to yunjisuan" >> /tmp/yunjisuan.txt
然後新建一個新的專案任務,進行配置
最後檢視構建的視覺化輸出結果