2.jenkins docker自动部署python django项目(centos7)

1.目标:搭建(python、django)自动化部署的测试环境

  • 使用docker做为运行环境,docker镜像包括:
    • jenkins镜像(jenkin自动化构建工具);
    • mysql镜像(数据库);
    • aiqa_test镜像(系统);
  • 使用jenkin自动化构建及运行docker环境;
  • 原理:
    • jenkins定时获取svn上的最新代码;
    • 把代码直接发送到远程主机(python项目不需要构建及编译);
    • 运行运程主机上的shell脚本生成新的aiqa_test镜像并运行;
  • 环境
    • 本示例使用192.168.1.123做为部署服务器,有docker镜像及容器均运行在此服务器;
    • 本示例所有文件均存放到/root/docker/dev目录下,注意路径的问题;

2.生成镜像

2.1.jenkins镜像
  • jenkins(dockerfile)文件
# 系统镜像CentOS7
FROM daocloud.io/centos:latest

# 维护者
MAINTAINER Pings 275598139@qq.com

# 环境变量
ENV LANG en_US.UTF-8
# 设置时区
RUN ln -s -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 安装依赖
RUN yum install -y wget net-tools

# 安装JDK
RUN mkdir -p /opt/java/jdk
RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  -P /opt/java/jdk http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
RUN tar xzf /opt/java/jdk/jdk-8u181-linux-x64.tar.gz -C /opt/java/jdk && rm -rf /opt/java/jdk/jdk-8u181-linux-x64.tar.gz

# 安装tomcat
RUN mkdir -p /opt/java/tomcat
RUN wget -P /opt/java/tomcat http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.8/bin/apache-tomcat-8.5.8.tar.gz
RUN tar xzf /opt/java/tomcat/apache-tomcat-8.5.8.tar.gz -C /opt/java/tomcat && rm -rf /opt/java/tomcat/apache-tomcat-8.5.8.tar.gz

# 设置环境变量
ENV JAVA_HOME /opt/java/jdk/jdk1.8.0_181
ENV CATALINA_HOME /opt/java/tomcat/apache-tomcat-8.5.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

# 下载jenkins并部署到tomcat
RUN mkdir -p /opt/java/jenkins
RUN wget -P /opt/java/jenkins http://mirrors.jenkins.io/war/latest/jenkins.war
RUN cp /opt/java/jenkins/jenkins.war /opt/java/tomcat/apache-tomcat-8.5.8/webapps/

# 开启8080端口
EXPOSE 8080

# 启动tomcat服务器
CMD ["./opt/java/tomcat/apache-tomcat-8.5.8/bin/catalina.sh", "run"] && tail -f /opt/java/tomcat/apache-tomcat-8.5.8/logs/catalina.out 

# 运行命令
# docker build -t pings/jenkins -f jenkins .
# docker run -p 8080:8080 --name jenkins pings/jenkins
2.2.mysql镜像
  • mysql_utf8(dockerfile)文件
# 系统镜像mysql:5.7
FROM mysql:5.7

# 维护者
MAINTAINER Pings 275598139@qq.com

# 修改配置
COPY conf/mysql/my.cnf /etc/mysql/conf.d/my.cnf # my.cnf参见https://github.com/pingszi/MyDockerfile.git
RUN chmod 644 /etc/mysql/conf.d/my.cnf

# 设置时区
RUN ln -s -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 运行命令
# docker build -t pings/mysql_utf8 -f mysql_utf8 .
# docker run -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=mytools -p 3306:3306 --name master pings/mysql_utf8
2.3.aiqa_test镜像
  • aiqa_redis(dockerfile,项目测试模式运行环境)文件,运行比较耗时,先打好镜像,避免自动打包时重复进行耗时操作;
# 系统镜像CentOS7
FROM daocloud.io/centos:latest

# 维护者
MAINTAINER Pings 275598139@qq.com

# 环境变量
ENV LANG en_US.UTF-8
# 设置时区
RUN ln -s -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 安装依赖
RUN yum install -y wget net-tools gcc openssl-devel make mysql-devel

# 安装python3.5.4
WORKDIR /opt/python
RUN wget http://mirrors.sohu.com/python/3.5.4/Python-3.5.4.tgz
RUN tar zxvf Python-3.5.4.tgz
WORKDIR /opt/python/Python-3.5.4
RUN ./configure --prefix=/opt/python/Python-3.5.4 && make && make install
ENV PYTHON_HOME=/opt/python/Python-3.5.4
ENV PATH=$PATH:$PYTHON_HOME/bin
RUN rm -f /opt/python/Python-3.5.4.tgz

# 项目依赖
WORKDIR /opt/python/
ADD conf/requirements.txt requirements.txt # requirements.txt参见https://github.com/pingszi/MyDockerfile.git
RUN pip3 install -r requirements.txt

# redis
WORKDIR /opt/project
RUN wget http://download.redis.io/releases/redis-4.0.9.tar.gz
RUN tar zvxf redis-4.0.9.tar.gz
WORKDIR /opt/project/redis-4.0.9
RUN make
RUN rm -f /opt/project/redis-4.0.9.tar.gz
RUN sed -i 's/^bind 127.0.0.1$/bind 0.0.0.0/' /opt/project/redis-4.0.9/redis.conf

# 开启6379端口
EXPOSE 6379

# 运行命令
# docker build -t pings/aiqa_redis -f aiqa_redis .
  • aiqa_test(dockerfile)文件
# 系统镜像pings/aiqa_redis
FROM pings/aiqa_redis # 上一步生成的镜像

# 维护者
MAINTAINER Pings 275598139@qq.com

# 添加项目
COPY start_aiqa.sh /opt/project/dev/start_aiqa.sh
COPY AIQA /opt/project/dev/AIQA

# 启动
CMD bash /opt/project/dev/start_aiqa.sh # 见下一步操作

# 运行命令
# docker build -t pings/aiqa_test -f /root/docker/dev/aiqa_test /root/docker/dev/
# docker run -p 8000:8000 -p 6379:6379 --name aiqa_test pings/aiqa_test
- 注意:本镜像由jenkins编译并运行,所以docker build命令的文件需要绝对路径;

- start_aiqa.sh(容器启动命令)

/opt/project/redis-4.0.9/src/redis-server /opt/project/redis-4.0.9/redis.conf&
python3 /opt/project/dev/AIQA/manage.py runserver 0.0.0.0:8000

3.设置自动部署

3.1.安装jenkins相关插件
  • svn;
  • Publish over SSH(需在系统配置里进行配置);
3.2.配置jenkins
  • svn(参见上一篇);
  • 构建触发器(参见上一篇);
  • 构建
    • 选择send files or execute commnads over ssh(需配置Publish over SSH)
      配置项 | 配置值
      ssh server | 123服务器(远程服务器)
      source files | **/**(填写错误不会把代码发送到远程服务器)
      remove prefix |
      remote directory | /root/docker/dev/AIQA(远程服务器存在代码的路径)
      exec command | BUILD_ID=DONTKILLME bash /root/docker/dev/start_aiqa_test.sh(运行远程服务器shell脚本)
  • 其它配置项全不填写;
3.3.start_aiqa_test.sh
  • 作用:把jenkin定时从svn获取的代码打包成新的pings/aiqa_test镜像并运行
docker stop aiqa_test
docker rm aiqa_test
docker rmi pings/aiqa_test
docker build -t pings/aiqa_test -f /root/docker/dev/aiqa_test /root/docker/dev/
docker run -p 8000:8000 -p 6379:6379 --name aiqa_test pings/aiqa_test

4.源码

https://github.com/pingszi/MyDockerfile.git

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值