Files
ConfTemplate/src/schemas/jenkins.js
T
cnbugs d80d33e6f6 feat: 新增 15 个服务组件,总计 59 个
系统服务: NTP, DHCP, BIND, NFS, SAMBA, RSYNC, Sersync, vsftpd, Subversion
数据库中间件: Mycat
CI/CD: GitLab, Jenkins
高可用: Keepalived, HAProxy, LVS

新增 4 个分类: 系统服务、数据库中间件、CI/CD、高可用
2026-07-19 16:11:09 +08:00

268 lines
6.8 KiB
JavaScript

export const jenkinsSchema = {
id: 'jenkins',
name: 'Jenkins',
icon: 'Setting',
category: 'CI/CD',
description: '开源自动化服务器,支持持续集成与持续交付',
format: 'yml',
fileName: 'jenkins.yaml',
groups: [
{
title: '基础配置',
fields: [
{
key: 'httpPort',
label: 'HTTP 端口',
type: 'number',
min: 1,
max: 65535,
default: 8080,
},
{
key: 'ajpPort',
label: 'AJP 端口',
type: 'number',
default: -1,
tip: '-1 表示禁用 AJP',
},
{
key: 'jenkinsHome',
label: 'JENKINS_HOME 目录',
type: 'text',
default: '/var/lib/jenkins',
},
{
key: 'numExecutors',
label: '执行器数量',
type: 'number',
min: 0,
max: 100,
default: 2,
tip: '同时执行的任务数',
},
{
key: 'mode',
label: '节点模式',
type: 'select',
options: [
{ label: 'normal - 正常模式', value: 'normal' },
{ label: 'exclusive - 仅构建指定任务', value: 'exclusive' },
],
default: 'normal',
},
],
},
{
title: '安全配置',
fields: [
{
key: 'securityRealm',
label: '安全域',
type: 'text',
default: 'default',
tip: '用户认证方式',
},
{
key: 'enableLdap',
label: '启用 LDAP 认证',
type: 'switch',
default: false,
},
{
key: 'ldapServer',
label: 'LDAP 服务器',
type: 'text',
default: 'ldap://ldap.example.com',
dependsOn: { key: 'enableLdap', value: true },
},
{
key: 'ldapRootDn',
label: 'LDAP Root DN',
type: 'text',
default: 'dc=example,dc=com',
dependsOn: { key: 'enableLdap', value: true },
},
{
key: 'authorizationStrategy',
label: '授权策略',
type: 'select',
options: [
{ label: '登录用户可以做任何事', value: 'loggedInUsersCanDoAnything' },
{ label: '项目矩阵授权', value: 'projectMatrix' },
],
default: 'loggedInUsersCanDoAnything',
},
{
key: 'adminUser',
label: '管理员用户名',
type: 'text',
default: 'admin',
},
{
key: 'adminPassword',
label: '管理员密码',
type: 'text',
default: 'admin',
tip: '生产环境请修改默认密码',
},
],
},
{
title: 'JCasC (Configuration as Code)',
fields: [
{
key: 'enableCasc',
label: '启用 JCasC',
type: 'switch',
default: true,
tip: 'Configuration as Code 插件',
},
{
key: 'jenkinsUrl',
label: 'Jenkins URL',
type: 'text',
default: 'http://localhost:8080/',
tip: 'Jenkins 系统 URL',
},
],
},
{
title: 'Agent 配置',
fields: [
{
key: 'enableAgent',
label: '启用 Agent 节点',
type: 'switch',
default: false,
tip: '允许远程 Agent 连接',
},
{
key: 'agentPort',
label: 'Agent 端口',
type: 'number',
min: 1,
max: 65535,
default: 50000,
dependsOn: { key: 'enableAgent', value: true },
},
],
},
{
title: 'Git 与 Gitea 集成',
fields: [
{
key: 'enableGitea',
label: '启用 Gitea 集成',
type: 'switch',
default: false,
},
{
key: 'giteaUrl',
label: 'Gitea 服务器 URL',
type: 'text',
default: 'http://gitea.example.com',
dependsOn: { key: 'enableGitea', value: true },
},
{
key: 'enableGit',
label: '启用 Git',
type: 'switch',
default: true,
},
{
key: 'gitPath',
label: 'Git 可执行文件路径',
type: 'text',
default: '/usr/bin/git',
dependsOn: { key: 'enableGit', value: true },
},
],
},
],
}
export function generateJenkinsYaml(config) {
const lines = []
lines.push(`# Jenkins Configuration as Code - 由 ConfTemplate 生成`)
lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
lines.push(``)
lines.push(`jenkins:`)
// System
lines.push(` systemMessage: "Jenkins configured via ConfTemplate"`)
lines.push(` numExecutors: ${config.numExecutors}`)
lines.push(` mode: ${config.mode}`)
lines.push(` jenkinsHome: "${config.jenkinsHome}"`)
lines.push(``)
// Security Realm
if (config.enableLdap) {
lines.push(` securityRealm:`)
lines.push(` ldap:`)
lines.push(` configurations:`)
lines.push(` - server: "${config.ldapServer}"`)
lines.push(` rootDN: "${config.ldapRootDn}"`)
} else {
lines.push(` securityRealm:`)
lines.push(` local:`)
lines.push(` allowsSignup: false`)
lines.push(` users:`)
lines.push(` - id: "${config.adminUser}"`)
lines.push(` password: "${config.adminPassword}"`)
}
lines.push(``)
// Authorization
if (config.authorizationStrategy === 'loggedInUsersCanDoAnything') {
lines.push(` authorizationStrategy:`)
lines.push(` loggedInUsersCanDoAnything:`)
lines.push(` allowAnonymousRead: false`)
} else {
lines.push(` authorizationStrategy:`)
lines.push(` projectMatrix:`)
lines.push(` entries:`)
lines.push(` - user:"${config.adminUser}":`)
lines.push(` permissions:`)
lines.push(` - "Overall/Administer"`)
}
lines.push(``)
// Agent
if (config.enableAgent) {
lines.push(` agent:`)
lines.push(` port: ${config.agentPort}`)
}
// JCasC
if (config.enableCasc) {
lines.push(` configuration-as-code:`)
lines.push(` enabled: true`)
}
lines.push(``)
// URL
lines.push(`unclassified:`)
lines.push(` jenkinsLocationConfiguration:`)
lines.push(` jenkinsUrl: "${config.jenkinsUrl}"`)
lines.push(``)
// Git
if (config.enableGit) {
lines.push(` git:`)
lines.push(` installations:`)
lines.push(` - name: "Default"`)
lines.push(` home: "${config.gitPath}"`)
lines.push(``)
}
// Gitea
if (config.enableGitea) {
lines.push(` giteaServers:`)
lines.push(` servers:`)
lines.push(` - displayName: "Gitea"`)
lines.push(` serverUrl: "${config.giteaUrl}"`)
}
return lines.join('\n')
}