Jenkins+Python部署完整版

一, 簡介

一般網站部署的流程 這邊是完整流程而不是簡化的流程
需求分析—原型設計—開發代碼—內網部署-提交測試—確認上線—備份數據—外網更新-最終測試,如果發現外網部署的代碼有異常,需要及時回滾
一般是運維來做 功能測試 上線的時間 jenkins 運維 功能測試

部署流程

我們可以通過jenkins工具平臺實現全自動部署+測試,是一個可擴展的持續集成引擎,是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。Jenkins非常易於安裝和配置,簡單易用
簡單來說方便如下人員:

  1. 開發人員:寫好代碼,不需要自己進行源碼編譯、打包等工作,直接將代碼分支存放在SVN、GIT倉庫即可。 war 源碼多 自動把代碼放到服務器上面
  2. 運維人員:減輕人工干預的錯誤率,ansible 一鍵完成了 同時解放運維人員繁雜的上傳代碼、手動備份、更新
  3. 測試人員:可以通過jenkins進行簡單的代碼及網站測試
  • 持續集成的意義(總結 提升工作效率)
  1. 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間、費用和工作量
  2. 持續集成保障了每個時間點上團隊成員提交的代碼是能成功集成的。換言之,任何時間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能
  3. 持續集成還能利於軟件本身的發展趨勢,這點在需求不明確或是頻繁性變更的情景中尤其重要,持續集成的質量能幫助團隊進行有效決策,同時建立團隊對開發產品的信心

持續集成的組件

  1. 一個自動構建過程,包括自動編譯、分發、部署和測試
  2. 一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作爲構建過程的素材庫,例如SVN、GIT代碼庫
  3. 一個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個插件

  1. git plugin
  2. python plugin
  3. 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 自由代碼風格

  1. 丟棄舊的構建 (保留7天,最大構建的最大數100)
  2. 源碼管理 選擇git 如果我們需要從碼雲拉取代碼那麼我們需要把私鑰放到jenkins 公鑰放到碼雲上面去 這樣我們就可以拉取我們的代碼了
ssh-keygen -t rsa -C "[email protected]"
生成公鑰和私鑰
cat ~/.ssh/id_rsa.pub    發送給碼雲
cat ~/.ssh/id_rsa        寫入到jenkins
  1. 構建觸發器
    poll SCM(日常表 可以根據時間來判斷)
    H/2 * * * * (2分鐘檢查一下版本庫 如果有更新就不觸發 如果沒有更新就不觸發)
    注:Schedule的配置規則是有5個空格隔開的字符組成,從左到右分別代表:分 時 天 月 年。*代表所有,0 20 * * * 表示“在任何年任何月任何天20點0分”進行構建
  2. 構建
    execute shell
cd testdjango  #進入項目所在的目錄
python mange.py test
  1. 構建後操作
    選擇 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,一起學習和討論哦~~


發佈了124 篇原創文章 · 獲贊 75 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章