• 测试平台使用git+Jenkins进行持续集成


    一,对持续集成的思考

    1,Jenkins,
    2,git,

    我的测试平台分成三个部分,
    1,框架,AutotestFramework
    2,前端,VueClient
    3,后端,FlaskServer
    config.ini ---这个比较特别,

    我本来是想要把这些合并成为一个Jenkins项目进行持续集成,
    后来还是决定分为三个子项目,框架,前端,后端,

    因为使用一个项目拉取代码可能会有点问题,
    所以分开部署,分开拉取,

    二,先后端持续集成

    1,git管理,
    2,Jenkins上传,
    3,发布

    后端git管理
    1,在gilab新建项目,注意新建的时候选择公开项目,否则需要管理员给你加用户才会有push权限,
    2,git init 在项目根路径下初始化一下,就是这个目录被管理起来了,
    3,git remote add origin ssh://git@81.70.194.130:32222/liqian/FlaskServer.git 添加一个origin
    3,git status 看看会有哪些文件被管理起来了
    4,添加.gitignore文件,忽略一些文件,
    5,git branch dev 创建一个dev分支,
    6,git add . add一下
    7,git commit -m ' first ' commit 一下
    8,git push origin dev 推送到远程仓库
    9,git pull origin dev 拉取代码,

    这样就搞定了,

    #######
    Jenkins的配置,

    cd /home/crs-dev/.virtualenvs
    pwd
    . qzautotest/bin/activate
    which python
    PIDS=`ps -ef | grep gunicorn |grep -v grep | awk '{print $2}' | head -1`
    if [ "$PIDS" != "" ]; then
    kill -9 $PIDS
    fi
    cd /root/.jenkins/workspace/FlaskServer
    BUILD_ID=
    gunicorn manager:app -c gunicorn.conf.py -D
    exit
    
    

    这个阶段遇到的问题,
    1,git仓库建立的问题,不能往上push代码,所以要建立一个公开的仓库,比较方便,不然会有权限问题,还有git添加忽略文件这样的小问题
    2,gunicorn多个work和apscheduler会有问题,多个work,apschedul就会执行不生效,---这个还需要找找原因,但是放到后面
    3,如果Jenkins进入Python虚拟环境的问题,也是解决的一个很有价值的问题,
    4,当然还有之前的Nginx的部署的问题,权限问题,

    三,部署框架,

    1,git,和上面一样,
    2,Jenkins部署

    pwd
    cd /home/crs-dev/.virtualenvs
    . qzautotest/bin/activate
    pwd
    cd  /home/crs-dev/.virtualenvs/qzautotest/bin/
    pwd
    PIDS_MAIN=`ps -ef|grep AutotestFramework/test_run/main.py|grep -v grep|cut -c 9-15`
    if [ "$PIDS_MAIN" != "" ]; then
    ps -ef|grep AutotestFramework/test_run/main.py|grep -v grep|cut -c 9-15|xargs kill -9
    fi
    BUILD_ID=dontKillMe
    nohup ./python /root/.jenkins/workspace/AutotestFramework/test_run/main.py > /root/.jenkins/workspace/AutotestFramework/test_run/main.out 2>&1 &
    
    PIDS_RUN=`ps -ef|grep AutotestFramework/test_run/run.py|grep -v grep|cut -c 9-15`
    if [ "$PIDS_RUN" != "" ]; then
    ps -ef|grep AutotestFramework/test_run/run.py|grep -v grep|cut -c 9-15|xargs kill -9
    fi
    BUILD_ID=dontKillMe
    nohup ./python /root/.jenkins/workspace/AutotestFramework/test_run/run.py > /root/.jenkins/workspace/AutotestFramework/test_run/run.out 2>&1 &
    
    

    遇到的问题,
    1,Jenkins执行nohup命令的时候,会不生效的问题,这是解决的一个有价值的问题,

    四,部署前端

    我之前是放到这个路径了:/export/jenkins/workspace/dist
    nginx的放到这里:/usr/local/nginx/conf/nginx.conf,,,,,具体在这里:include /usr/local/nginx/conf/vhosts/*.conf,,,,,我的配置:qzautotest.conf
    我自己的代码,放到这个下面了,/home/www/dist;,其实可以放到,
    生产上面的都是有一个同步的过程,先到这里: REMOTE_DIR="/export/webroot/jenkins_code/",,然后到这里,WEBROOT_DIR="/export/webroot",,然后进行备份:BACKUP_DIR="/export/webroot/code_backup/$JOB_NAME"

    #远程服务器同步代码tar包路径
    REMOTE_DIR="/export/webroot/jenkins_code/"
    #远程服务器存放job代码路径,以当前job名字命名
    JOB_DIR="/export/webroot/jenkins_code/$JOB_NAME/"
    #远程服务器网站根目录
    WEBROOT_DIR="/export/webroot"
    #网站代码备份路径
    BACKUP_DIR="/export/webroot/code_backup/$JOB_NAME"
    #获取时间
    DATE=`date +%Y%m%d-%H%M`
    
    #判断job_dir是否存在
      if [ -d $JOB_DIR ];then
        echo "The directory is already exists!!!"
      else 
        mkdir -p $JOB_DIR
      fi
    
    #判断backup_dir是否存在
      if [ -d $BACKUP_DIR ];then
        echo "The directory is already exists!!!"
      else 
        mkdir -p $BACKUP_DIR
      fi
    
    #同步新版本代码之前打包备份上一版本代码
    cd $WEBROOT_DIR
    tar -czf $BACKUP_DIR/$JOB_NAME-$DATE.tar.gz $JOB_NAME
    #解压新版本代码包
    cd $REMOTE_DIR
    tar -zxf $JOB_NAME-$BUILD_NUMBER.tar.gz -C $JOB_DIR
    #同步新版本代码到网站根目录
    rsync -az --delete $JOB_DIR $WEBROOT_DIR/$JOB_NAME
    #删除tar包
    rm -rf $JOB_NAME-$BUILD_NUMBER.tar.gz
    #删除
    rm -rf $JOB_DIR/*
    #保留最近7次的网站代码备份
    cd $BACKUP_DIR
    ls -lt|awk 'NR>7{print $NF}'|xargs rm -rf
    
    

    我自己的方案
    方案1:
    1,把代码上传到git
    2,然后npm配置之后,执行打包,npm run build:prod
    3,然后放到我的/home/www/路径
    4,然后chmod -R 777 dist,赋权限
    实际执行之后,发现让Jenkins执行npm打包还是有问题的,需要按照配置npm相关的东西,就先不管了,

    方案2,
    1,本地执行打包,npm run build:prod
    2,把代码上传到git
    3,然后放到我的/home/www/路径
    4,然后chmod -R 777 dist,赋权限
    这样简单一些,

    这样整个的部署就完成了,这样就迈出了一大步,就是持续集成的问题,
    这样我就形成了了一个完整的持续集成的系统,

  • 相关阅读:
    Two Sum
    Binary Tree Preorder Traversal *
    Rotate Array
    Repeated DNA Sequences
    Symmetric Tree
    Path Sum
    Python初学——多线程Threading
    Python初学——窗口视窗Tkinter
    pyinstaller打包多个py文件和去除cmd黑框
    python获取当前路径
  • 原文地址:https://www.cnblogs.com/andy0816/p/16481148.html
Copyright © 2020-2023  润新知