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 "tanzhou@qq.com"
生成公钥和私钥
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 root@172.16.147.21 'bash -x -s' < /data/sh/startdj.sh

另外,如果是对自动化运维感兴趣的朋友,可以加入群:526929231,一起学习和讨论哦~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,057评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    偏偏就是祢阅读 8,929评论 34 59
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    闲云清烟阅读 2,502评论 1 4
  • 童年是一首轻快的歌,是一朵永不凋谢的花。 01 小时候,女生和男生一起跳皮筋。男生不似女生灵活,但翻跟头是强项。 ...
    蓝雪梦儿阅读 1,583评论 2 2