#feature: add Jenkins deploy monitor & log clean task

This commit is contained in:
2026-01-19 11:46:38 +08:00
parent 381d5e6e49
commit da3b05b7c0
22 changed files with 968 additions and 80 deletions

View File

@@ -181,6 +181,22 @@
<input v-model="form.is_important" type="checkbox" id="is_important" class="rounded border-gray-300 text-yellow-500 focus:ring-yellow-500" />
<label for="is_important" class="text-sm text-gray-700">标记为重要项目</label>
</div>
<!-- Jenkins 配置 -->
<div class="border-t border-gray-200 pt-4 mt-4">
<h5 class="text-sm font-medium text-gray-700 mb-3">Jenkins 发布通知</h5>
<div class="space-y-3">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Jenkins Job 名称</label>
<input v-model="form.jenkins_job_name" type="text" class="w-full px-3 py-2 text-sm border border-gray-300 rounded focus:ring-1 focus:ring-blue-500" placeholder="如: portal-be-deploy" />
</div>
<div class="flex items-center gap-2">
<input v-model="form.jenkins_notify_enabled" type="checkbox" id="jenkins_notify" class="rounded border-gray-300 text-orange-500 focus:ring-orange-500" />
<label for="jenkins_notify" class="text-sm text-gray-700">启用 Jenkins 发布通知</label>
</div>
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">日志 App 名称 (逗号分隔)</label>
<input v-model="form.log_app_names_text" type="text" class="w-full px-3 py-2 text-sm border border-gray-300 rounded focus:ring-1 focus:ring-blue-500" placeholder="如: portal-api, portal-worker" />
@@ -309,6 +325,10 @@ const ProjectCard = {
<span class="text-gray-500">版本:</span>
<span class="font-mono text-gray-700">{{ project.git_current_version }}</span>
</div>
<div v-if="project.jenkins_job_name" class="flex items-center gap-2">
<span class="text-gray-500">Jenkins:</span>
<span class="font-mono bg-orange-50 text-orange-700 px-1.5 py-0.5 rounded text-xs">{{ project.jenkins_job_name }}</span>
</div>
<div v-if="project.log_app_names?.length" class="flex items-center gap-2">
<span class="text-gray-500">App:</span>
<span class="text-gray-700">{{ project.log_app_names.join(', ') }}</span>
@@ -333,6 +353,14 @@ const ProjectCard = {
</span>
<span class="text-xs" :class="project.auto_create_release_branch ? 'text-purple-600' : 'text-gray-500'">自动创建分支</span>
</label>
<label class="inline-flex items-center gap-1.5 cursor-pointer" @click.prevent="$emit('toggle-field', project, 'jenkins_notify_enabled')">
<span class="relative inline-block">
<input type="checkbox" :checked="project.jenkins_notify_enabled" class="sr-only peer" />
<span class="block w-8 h-4 bg-gray-200 rounded-full peer peer-checked:bg-orange-500 transition-colors"></span>
<span class="absolute left-0.5 top-0.5 w-3 h-3 bg-white rounded-full transition-transform peer-checked:translate-x-4"></span>
</span>
<span class="text-xs" :class="project.jenkins_notify_enabled ? 'text-orange-600' : 'text-gray-500'">Jenkins通知</span>
</label>
<label class="inline-flex items-center gap-1.5 cursor-pointer" @click.prevent="$emit('toggle-field', project, 'is_important')">
<span class="relative inline-block">
<input type="checkbox" :checked="project.is_important" class="sr-only peer" />
@@ -418,6 +446,8 @@ export default {
git_monitor_enabled: false,
auto_create_release_branch: false,
is_important: false,
jenkins_job_name: '',
jenkins_notify_enabled: false,
log_app_names_text: '',
log_env: 'production'
};
@@ -456,6 +486,8 @@ export default {
git_monitor_enabled: project.git_monitor_enabled || false,
auto_create_release_branch: project.auto_create_release_branch || false,
is_important: project.is_important || false,
jenkins_job_name: project.jenkins_job_name || '',
jenkins_notify_enabled: project.jenkins_notify_enabled || false,
log_app_names_text: (project.log_app_names || []).join(', '),
log_env: project.log_env || 'production'
};
@@ -483,6 +515,8 @@ export default {
git_monitor_enabled: this.form.git_monitor_enabled,
auto_create_release_branch: this.form.auto_create_release_branch,
is_important: this.form.is_important,
jenkins_job_name: this.form.jenkins_job_name || null,
jenkins_notify_enabled: this.form.jenkins_notify_enabled,
log_app_names: this.form.log_app_names_text ? this.form.log_app_names_text.split(',').map(s => s.trim()).filter(Boolean) : null,
log_env: this.form.log_env || null
};