- Добавлена колонка 'Тип' во все таблицы истории сборок - Для push операций отображается registry вместо платформ - Сохранение пользователя при создании push лога - Исправлена ошибка с logger в push_docker_image endpoint - Улучшено отображение истории сборок с визуальными индикаторами
187 lines
8.8 KiB
HTML
187 lines
8.8 KiB
HTML
{% extends "base.html" %}
|
||
|
||
{% block title %}Dockerfile: {{ dockerfile.name }} - DevOpsLab{% endblock %}
|
||
{% block page_title %}Dockerfile: {{ dockerfile.name }}{% endblock %}
|
||
|
||
{% block header_actions %}
|
||
<div class="d-flex flex-wrap gap-2">
|
||
<a href="/dockerfiles/{{ dockerfile.id }}/edit" class="btn btn-primary btn-sm">
|
||
<i class="fas fa-edit me-2"></i>
|
||
Редактировать
|
||
</a>
|
||
<a href="/dockerfiles" class="btn btn-secondary btn-sm">
|
||
<i class="fas fa-arrow-left me-2"></i>
|
||
Назад
|
||
</a>
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block content %}
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<div class="card mb-3">
|
||
<div class="card-header">
|
||
<h5 class="mb-0">Информация</h5>
|
||
</div>
|
||
<div class="card-body">
|
||
{% if dockerfile.description %}
|
||
<p class="mb-3">{{ dockerfile.description }}</p>
|
||
{% endif %}
|
||
|
||
{% if dockerfile.base_image %}
|
||
<div class="mb-2">
|
||
<strong>Базовый образ:</strong> {{ dockerfile.base_image }}
|
||
</div>
|
||
{% endif %}
|
||
|
||
{% if dockerfile.tags %}
|
||
<div class="mb-2">
|
||
<strong>Теги:</strong>
|
||
{% for tag in dockerfile.tags %}
|
||
<span class="badge bg-info me-1">{{ tag }}</span>
|
||
{% endfor %}
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="mb-2">
|
||
<strong>Статус:</strong>
|
||
<span class="badge {% if dockerfile.status == 'active' %}bg-success{% else %}bg-secondary{% endif %}">
|
||
{{ dockerfile.status }}
|
||
</span>
|
||
</div>
|
||
|
||
<div class="mb-2">
|
||
<strong>Создан:</strong> {{ dockerfile.created_at.strftime('%d.%m.%Y %H:%M') if dockerfile.created_at else 'N/A' }}
|
||
</div>
|
||
{% if dockerfile.updated_at %}
|
||
<div class="mb-2">
|
||
<strong>Обновлен:</strong> {{ dockerfile.updated_at.strftime('%d.%m.%Y %H:%M') }}
|
||
</div>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card mb-3">
|
||
<div class="card-header">
|
||
<h5 class="mb-0">Dockerfile</h5>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<div class="dockerfile-code-wrapper">
|
||
<pre class="bg-light p-3 rounded mb-0"><code>{{ dockerfile.content }}</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-header d-flex justify-content-between align-items-center">
|
||
<h5 class="mb-0">История сборок</h5>
|
||
<a href="/dockerfiles/{{ dockerfile.id }}/build-logs" class="btn btn-sm btn-outline-primary">
|
||
<i class="fas fa-list me-1"></i>
|
||
Все логи
|
||
</a>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
{% if build_logs %}
|
||
<div class="table-responsive">
|
||
<table class="table table-hover mb-0">
|
||
<thead class="table-light">
|
||
<tr>
|
||
<th>Образ</th>
|
||
<th>Тип</th>
|
||
<th>Платформы</th>
|
||
<th>Статус</th>
|
||
<th>Начало</th>
|
||
<th>Длительность</th>
|
||
<th>Пользователь</th>
|
||
<th style="min-width: 100px;">Действия</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for log in build_logs %}
|
||
<tr>
|
||
<td class="align-middle">
|
||
<code>{{ log.image_name }}{% if log.tag %}:{{ log.tag }}{% endif %}</code>
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.extra_data and log.extra_data.get('type') == 'push' %}
|
||
<span class="badge bg-info">
|
||
<i class="fas fa-upload me-1"></i>Push
|
||
</span>
|
||
{% else %}
|
||
<span class="badge bg-secondary">
|
||
<i class="fas fa-hammer me-1"></i>Build
|
||
</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.extra_data and log.extra_data.get('type') == 'push' %}
|
||
{# Для push показываем registry вместо платформ #}
|
||
{% if log.extra_data.get('registry') %}
|
||
<span class="badge bg-primary">
|
||
<i class="fas fa-server me-1"></i>{{ log.extra_data.get('registry') }}
|
||
</span>
|
||
{% else %}
|
||
<span class="text-muted">—</span>
|
||
{% endif %}
|
||
{% elif log.platforms %}
|
||
{% for platform in log.platforms %}
|
||
<span class="badge bg-secondary me-1">{{ platform }}</span>
|
||
{% endfor %}
|
||
{% else %}
|
||
<span class="text-muted">—</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.status == "success" %}
|
||
<span class="badge bg-success">Успешно</span>
|
||
{% elif log.status == "failed" %}
|
||
<span class="badge bg-danger">Ошибка</span>
|
||
{% else %}
|
||
<span class="badge bg-warning">Выполняется</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.started_at %}
|
||
{{ log.started_at.strftime('%d.%m.%Y %H:%M') }}
|
||
{% else %}
|
||
<span class="text-muted">—</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.duration %}
|
||
{{ log.duration }} сек
|
||
{% else %}
|
||
<span class="text-muted">—</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
{% if log.user %}
|
||
{{ log.user }}
|
||
{% else %}
|
||
<span class="text-muted">—</span>
|
||
{% endif %}
|
||
</td>
|
||
<td class="align-middle">
|
||
<div class="btn-group btn-group-sm">
|
||
<a href="/dockerfiles/{{ dockerfile.id }}/build-logs?log_id={{ log.id }}" class="btn btn-outline-primary" title="Просмотр логов">
|
||
<i class="fas fa-eye"></i>
|
||
</a>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
{% else %}
|
||
<div class="alert alert-info mb-0 m-3">
|
||
<i class="fas fa-info-circle me-2"></i>
|
||
История сборок пуста
|
||
</div>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|