群晖VMM实战:Ubuntu虚拟机部署与Jenkins自动化搭建指南
1. 群晖VMM环境准备与Ubuntu虚拟机部署群晖的Virtual Machine ManagerVMM是个隐藏的宝藏功能很多用户买了NAS却只用来存文件实在有点浪费。我自己用VMM跑了5个虚拟机从开发环境到家庭自动化服务都在上面稳定性完全不输专业服务器。下面就把这些年积累的实战经验分享给大家。首先确保你的群晖型号支持VMM功能DS718以上的机型基本都没问题。建议内存至少8GB我用的DS920配了20GB内存跑多个虚拟机依然流畅。打开套件中心安装VMM时记得勾选启用虚拟化选项这个步骤很多教程都会忽略。创建虚拟机时有个关键细节网络设置一定要选新建虚拟交换机。我吃过亏第一次直接用了默认网络结果虚拟机和主机IP冲突整个内网都瘫痪了。正确的做法是在网络标签页新建一个虚拟交换机建议选择桥接模式这样虚拟机就能获得和物理设备同网段的独立IP。Ubuntu镜像推荐使用LTS版本目前22.04是最稳定的选择。上传ISO时有个小技巧先通过File Station把镜像放到共享文件夹再在VMM里选择从本地目录导入速度比直接上传快3倍。创建虚拟机时CPU核心建议给2个以上内存至少2048MB磁盘空间20GB起步系统盘选qcow2格式更节省空间。安装过程中有个必做的优化在分区时选择LVM逻辑卷管理。这样后期扩容磁盘就像喝水一样简单我上周刚给测试环境的Ubuntu从20GB扩容到50GB整个过程只用了两条命令# 查看当前卷组信息 sudo vgdisplay # 扩展逻辑卷假设卷组名为ubuntu-vg sudo lvextend -L 30G /dev/ubuntu-vg/root sudo resize2fs /dev/ubuntu-vg/root2. Ubuntu系统初始化与调优刚装好的Ubuntu就像毛坯房需要做些基础装修才能住得舒服。首先执行必备三连sudo apt update sudo apt upgrade -y sudo apt install -y net-tools curl git网络配置是第一个坑点。群晖VMM的虚拟机默认不会保存网络配置重启后DHCP可能会分配新IP。我的解决方案是配置静态IP编辑/etc/netplan/00-installer-config.yaml注意yaml格式的缩进必须严格network: ethernets: ens3: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]然后执行sudo netplan apply生效。建议同时修改主机名sudo hostnamectl set-hostname jenkins-builderSSH安全加固是必做项。先修改/etc/ssh/sshd_config将Port 22改为其他端口比如2222设置PermitRootLogin no启用PubkeyAuthentication yes记得重启服务sudo systemctl restart sshd。我习惯用ssh-copy-id部署公钥比密码登录安全得多ssh-copy-id -p 2222 username192.168.1.100系统资源优化方面建议调整swappiness值默认60太高了echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf sudo sysctl -p再安装个实用工具包sudo apt install -y htop tmux fail2ban3. Jenkins自动化部署实战Jenkins现在需要Java 11或17别再装Java 8了。我推荐用OpenJDK 17sudo apt install -y openjdk-17-jdk安装Jenkins官方仓库时注意现在的密钥获取方式变了curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc /dev/null echo deb [signed-by/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list /dev/null完整的安装命令如下sudo apt update sudo apt install -y jenkins sudo systemctl enable --now jenkins防火墙记得放行8080端口sudo ufw allow 8080/tcp初始化时获取管理员密码用这个命令老版本的路径已经变了sudo cat /var/lib/jenkins/secrets/initialAdminPassword插件安装我推荐选择安装推荐插件等基础装完再补这几个必备插件Git ParameterPipelineBlue OceanDockerSSH Agent配置镜像加速可以大幅提升插件下载速度。修改/var/lib/jenkins/hudson.model.UpdateCenter.xmlsites site iddefault/id urlhttps://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json/url /site /sites4. Jenkins高级配置与CI/CD管道搭建系统配置里有个隐藏技巧调整执行器数量。群晖VMM虚拟机建议设置为CPU核心数的1.5倍比如4核CPU就设6个执行器。路径在【系统管理】→【系统配置】→【# of executors】邮件通知配置是项目报警的关键。在【系统配置】里设置SMTP信息时测试发现群晖自带的邮件服务器可以直接用SMTP服务器localhost端口25不需要认证创建第一个Pipeline项目时我强烈推荐用Jenkinsfile而不是界面操作。这里分享个我常用的模板pipeline { agent any stages { stage(Checkout) { steps { git branch: main, url: gitgithub.com:yourrepo/project.git } } stage(Build) { steps { sh mvn clean package } } stage(Test) { steps { sh mvn test } } stage(Deploy) { when { branch main } steps { sshagent([deploy-key]) { sh scp target/*.jar userserver:/opt/app } } } } }对于Docker项目可以添加这样的阶段stage(Docker Build) { steps { script { docker.build(my-image:${env.BUILD_ID}).push() } } }备份策略是很多新手忽略的重点。我在/var/lib/jenkins目录下放了自动备份脚本#!/bin/bash tar -czf /backup/jenkins_$(date %Y%m%d).tar.gz \ --excludeworkspace \ /var/lib/jenkins find /backup -name jenkins_*.tar.gz -mtime 30 -delete最后建议配置每日定时构建维护任务在【系统管理】→【脚本命令行】里执行Jenkins.instance.getView(All).items.each { item - if (item instanceof com.cloudbees.hudson.plugins.folder.AbstractFolder) return if (!item.isBuildable()) return item.scheduleBuild(0, new TimerTriggerCause()) }