Commit c56b38ed authored by BO ZHANG's avatar BO ZHANG 🏀
Browse files

feat(deploy): 优化部署流程并添加测试页面

parent 41732b39
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -178,7 +178,20 @@
          COMPOSE_FILES="$COMPOSE_FILES -f deploy_configs/{{ _env }}/docker-compose.harbor-api-auth.override.yml"
        fi

        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env pull || true
        docker rmi -f {{ harbor_project | default('') }}postgres:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}redis:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}elasticsearch:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}kibana:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}filebeat:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}prometheus:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}grafana:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}cadvisor:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}node-exporter:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}csst-airflow-api-gateway:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}csst-airflow-task-portal:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}csst-airflow-js9:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}csst-airflow:{{ _build_number }} || true
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master pull
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master up -d --remove-orphans
      args:
        chdir: "{{ _deploy_dir }}"
@@ -265,7 +278,11 @@
          COMPOSE_FILES="$COMPOSE_FILES -f deploy_configs/{{ _env }}/docker-compose.extra-hosts.override.yml"
        fi

        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env pull || true
        docker rmi -f {{ harbor_project | default('') }}filebeat:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}cadvisor:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}node-exporter:{{ _build_number }} || true
        docker rmi -f {{ harbor_project | default('') }}csst-airflow:{{ _build_number }} || true
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker pull
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker up -d --remove-orphans
      args:
        chdir: "{{ _deploy_dir }}"
+12 −10
Original line number Diff line number Diff line
@@ -171,15 +171,14 @@
        fi
        
        if [ "$REGISTRY_PULL" = "true" ]; then
          docker rmi -f {{ harbor_project | default('') }}csst-airflow-api-gateway:{{ _build_number }} || true
          docker rmi -f {{ harbor_project | default('') }}csst-airflow-task-portal:{{ _build_number }} || true
          docker rmi -f {{ harbor_project | default('') }}csst-airflow-js9:{{ _build_number }} || true
          docker rmi -f {{ harbor_project | default('') }}csst-airflow:{{ _build_number }} || true

          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env pull || true
          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master down --remove-orphans || true
          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master pull
        fi

        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master up -d --remove-orphans
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile master up -d --remove-orphans --force-recreate
        if [ "$REGISTRY_PULL" = "true" ]; then
          docker image prune -af || true
        fi
      args:
        chdir: "{{ _deploy_dir }}"

