wbjxxzx

前面做好了服务的管理,接下来是服务版本的管理,和服务类似,版本也有增删改查。先在服务的管理页面做一个入口,如下图:

需要在上一步的服务管理页面增加按钮、按钮方法,点击按钮跳转时要打开一个新的页面,所以还要增加对应的页面视图。

页面方法

templates/microservice/service.html 的标签<script type="text/html" id="barDemo">后面 增加内容

  <a class="layui-btn layui-btn-xs " lay-event="version">版本管理</a>

相应的点击方法也加到工具条事件:

if (layEvent === \'version\') {
  handleShowVersion(obj);
}

function handleShowVersion(obj){
  var url = \'{% url "page_service_versions" 0 %}\';
  url = url.replace(\'0\', obj.data.id);
  layer.open({
    type: 2, // 0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    content: url,    // 设置跳转的url,跳转到对应的页面
    area: ["80%", "100%"],
    shadeClose: true, // 点击弹出层的shade可关闭弹出层
  })
}

页面视图

增加一个文件 templates/microservice/version.html

class ServiceVersionPageView(generic.DetailView):
    template_name = \'microservice/version.html\'
    model = MicroService
    pk_url_kwarg = \'service_id\'

以及页面视图对应的url:

  url(r\'^service/(?P<service_id>[0-9]+)/versions/$\', views.ServiceVersionPageView.as_view(), name=\'page_service_versions\'),

点击页面按钮即可弹出一个新的窗口,不过目前的页面没有内容,现在就把版本管理添加到页面。

版本管理

查询

版本的查询和服务类似,就直接贴代码了:

class ServiceVersionApi(generic.View):
    def get(self, request, service_id):
        query = request.GET
        page = query.get(\'page\', 1)
        limit = query.get(\'limit\', 20)

        try:
            service = MicroService.objects.get(pk=service_id)
        except MicroService.DoesNotExist:
            return JsonResponse({\'msg\': \'资源不存在\', status=404)

        versions = MicroServiceVersion.objects.filter(microservice=service)
        paginator = Paginator(versions, limit)
        pdata = paginator.page(page)
        data = [{
            \'id\': item.id,
            \'name\': item.microservice.name,
            \'language\': item.microservice.language,
            \'description\': item.description,
            \'version\': item.version,
            \'status\': item.get_status_display(),
            \'created_by\': item.created_by.username,
            \'created\': item.created,
        } for item in pdata]

        return JsonResponse({
          \'data\': data,
          \'count\': versions.count(),
          \'code\': 0,
        })

相应的url:

url(r\'^microservice/(?P<service_id>[0-9]+)/versions/$\', views.ServiceVersionApi.as_view(),
        name=\'api_microservice_versions\'),

创建

由于我们是通过git来创建版本,所以版本的创建是在后台完成,我们也可以在页面触发构建任务来创建版本
页面触发时,我们唯一要填的参数就是分支,不填则默认master

这里有个小技巧: 先创建一个版本号为当前时间戳的版本,传递给任务作为参数,在收到回调后更新任务状态和版本号

    def post(self, request, service_id):
        ref = request.POST.get(\'branch\', \'master\').strip()
        desc = request.POST.get(\'description\', \'\').strip()
        try:
            service = MicroService.objects.get(pk=service_id)
        except MicroService.DoesNotExist:
            return JsonResponse({\'msg\': \'资源不存在\'}, status=404)

        version = MicroServiceVersion.objects.create(
            microservice=service,
            version=\'building-\' + str(time.time()), # 当前时间戳
            created_by=request.user,
            description=desc,
            ref=ref
        )

        build_params = {
            \'variables[SERVICE_ID]\': service.id,
            \'variables[VERSION_ID]\': version.id,
            \'variables[SERVICE_NAME]\': service.name,
            \'variables[USERNAME]\': request.user.username,
        }
        try:
            r = requests.post(service.build_url, data=build_params, timeout=10)
        except requests.exceptions.Timeout:
            return JsonResponse({\'msg\': \'调用git 超时\'}, status=417)

        if r.status_code >= 200 and r.status_code < 300:
            rdata = r.json()
            return JsonResponse(rdata, status=200)
        return JsonResponse({\'msg\': \'创建任务失败{}\'.format(r.content)})

相关的页面和js代码比较多,放到 这里

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-07-03
  • 2021-08-11
  • 2021-10-26
  • 2021-08-09
  • 2021-06-14
  • 2022-02-25
  • 2021-10-22
猜你喜欢
  • 2021-12-11
  • 2021-07-29
  • 2022-02-09
  • 2021-12-29
  • 2022-02-07
  • 2022-12-23
  • 2021-09-04
相关资源
相似解决方案