Jenkins集成Django


前言

将Django集成到Jenkins,Djaong和Jenkins都部署在Docker中

一、Jenkins配置

1、创建项目

  1. 新建Item
  2. 选择Freestyle project(自由风格)

2、配置

  1. 源码管理
    操作:我使用的码云,直接填上码云地址,再新建Credentials选中即可。
  2. 构建触发器
    我勾选的Poll SCM,填的*/1 * * * *。这样每分钟就去检测,如果代码有提交就会构建

3、构建环境

4、构建

  1. 新增步骤,选择一类
    操作:我选择的是:Send files or execute commands over SSH
  2. SSH Server
    操作:需要提前创建好,这里选中就行
    详细:Manage Jenkins => System Configuration => Publish over SSH(需要先安装这个插件)
  3. Exec command
docker exec -i 550633944f8f bash /home/start.sh
exit 0

备注1:参数是-i不是-it,使用-t会报错
备注2:/home/start.sh是容器中的文件(我是将目录挂载到了服务器)

二、Shell脚本

1、Start.sh脚本

#!/bin/bash
cd /home
#uwsgi --stop uwsgi.pid #停止服务,实际运行的时候,会一次失败,一次成功,具体原因还没搞明白
ps -ef | grep uwsgi.ini | grep -v grep | awk '{print $2}' | head -n 1 | xargs kill -9 #杀掉进程
uwsgi --ini uwsgi.ini #重启服务
exit #一定要加上,不然服务启动不了

2、更新文件

  1. ssh命令
\cp -rf /home/jenkins/workspace/TeamPlayAdmin/PageInfo/* /root/Django/TeamPlayAdmin/PageInfo
docker exec -i 550633944f8f bash /home/start.sh
exit 0

第一句就是就用将Jenkins获取到的文件覆盖容器中的文件,来达到更新的效果。我Jenkins和Django项目都挂载了本地目录。/home/jenkins是jenkins挂载的本地目录;/root/Django/TeamPlayAdmin是Django项目挂载的本地目录。

  1. 备注
    如果需要复制复制多个文件或者整个项目复制,直接批量修改第一句命令即可

3、待完善

  1. 备份之前文件在进行复制
  2. 关闭uwsgi进程命令可以优化。参考链接

三、总结

1、我做了一件什么事?

  1. 在Docker中,将Django集成到了Jenkins中

2、这件事有什么用?

  1. 在开发过程中,我代码提交后,能直接部署(当前我是测试环境),省略了发布这一个过程。加快了开发效率。

3、出现了哪些问题?是否解决?是否明确了问题出现的根本原因?

  1. 不熟悉Jenkins,不熟悉Jenkins继承Django。对Jenkins集成心中没有数。经过这次操作,有了初步的了解。
  2. 之前使用docker exec -ti ContainerId进入到容器中。在Jenkins中执行命令时,不然使用-t参数,不然会报错。-t参数具体的意义还没详细去看。
  3. 在使用【uwsgi --stop uwsgi.pid】命令停止服务时,每隔一次构建会出现一次失败,具体原因未知。解决方法是将停止服务命令改为【ps -ef | grep uwsgi | grep uwsgi.ini | awk ‘{print $2}’ | head -n 1 | xargs kill -9】

4、学到了哪些知识点?

  1. Jenkins集成服务的思路。比如Jenkins集成Django,流程是 ①Jenkins获取新代码 ②将新代码覆盖旧代码(Jenkins和Django目录都在同一个服务器上) ③进入到Django容器中,重启服务
  2. 类推Jenkins集成.NetCore服务的思路。①Jenkins获取最新代码 ②覆盖.NetCore项目代码 ③进入到.NetCore容器中编译项目 ④更新编译后文件 ⑤重启容器
  3. 总结Jenkins集成其他服务:Jenkins负责获取最新代码,其他服务容器负责编译(.NetCore项目),重启(Django)等。于特定相关的操作,放到相应的容器中进行操作。不在Jenkins容器中操作,Jenkins负责发送命令。
  4. cp命令前加\,即\cp,意思是不用linux默认引用的。
  5. 杀掉ps命令显示的第一个pid:ps -ef | grep uwsgi | grep uwsgi.ini | awk ‘{print $2}’ | head -n 1 | xargs kill -9
  6. docker命令执行shell脚本:docker exec -i 550633944f8f bash /home/start.sh。最后的start.sh是个shell脚本,指向docker容器中的目录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值