Files
novalon-website/infra/cicd/jenkins/casc.yaml
T
zhangxiang 4ab2f3cd8e chore(infra): 新增 Gitea+Jenkins CI/CD 部署与凭据整改
- infra/cicd:docker-compose(gitea/jenkins)、JCasC(凭据统一 ${ENV} 注入,无硬编码)、
  备份/恢复、健康检查、凭据轮换与 git 历史清除脚本
- docs/deployment/cicd:安装、高可用备份监控、凭据事故复盘
- .env.example 仅为占位模板;真实 .env 由 .gitignore 排除
2026-09-20 10:37:57 +08:00

113 lines
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# Jenkins Configuration as Code (JCasC)
#
# 目的:把安全域、授权策略、CSRF、凭据、节点协议全部声明化,
# 避免"某次手工点了全局可写"这类不可追溯的漂移。
#
# 挂载:CASC_JENKINS_CONFIG=/var/jenkins_config/casc.yaml
# 校验:Jenkins -> Manage Jenkins -> Configuration as Code -> View Configuration
# 或用 jenkins-plugin-cli 的 casc 校验器 docker run 预检
#
# 变量来自 .env(容器 env),不要在此文件写明文。
# ============================================================
jenkins:
systemMessage: |
Novalon CI/CD (ci.f.novalon.cn) —— 生产环境,操作留痕。
未授权访问将被记录并追责。
# ---------- 安全域:Jenkins 自有用户库,禁用匿名 ----------
securityRealm:
local:
allowsSignup: false # 禁止自助注册
enableCaptcha: false
users:
- id: "${ADMIN_USER}"
# 密码由 bcrypt 存储;首次由 JCasC 写入,之后通过 UI/API 改
password: "${ADMIN_PASSWORD}"
# ---------- 授权:登录后可读,管理员全权 ----------
authorizationStrategy:
loggedInUsersCanDoAnything:
allowAnonymousRead: false # 关键:关闭匿名读取(构建日志含路径/命令,属敏感信息)
# ---------- 全局安全 ----------
crumbIssuer:
standard:
excludeClientIPFromCrumb: false
remotingSecurity:
enabled: true # 启用 agent -> controller 的调用过滤(防 RCE 类滥用)
# 无 agent 时关闭 JNLP 入站端口;有 agent 再改为 fixed:50000
agentProtocols:
- "Ping"
# Jenkins URL 必须与实际一致,否则 CSRF crumb 与邮件/通知链接会失效
location:
url: "https://ci.f.novalon.cn/"
adminAddress: "team@novalon.cn"
# ---------- 构建并发与队列 ----------
numExecutors: 2
quietPeriod: 5
scmCheckoutRetryCount: 2
# ---------- 全局环境变量(作业里用 ${...} 引用) ----------
globalNodeProperties:
- envVars:
env:
- key: "PROJECT_NAME"
value: "novalon-website"
- key: "SERVER_IP"
value: "139.155.109.62"
- key: "SERVER_USER"
value: "root"
- key: "DEPLOY_ROOT"
value: "/home/novalon/docker-app"
- key: "NGINX_CONTAINER"
value: "novalon-nginx-secure"
- key: "DOMAIN"
value: "https://novalon.cn"
- key: "NPM_REGISTRY"
value: "https://registry.npmmirror.com"
- key: "BACKUP_RETENTION_COUNT"
value: "3"
# ---------- 凭据:统一由环境变量注入,绝不写死在 JCasC ----------
credentials:
system:
domainCredentials:
- credentials:
- usernamePassword:
scope: GLOBAL
id: "gitea-credentials"
username: "${ADMIN_USER}"
password: "${GITEA_TOKEN}"
description: "Gitea 代码拉取令牌(read:repository"
# ---------- 工具安装(与 Jenkinsfile 中 nodejs('18') 对应) ----------
tool:
nodejs:
installations:
- name: "18"
home: ""
properties:
- installSource:
installers:
- nodeJSInstaller:
id: "18.20.4"
npmPackagesRefreshHours: 72
# ---------- 插件更新站点 ----------
# updateCenter:
# sites:
# - id: "default"
# url: "https://updates.jenkins.io/update-center.json"
# ---------- 安全加固:禁用 CLI over HTTP / 旧协议 ----------
unclassified:
# 关闭 Jenkins 内置 CLI over HTTP(历史漏洞面)
# 通过 startupProbe 之外的手段无法在 JCasC 直接关,
# 已在 docker-compose 的 JAVA_OPTS 中以 -Djenkins.CLI.disabled=true 处理