@@ -277,11 +276,14 @@
        fi
        
        if [ "$REGISTRY_PULL" = "true" ]; then
          docker rmi -f {{ harbor_project | default('') }}csst-airflow:{{ _build_number }} || true
          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env pull || true
          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker down --remove-orphans || true
          {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker pull
        fi

        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker up -d --remove-orphans
        {{ docker_compose_cmd }} $COMPOSE_FILES --env-file deploy_configs/airflow.env --profile worker up -d --remove-orphans --force-recreate
        if [ "$REGISTRY_PULL" = "true" ]; then
          docker image prune -af || true
        fi
      args:
        chdir: "{{ _deploy_dir }}"

+9 −2
Original line number Diff line number Diff line
@@ -80,6 +80,10 @@
          <el-icon :size="20" class="font-bold"><DataLine /></el-icon>
          <span class="text-[15px] font-bold ml-2">Grafana</span>
        </el-menu-item>
        <el-menu-item index="test">
          <el-icon :size="20" class="font-bold"><Search /></el-icon>
          <span class="text-[15px] font-bold ml-2">Test</span>
        </el-menu-item>
        <el-menu-item index="admin" v-if="userRole === 'admin'">
          <el-icon :size="20" class="font-bold"><Setting /></el-icon>
          <span class="text-[15px] font-bold ml-2">Admin</span>
@@ -552,7 +556,7 @@
            <RawDataView v-else-if="activeTab === 'rawdata'" />
      </div>

      <div v-else-if="['grafana', 'dags', 'workers', 'env', 'harbor-tags', 'js9', 'admin'].includes(activeTab)" class="h-[calc(100vh-140px)] w-full rounded-lg overflow-hidden border border-[#E5E7EB] bg-white">
      <div v-else-if="['grafana', 'dags', 'workers', 'env', 'harbor-tags', 'js9', 'admin', 'test'].includes(activeTab)" class="h-[calc(100vh-140px)] w-full rounded-lg overflow-hidden border border-[#E5E7EB] bg-white">
        <iframe
              v-if="activeTab === 'grafana'"
              :src="`http://${currentHost}:33000/d/node-exporter/node-exporter-full?orgId=1&refresh=1m&kiosk`"
@@ -564,6 +568,7 @@
            <EnvView v-else-if="activeTab === 'env'" />
            <HarborTagsView v-else-if="activeTab === 'harbor-tags'" />
            <JS9View v-else-if="activeTab === 'js9'" />
            <TestView v-else-if="activeTab === 'test'" />
            <UsersView v-else-if="activeTab === 'admin' && userRole === 'admin'" />
      </div>
    </main>
@@ -586,6 +591,7 @@ import CCDSView from './components/CCDSView.vue'
import JS9View from './components/JS9View.vue'
import SubmissionsView from './components/SubmissionsView.vue'
import HarborTagsView from './components/HarborTagsView.vue'
import TestView from './components/TestView.vue'
import axios from 'axios'
import { Monitor, DataLine, Search, Filter, Document, Clock, Close, Loading, Select, CircleClose, VideoPlay, Warning, Back, Refresh, Folder, ArrowRight, ArrowLeft, QuestionFilled, List, Cpu, Setting, SwitchButton, Position, Calendar, Notebook, Picture, Promotion, Box, Tickets, PriceTag } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
@@ -612,7 +618,7 @@ const API_BASE_URL = '/api/tasks'

const getHashTab = () => {
  const hash = window.location.hash.replace('#', '')
  return ['submissions', 'tasks', 'dags', 'workers', 'env', 'harbor-tags', 'grafana', 'admin', 'plan', 'rawdata', 'products', 'catalogs', 'ccds'].includes(hash) ? hash : 'tasks'
  return ['submissions', 'tasks', 'dags', 'workers', 'env', 'harbor-tags', 'grafana', 'admin', 'plan', 'rawdata', 'products', 'catalogs', 'ccds', 'test'].includes(hash) ? hash : 'tasks'
}

// State
@@ -663,6 +669,7 @@ const activeTabTitle = computed(() => {
    catalogs: 'External Catalogs',
    ccds: 'CCDS',
    js9: 'JS9',
    test: 'Test',
    admin: 'Admin'
  }
  return map[activeTab.value] || activeTab.value
+53 −0
Original line number Diff line number Diff line
<template>
  <div class="h-full flex flex-col gap-4 animate-fade-in">
    <div class="flex justify-between items-center px-1 mt-2 mb-1">
      <h2 class="text-base font-semibold text-[#1F2937]">Portal Test</h2>
      <el-button @click="refreshSnapshot" :icon="Refresh" circle />
    </div>

    <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
      <el-card shadow="never" class="border border-[#E5E7EB]">
        <div class="text-xs uppercase tracking-wider text-[#6B7280] mb-2">Build Number</div>
        <div class="text-2xl font-bold font-mono text-[#1F2937] break-all">{{ buildNumber }}</div>
      </el-card>
      <el-card shadow="never" class="border border-[#E5E7EB]">
        <div class="text-xs uppercase tracking-wider text-[#6B7280] mb-2">Build Time</div>
        <div class="text-lg font-semibold font-mono text-[#1F2937] break-all">{{ buildTime || '-' }}</div>
      </el-card>
    </div>

    <el-card shadow="never" class="border border-[#E5E7EB]">
      <div class="text-xs uppercase tracking-wider text-[#6B7280] mb-3">Runtime Snapshot</div>
      <div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
        <div class="bg-[#F9FAFB] rounded-md border border-[#E5E7EB] px-3 py-2">
          <div class="text-[#6B7280] mb-1">Current URL</div>
          <div class="font-mono break-all text-[#1F2937]">{{ currentUrl }}</div>
        </div>
        <div class="bg-[#F9FAFB] rounded-md border border-[#E5E7EB] px-3 py-2">
          <div class="text-[#6B7280] mb-1">Current Time</div>
          <div class="font-mono break-all text-[#1F2937]">{{ currentTime }}</div>
        </div>
        <div class="bg-[#F9FAFB] rounded-md border border-[#E5E7EB] px-3 py-2 md:col-span-2">
          <div class="text-[#6B7280] mb-1">Verification Hint</div>
          <div class="text-[#1F2937]">如果重新部署后这里的 Build Number 或 Build Time 变化,说明 Portal 镜像已经更新。</div>
        </div>
      </div>
    </el-card>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { Refresh } from '@element-plus/icons-vue'

const buildNumber = import.meta.env.VITE_BUILD_NUMBER || 'dev'
const buildTime = import.meta.env.VITE_BUILD_TIME || ''

const currentUrl = ref(window.location.href)
const currentTime = ref(new Date().toISOString())

const refreshSnapshot = () => {
  currentUrl.value = window.location.href
  currentTime.value = new Date().toISOString()
}
</script>
+2 −1
Original line number Diff line number Diff line
export ENV=csu
export BUILD_NUMBER=100010
export BUILD_NUMBER=100000
export HARBOR_PROJECT=csu-harbor.csst.nao:10443/csst/

make build
make push
make clean
make ansible-update
 No newline at end of file