测试平台使用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,赋权限
这样简单一些,

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

posted @ 2022-07-15 13:58  技术改变命运Andy  阅读(257)  评论(0编辑  收藏  举报