一, 簡介
一般網站部署的流程 這邊是完整流程而不是簡化的流程
需求分析—原型設計—開發代碼—內網部署-提交測試—確認上線—備份數據—外網更新-最終測試,如果發現外網部署的代碼有異常,需要及時回滾
一般是運維來做 功能測試 上線的時間 jenkins 運維 功能測試
部署流程
我們可以通過jenkins工具平臺實現全自動部署+測試,是一個可擴展的持續集成引擎,是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。Jenkins非常易於安裝和配置,簡單易用
簡單來說方便如下人員:
- 開發人員:寫好代碼,不需要自己進行源碼編譯、打包等工作,直接將代碼分支存放在SVN、GIT倉庫即可。 war 源碼多 自動把代碼放到服務器上面
- 運維人員:減輕人工干預的錯誤率,ansible 一鍵完成了 同時解放運維人員繁雜的上傳代碼、手動備份、更新
- 測試人員:可以通過jenkins進行簡單的代碼及網站測試
- 持續集成的意義(總結 提升工作效率)
- 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間、費用和工作量
- 持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能
- 持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心
持續集成的組件
- 一個自動構建過程,包括自動編譯、分發、部署和測試
- 一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作爲構建過程的素材庫,例如SVN、GIT代碼庫
- 一個jenkins持續集成服務器就是一個配置簡單和使用方便的持續集成服務器
二、jenkins安裝
由於jenkins是使用java代碼開發的,所以我們需要安裝java容器才能運行jenkins,又因爲java的web服務器用的是tomcat,所以我們要安裝JDK+Tomcat
- 安裝jenkins+tomcat
[root@vagrant-centos65 ~]# yum -y install java-1.8.0-openjdk.x86_64
[root@vagrant-centos65 ~]# cd /opt/
[root@vagrant-centos65 opt]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.79/bin/apache-tomcat-7.0.79.tar.gz
[root@vagrant-centos65 opt]# tar zxvf apache-tomcat-7.0.79.tar.gz
[root@vagrant-centos65 opt]# mkdir -p /usr/local/tomcat
[root@vagrant-centos65 opt]# mv apache-tomcat-7.0.79/* /usr/local/tomcat
- 安裝jenkins
[root@vagrant-centos65 ~]# cd /opt/
[root@vagrant-centos65 opt]# wget http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.60-1.1.noarch.rpm
[root@vagrant-centos65 opt]# rpm -ivh jenkins-2.60-1.1.noarch.rpm
[root@vagrant-centos65 opt]# /etc/init.d/jenkins start
Starting Jenkins [ OK ]
[root@vagrant-centos65 opt]# netstat -tnlp | grep 8080
[root@vagrant-centos65 opt]# /etc/init.d/jenkins start
Starting Jenkins [ OK ]
[root@vagrant-centos65 opt]# netstat -tnlp | grep 8080
tcp 0 0 :::8080 :::* LISTEN 7599/java
三、升級python2.6到python2.7
由於django1.7之後的版本就不支持python2.6了 所有需要我們升級python2.6--python2.7
[root@vagrant-centos65 ~]# yum -y install zlib zlib-devel openssl openssl-devel sqlite-devel
[root@vagrant-centos65 ~]# wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
[root@vagrant-centos65 ~]# tar -jxvf Python-2.7.3.tar.bz2
[root@vagrant-centos65 ~]# cd Python-2.7.3
[root@vagrant-centos65 Python-2.7.3]# ./configure --prefix=/usr/local/python2.7
[root@vagrant-centos65 Python-2.7.3]# make && make install
[root@vagrant-centos65 Python-2.7.3]# cd /usr/bin/
[root@vagrant-centos65 bin]# ll | grep python
-rwxr-xr-x. 2 root root 4864 Nov 22 2013 python
lrwxrwxrwx. 1 root root 6 Jan 16 2014 python2 -> python
-rwxr-xr-x. 2 root root 4864 Nov 22 2013 python2.6
[root@vagrant-centos65 bin]# mv python python2.6.bak
[root@vagrant-centos65 bin]# ln -s /usr/local/python2.7/bin/python /usr/bin/python
[root@vagrant-centos65 bin]# vi /usr/bin/yum
#!/usr/bin/python2.6
五、安裝django
-
安裝setuptools
pip的安裝需要依賴setuptools,所有需要先安裝setuptools
[root@vagrant-centos65 bin]# cd /opt/
[root@vagrant-centos65 opt]# wget https://pypi.python.org/packages/61/3c/8d680267eda244ad6391fb8b211bd39d8b527f3b66207976ef9f2f106230/setuptools-1.4.2.tar.gz
[root@vagrant-centos65 opt]# tar zxvf setuptools-1.4.2.tar.gz
[root@vagrant-centos65 opt]# cd setuptools-1.4.2
[root@vagrant-centos65 setuptools-1.4.2]# python setup.py install
- 安裝pip
[root@vagrant-centos65 ~]# cd /opt/
[root@vagrant-centos65 opt]# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
[root@vagrant-centos65 opt]# tar zxvf pip-1.5.4.tar.gz
[root@vagrant-centos65 opt]# cd pip-1.5.4
[root@vagrant-centos65 pip-1.5.4]# python setup.py install
[root@vagrant-centos65 pip-1.5.4]# pip
-bash: pip: command not found
[root@vagrant-centos65 pip-1.5.4]# find / -name pip
/usr/local/python2.7/bin/pip
/usr/local/python2.7/lib/python2.7/site-packages/pip-1.5.4-py2.7.egg/pip
[root@vagrant-centos65 pip-1.5.4]# ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
- 安裝django
[root@vagrant-centos65 pip-1.5.4]# pip install django
[root@vagrant-centos65 pip-1.5.4]# pip list
Django (1.11.3)
pip (1.5.4)
pytz (2017.2)
setuptools (1.4.2)
wsgiref (0.1.2)
六、安裝插件
插件管理
如果插件下載失敗 更換源 http://mirror.xmission.com/jenkins/updates/current/update-center.json
因爲我們只需要構建python項目 所以我們這邊只需要2個插件
- git plugin
- python plugin
- pipeline
七、創建項目
- 總結
第一步 創建項目
創建任務 名字 master-build 自由代碼風格
1. 丟棄舊的構建 (保留7天,最大構建的最大數100)
2. 源碼管理 選擇git 如果我們需要從碼雲拉取代碼那麼我們需要把私鑰放到jenkins 公鑰放到碼雲上面去 這樣我們就可以拉取我們的代碼了
- 構建觸發器
- poll SCM(日常表 可以根據時間來判斷)
H/2 * * * * (2分鐘檢查一下版本庫 如果有更新就不觸發 如果沒有更新就不觸發)
注:Schedule的配置規則是有5個空格隔開的字符組成,從左到右分別代表:分 時 天 月 年。*代表所有,0 20 * * * 表示“在任何年任何月任何天20點0分”進行構建
- 構建
execute shell
cd django 項目目錄
python mange.py test 測試代碼
- 構建後的操作
選擇 email notifications
輸入你的郵箱 選中每次不穩定的構建都發送郵件
八、創建部署項目
創建一個新的job
itemname : master deploy
copyfrom : master-build 點擊ok
- 修改觸發器
Build after other projects are built (勾選這一項)
projects to watch (master_build) 當前一個動作構建成功後我才觸發
-
構建
cd testdjango BUILD_ID=DONTKILLME nohup python manage.py runserver 0.0.0.0:8000 &
BUILD_ID=DONTKILLME : 在jenkins裏面在後臺運行的程序都會被jenkins自動殺死 所以需要加上BUILDID這個參數 加了這個參數你的程序就不會被殺死
最後提交併構建!
一旦用pycharm修改項目,並push上去,jenkins就會每兩分鐘檢查一次是否改變,如果改變就會觸發構建!
創建一個job webhook鉤子 只要收到一個push請求 就會發送一個post的請求給jenkins
第一步 創建項目
創建任務 名字 master-build 自由代碼風格
- 丟棄舊的構建 (保留7天,最大構建的最大數100)
- 源碼管理 選擇git 如果我們需要從碼雲拉取代碼那麼我們需要把私鑰放到jenkins 公鑰放到碼雲上面去 這樣我們就可以拉取我們的代碼了
ssh-keygen -t rsa -C "[email protected]"
生成公鑰和私鑰
cat ~/.ssh/id_rsa.pub 發送給碼雲
cat ~/.ssh/id_rsa 寫入到jenkins
- 構建觸發器
poll SCM(日常表 可以根據時間來判斷)
H/2 * * * * (2分鐘檢查一下版本庫 如果有更新就不觸發 如果沒有更新就不觸發)
注:Schedule的配置規則是有5個空格隔開的字符組成,從左到右分別代表:分 時 天 月 年。*代表所有,0 20 * * * 表示“在任何年任何月任何天20點0分”進行構建 - 構建
execute shell
cd testdjango #進入項目所在的目錄
python mange.py test
- 構建後操作
選擇 email notifications
輸入你的郵箱 選中每次不穩定的構建都發送郵件
創建一個構建job
創建一個新的job
itemname : master deploy
copyfrom : master-build 點擊ok
其他都不需要改 只需要改2個地方
第一個地方
- 構建觸發器
Build after other projects are built (勾選這一項)
projects to watch (master_build) 當前一個動作構建成功後我才觸發
第二個地方
- 構建
cd testdjango
BUILD_ID=DONTKILLME nohup python manage.py runserver 0.0.0.0:8000 &
BUILD_ID=DONTKILLME : 在jenkins裏面在後臺運行的程序都會被jenkins自動殺死 所以需要加上BUILDID這個參數 加了這個參數你的程序就不會被殺死
linux升級python 由於django1.7之後的版本就不支持python2.6了 所有需要我們升級python2.6--python2.7
yum -y install zlib zlib-devel openssl openssl-devel sqlite-devel
#wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
#tar -jxvf Python-2.7.3.tar.bz2
#cd Python-2.7.3
#./configure --prefix=/usr/local/python2.7
#make
#make install
cd /usr/bin/
mv python python2.6.bak
ln -s /usr/local/python2.7/bin/python /usr/bin/python
---
install setuptools
wget https://pypi.python.org/packages/61/3c/8d680267eda244ad6391fb8b211bd39d8b527f3b66207976ef9f2f106230/setuptools-1.4.2.tar.gz
tar xvf setuptools-1.4.2.tar.gz
cd setuptools
python setup.py install
install pip
wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
tar xvf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install
ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
pip install django
免密碼登錄
$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //將文件拷貝至遠程服務器
$ cat ~/pub_key >>~/.ssh/authorized_keys //將內容追加到authorized_keys文件中, 不過要登錄遠程服務器來執行這條命令
cd /data/django11/testdjango
git pull
BUILD_ID=DONTKILLME nohup python manage.py runserver 0.0.0.0:8000 &
exit
ssh [email protected] 'bash -x -s' < /data/sh/startdj.sh
另外,如果是對自動化運維感興趣的朋友,可以加入羣:526929231,一起學習和討論哦~~