zoukankan      html  css  js  c++  java
  • 基于git maven的自动构建系统系列二

    这篇文章的主要目的是记录使用python来编写公司发版系统的想法、过程。

    一、构思

    主要特征

    该系统拥有web界面
    代码发布功能:可以在web中实现各个webent单独发布、整体发布
    git历史查看功能:查看git提交历史、查看每次提交修改文件。所以需要定时自动更新日志。
    两次发布版本差异对比功能

    实践能力

    一个python的web框架
    python调度操作git、maven、执行脚本
    python写入和读取数据库
    python/git版本对比

    二、计划

    1、寻找一款python的web框架。定为django。
    2、学习并实践该框架
    3、设计系统的MVC
    4、各个功能编码实现和测试

    三、执行

    django的安装

    安装的方法丰富多彩,很简单。参考github上django/django
    或者参考官方网站的安装办法。

    django的学习

    主要参考官网的翻译资料:http://python.usyiyi.cn/translate/django_182/index.html
    这里从文章发出到现在(2017/1/8),持续有40多天,期间断断续续的看,断断续续的边学边练习里面的例子。插播了很多其他事情,尤其是一些无聊的手机游戏,双休要跟老婆见面,时间蛮少了,坚持下来确实有点苦难,还好基础看完了。继续加油!下面硬着头皮继续下一个阶段的学习实践。

    发版系统的原型

    1. 拉去分支的代码;分支是人工切换的,自动执行发布脚本去获取分支,并执行拉取动作。
    2. 使用maven的编译命令,按制定参数编译代码;其中分为基础的依赖包先编译,再编译各个独立的webent。每个webent独立不互相影响,都必须有依赖包。需要一个表来管理各个webent名,管理基础包(随着代码扩充还会新增)。webents。还需要一个表来管理发版的参数。
    3. 编译完成后,shell代码要将编译结果发布到tomcat容器中,容器路径在server.xml中配置了。其实这个地方理论上来将是没有必要的,个人认为,编译阶段就可以定义好编译的路径。研究下maven,把现在的shell流程简化。参考:http://blog.csdn.net/rj042/article/details/6834557。后发现pom.xml修改会影响研发的windows下编译发布路径,维持现状。
    4. 代码放到tomcat的容器后,就是重启tomcat。也就是能够启动tomcat的操作。
    5. 每个webent都有自己定义log级别(log4j)的配置文件,默认情况下是info级别,但是研发有需求(实际上经常让我vi命令去该配置,然后查看日志,报错再给它们,影响了我的生产力),变更日志级别,滚动查看tomcat日志。
    6. 打包发版的压缩包。直接使用测试tomcat的代码,替换配置文件打包。

    编码阶段

    准备工作

    在我的django工程目录下新建自己的网站:

    #新建项目
    django-admin startproject mydemo
    #新建网站
    cd mydemo
    python3.5 manage.py startapp gitlog

    执行完
    chaosbom@chaosbomPC:~/PycharmProjects/mydemo$ tree
    .
    ├── gitlog
    │ ├── admin.py
    │ ├── apps.py
    │ ├── init.py
    │ ├── migrations
    │ │ └── init.py
    │ ├── models.py
    │ ├── tests.py
    │ └── views.py
    ├── manage.py
    └── mydemo
    ├── init.py
    ├── pycache
    │ ├── init.cpython-35.pyc
    │ └── settings.cpython-35.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

    模型化

    编辑gitlog/model.py

    from django.db import models
    # Create your models here.
    
    #maven编译使用的配置表
    class Profiles(models.Model):
        P= models.CharField(max_length=20)
        add_date = models.DateTimeField('date published')
    
    
    #管理webents的表,记录webent上次发版的时间以及上次发版使用的配置
    class Webents(models.Model):
        name= models.CharField(max_length=50)
        lastPubStatus=models.ForeignKey(Profiles,default=1)
        lastPubDate=models.DateTimeField('date published')
        add_date = models.DateTimeField('date published')
    
    
    #author提交人,message提交备注,commitsFile修改文件,git提交的nvalue唯一号
    class Commits(models.Model):
        author= models.CharField(max_length=20)
        message = models.CharField(max_length=200)
        commitsFile = models.CharField(max_length=2000)
        nvalue=models.CharField(max_length=2000)
        commit_date = models.DateTimeField()
    

    编辑mydemo/settings.py:该Django 项目的设置/配置。至于它如何运作的,此处略。仅修改以下对应内容。

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'gitlog',
    ]
    
    DATABASES = {
        # 'default': {
        #     'ENGINE': 'django.db.backends.sqlite3',
        #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        # }
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '你的mysql数据库名称',
            'USER': 'root',
            'PASSWORD': '你的密码',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }

    接着让模型自动在数据库中生成表:

    python3.5 manage.py check
    python3.5 manage.py makemigrations gitlog
    python3.5 manage.py migrate
    

    登陆数据库查看,已经能够看到模型对应的数据库。

    初始化数据库:
    使用python的脚本来更新。

    from __future__ import print_function
    from datetime import date, datetime, timedelta
    import mysql.connector
    
    cnx = mysql.connector.connect(user='root',password='yb198697', database='gitlog')
    cursor = cnx.cursor()
    
    tomorrow = datetime.now().date() + timedelta(days=1)
    today=datetime.now().date()+ timedelta(days=0)
    
    profiles=['product','st' ,'stKa' ,'st-https' ,'nowx']
    add_profile=("INSERT INTO gitlog_profiles "
                   "(P, add_date) "
                   "VALUES (%s, %s)")
    
    for profile in profiles:
        data_profiles=(profile, today)
        cursor.execute(add_profile,data_profiles)
    
    
    webents=['mk-aggregator' ,'mk-img-webent' ,'mk-wm-msger' ,'mk-app-webent' ,'mk-job-webent' ,'mk-openApi' ,'mk-wm-webent' ,
             'mk-yum-webent' ,'mk-imgr-webent' ,'mk-passport' ,'mk-sn-webent' ,'mk-intf-webent' ,'mk-imgr-rpc' ,'mk-yum-rpc' ,
             'mk-mdata-rpc']
    add_webent=("INSERT INTO gitlog_webents "
                   "(name, lastPubStatus_id,lastPubDate,add_date) "
                   "VALUES (%s, %s, %s, %s)")
    
    
    for webent in webents:
        data_webents=(webent,37, tomorrow,tomorrow)
        cursor.execute(add_webent,data_webents)
    
    
    # Make sure data is committed to the database
    cnx.commit()
    
    cursor.close()
    cnx.close()
  • 相关阅读:
    jfinal使用配置文件注意事情
    在项目中集成jetty server
    JFinal快速上手及注意事项
    表单处理的方案与注意事项(servlet)
    java四大会话技术
    servlet过滤器简化版
    python 生成器
    python 深复制和浅复制
    python 获取路径
    python selenium定位总结(转)
  • 原文地址:https://www.cnblogs.com/windanchaos/p/6398811.html
Copyright © 2011-2022 走看看