一般网站部署的流程 这边是完整流程而不是简化的流程 需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚 一般是运维来做 功能测试 上线的时间 jenkins 运维 功能测试
我们可以通过 jenkins 工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins 非常易于安装和配置,简单易用 简单来说方便如下人员:
由于 jenkins 是使用 java 代码开发的,所以我们需要安装 java 容器才能运行 jenkins,又因为 java 的 web 服务器用的是 tomcat,所以我们要安装 JDK+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
[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
由于 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
安装 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
[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
[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 个插件
七、创建项目
第一步 创建项目
创建任务 名字 master-build 自由代码风格
1. 丢弃旧的构建 (保留 7 天,最大构建的最大数 100)
2. 源码管理 选择 git 如果我们需要从码云拉取代码那么我们需要把私钥放到 jenkins 公钥放到码云上面去 这样我们就可以拉取我们的代码了
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 就会每两分钟检查一次是否改变,如果改变就会触发构建!
第一步 创建项目 创建任务 名字 master-build 自由代码风格
ssh-keygen -t rsa -C "[email protected]"
生成公钥和私钥
cat ~/.ssh/id_rsa.pub 发送给码云
cat ~/.ssh/id_rsa 写入到 jenkins
cd testdjango #进入项目所在的目录
python mange.py test
其他都不需要改 只需要改 2 个地方
cd testdjango
BUILD_ID=DONTKILLME nohup python manage.py runserver 0.0.0.0:8000 &
BUILD_ID=DONTKILLME : 在 jenkins 里面在后台运行的程序都会被 jenkins 自动杀死 所以需要加上 BUILDID 这个参数 加了这个参数你的程序就不会被杀死
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,一起学习和讨论哦~~
1
louzhumuyou 2017-08-12 15:45:15 +08:00 1
其实不需要这么复杂,Jenkins 有一个 github 或者 gerrit 触发的钩子,只要你的 django 实现一个 api,每次代码更新到 github 或者 gerrit 触发,由 Jenkins 捕获以后,发一个请求告诉 django,然后 django 自动执行 git pull,代码就自动更新了,最后 django 通过 supervisord 启动服务,里面可以设置代码更新,服务重启。这样就 OK 了。
|
2
plantparknet 2017-08-12 18:25:39 +08:00
@louzhumuyou supervisord 针对 python3 的版本呢?貌似正式版还没出来。搜到一种方案 https://github.com/olipo186/Git-Auto-Deploy。不知你所述方式大概的当机时间会有多长?此外,针对某个 Test Case 无法测试通过时,或出现错误,如何回滚到上一版本呢
|
3
janxin 2017-08-12 20:09:34 +08:00
我只想问问你们 Jenkins 装的时候怎么翻墙的啊,我插件就是装不好
|
4
ycz0926 2017-08-12 22:48:06 +08:00
借帖分享下我的博客代码:
第一个博客,博客端使用的 flask 框架,没有使用 sqlalchemy,使用的是一个 ActiveRecord 模式的 orm [orator]( https://github.com/sdispater/orator),目前所知道的,这应当是 python 语言中对 ActiveRecord 模式实现的比较好的一个 orm。博客的管理后台则是基于 AdminLTE,提供了博客列表,发布博客等功能。 github 地址:[flask-blog]( https://github.com/ycz0926/flask-blog) 第二个博客,是目前使用的([blog.ycz0926.site]( http://blog.ycz0926.site)),后端基于 django,前端使用的是 bootstrap 主题。 github 地址:[mysite]( https://github.com/ycz0926/mysite) 两个博客都使用的 nginx+uwsgi+python 架构,欢迎吐槽 bug 和 star。 |
5
rashawn 2017-08-13 05:53:11 +08:00 via iPhone
不能自动需求分析也好意思说完整流程?
|
6
louzhumuyou 2017-08-13 18:56:55 +08:00
@plantparknet 回滚版本,这个我还真没考虑过,我只是支撑 30 人左右的研发队伍的小服务。这个我考虑不完善,抱歉。
|
7
plantparknet 2017-08-13 22:23:18 +08:00
@louzhumuyou 我了解到的可以通过 soft link 实现,仅当 Test Case 完整通过或达到某一设定比利时,将最新版的所在地址 soft link 到 www,具体细节也在找资料学习中。
其实你评论中提到的的方法,应该不需要用到 Jenkins 吧,只需要 Django 做个 hook 接收来自 Git 的消息。此外不知这个过程是否有自动测试呢?使用到的库或者相关细节可有文章介绍呢,多谢~~ |