• Django实现自动发布(5完善功能)


    之前的安装一个服务只是记录了服务的可执行文件,实际上初次安装还需要将相关的配置文件下发到目标主机。

    页面实现一个选择配置修订号的入口,默认选中服务的默认配置,如下图:

    基于 layui 可以这样实现:

    function renderSelectConf(){
       // 渲染配置版本下拉框
       var list = [];
       var options = '<option value="">选择1条记录</option>';
       {% for rev in microserviceversion.microservice.confrevision_set.all %}
         {% if rev.is_default  %}
           list.push('<option value="{{ rev.id }}" selected>{{ rev.revision }}: {{ rev.description }}</option>');
         {% else %}
           list.push('<option value="{{ rev.id }}">{{ rev.revision }}: {{ rev.description }}</option>');
         {% endif %}
       {% endfor %}
       options += list.join('');
       $('#service-install-form-conf').empty().append(options);
     }
    

    表单提交后,后端也要进行相关校验:

    • 若修订号id存在,则使用些修订号
    • 若修订号不存在,则使用默认配置
    • 若默认配置不存在,则报错,提示用户创建配置文件

    相应的校验代码:

    # class VersionInstallApi(generic.View):
        # def post(self, request, service_id, pk):
            revision_id = request.POST.get('revision', '').strip()
            # ...
    
            if revision_id:
                try:
                    revision = ConfRevision.objects.get(pk=revision_id)
                except ConfRevision.DoesNotExist:
                    revision_id = None
    
            # revision_id 为空时  查找默认配置
            if not revision_id:
                try:
                    revision = ConfRevision.objects.get(service=service, is_default=True)
                except ConfRevision.DoesNotExist:
                    return JsonResponse({'msg': '请先创建配置文件'}, status=417)
            
            # ...
    

    这样安装一个服务算是完成了。

    发布操作记录

    假如某个白天升级了多个服务,晚上的时候线上业务出现问题,这时候为了方便快速回退,就要知道当天变更了哪些服务,因此需要记录每次发布的操作类型、对应的服务、相关的操作人、创建时间、执行记录等等,做到对发布操作有迹可循。相关的模型如下:

    class DeployRecord(models.Model):
    
        DEPLOY_TYPE = (
            ('install', 'install'),
            ('upgrade', 'upgrade'),
            ('revert', 'revert'),
            ('delete', 'delete'),
        )
    
        deploy_type = models.CharField(max_length=16, verbose_name="发布类型", choices=DEPLOY_TYPE, default='install')
        duration = models.PositiveSmallIntegerField(blank=True, null=True)
        description = models.CharField(max_length=128, null=True, blank=True, verbose_name='描述')
        created_at = models.DateTimeField(auto_now_add=True)
        finished_at = models.DateTimeField(blank=True, null=True)
        user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING)
        raw_log = models.TextField(null=True, blank=True, help_text ="任务执行日志")
        task_id = models.CharField(max_length=64, help_text='任务id')
        service = models.ForeignKey(MicroService, on_delete=models.DO_NOTHING)
    

    然后在每次任务执行前,往该表插一条记录,任务完成后,再更新记录的完成时间和执行时长。

    服务的全部实例

    服务列表那里最好有个直观的显示该服务已经部署了哪些实例,方便我们查看,因此可以把每个服务的实例数列出来,再做一个链接,点击即可打开新的窗口显示服务的实例详情,如下图:

    一个简单的发布系统就完成了。

    相关的 代码

  • 相关阅读:
    微擎使用函数获取用户微信信息
    xshell连接不上linux情况一
    destoon手机端分页
    kvm安装win2012
    kvm安装ubuntu
    KVM的磁盘管理相关
    ubuntu的iptables
    kvm安装win2003
    Centos-6.4 安装mysql-5.5.14
    CentOS 6.4安装bind-9.8.2最新版(DNS服务器)
  • 原文地址:https://www.cnblogs.com/wbjxxzx/p/12149357.html
Copyright © 2020-2023  润新知