华为云企业实名代过 华为云部署Jenkins持续集成
华为云上搭Jenkins?别急着点‘立即购买’,先看看这台ECS能不能扛住你第一次build
朋友,你是不是也经历过:在华为云控制台点完‘创建ECS’,看着那行小字‘建议最低配置:2核4G’,默默把规格调成‘4核8G’,心想‘多花点钱图个心安’——结果Jenkins刚跑起来,构建一个Spring Boot项目就卡在‘Downloading Maven dependencies…’不动了?
别慌,这不是你的代码有问题,是你的云服务器,正在用沉默抗议你没给它配好‘呼吸系统’。
第一步:不是买最贵的,而是买‘刚刚好’的
华为云ECS选型,真不是越贵越好。Jenkins本身吃内存,但吃的是‘可用内存’,不是‘标称内存’。我们亲测:CentOS 7.9 + OpenJDK 11 + Jenkins 2.440,在2核4G(系统盘50GB SSD)上稳如老狗——前提是,你得关掉云监控Agent的高频采集(默认每5秒抓一次),不然它和Jenkins抢CPU,俩都喘不上气。
安全组?别直接放行0.0.0.0/0!只开三个端口:
• 22(SSH,你总得登上去吧)
• 8080(Jenkins本体,先临时开着,后面会关)
• 80(Nginx反代入口,对外唯一门面)
记住:Jenkins原生端口,上线后必须封!否则谁都能进你的‘构建控制台’,顺手给你删个凭证、加个恶意脚本——比删库还快。
第二步:Java不是装上就行,是得‘认得清自己姓啥’
华为云镜像市场里搜‘Java’,一堆‘JDK8预装版’,别信。那些镜像往往装的是OpenJDK 8u292,而Jenkins 2.4xx要求最低JDK 11。更坑的是,有些镜像把JAVA_HOME指向/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre——注意!最后多了个/jre。Jenkins启动时读不到javac,直接报错‘No Java binary found’。
正确姿势:yum install -y java-11-openjdk-devel
然后手动检查:java -version && javac -version
再设环境变量:echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
验证:输入echo $JAVA_HOME,输出必须是完整路径,不能带/jre,不能有空格,不能是你昨晚做梦梦见的路径。
第三步:Jenkins安装?别用war包硬扛,systemd才是亲儿子
官网下载jenkins.war?可以,但不推荐。每次重启都要java -jar jenkins.war --httpPort=8080,一不小心Ctrl+C就停服,连日志都没留。我们要的是‘挂了自动拉起、日志自动轮转、启动参数永久生效’。
新建/etc/systemd/system/jenkins.service:
[Unit]
Description=Jenkins Server
After=network.target
[Service]
Type=simple
User=jenkins
Group=jenkins
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
ExecStart=/usr/bin/java -Djava.awt.headless=true -Djenkins.install.runSetupWizard=false -jar /opt/jenkins/jenkins.war --httpPort=8080 --prefix=/jenkins
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
重点来了:
• --prefix=/jenkins:为后续Nginx反代埋伏笔,避免根路径冲突;
• -Djenkins.install.runSetupWizard=false:关掉首次启动向导!否则你ssh进去发现8080返回404,其实是它在等你去浏览器输初始密码——而你根本没配公网IP或安全组……
• Restart=on-failure:Jenkins崩了自动复活,比你凌晨三点爬起来手动start靠谱十倍。
第四步:Nginx不是‘转发一下就行’,是得当‘贴身管家’
直接proxy_pass http://127.0.0.1:8080;?恭喜,你将收获:
• 构建日志刷不出来(WebSocket断连)
• 静态资源404(CSS/JS路径错乱)
• 登录后跳转回http://ip:8080/login(HTTP→HTTPS裸奔)
华为云Nginx配置(/etc/nginx/conf.d/jenkins.conf)请照抄:
server {
listen 80;
server_name your-domain.com; # 或直接用IP
location /jenkins/ {
proxy_pass http://127.0.0.1:8080/jenkins/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 关键三行,解决WebSocket和重定向
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 防止超时中断长构建
proxy_read_timeout 90;
proxy_send_timeout 90;
}
}
敲黑板:location /jenkins/末尾的斜杠,proxy_pass末尾的斜杠,必须严格一致。少一个,Jenkins页面能打开,但点‘新建任务’就404;多一个,登录页样式全丢——这事儿我们调了7次才对齐。
第五步:插件安装?别在界面上‘一键全部更新’
华为云企业实名代过 Jenkins首页右上角‘可用插件’点进去,看到‘更新所有’按钮就手痒?住手!华为云国内源慢,且部分插件(比如Pipeline Utility Steps)依赖其他插件,版本锁死,强行更新会触发循环依赖,最终界面变灰屏,只剩一行小字:‘Plugin installation failed due to dependency conflict.’
正确姿势:
• 先装三大基石:Git plugin、Pipeline、Docker Pipeline;
• 再装实用派:Blue Ocean(可视化流水线)、Role-based Authorization Strategy(权限分组)、Email Extension(邮件通知);
• 每装一个,点‘重启Jenkins’——别嫌烦,这是在给插件‘验明正身’。
第六步:跑第一个Pipeline?别让Git凭据成为拦路虎
新建流水线 → 选择‘Pipeline script from SCM’ → 输入Git地址 → 点‘保存’ → 构建失败 → 控制台输出:ERROR: Error fetching remote repo 'origin'... HTTP 403。
原因?你填的Git账号密码,是GitHub网页登录的账号,不是Personal Access Token。华为云内网访问GitHub,走的是代理,Basic Auth被拦截。解决方案:
• GitHub Settings → Developer settings → Personal access tokens → Generate new token → 勾选‘repo’和‘admin:repo_hook’;
• Jenkins → 凭据 → 系统 → 全局凭据 → 添加凭据 → 类型选‘Username with password’ → Username填你的GitHub用户名,Password粘贴Token;
• 流水线里引用ID,别手输密码——密码明文进脚本,等于把家门钥匙焊在防盗门上。
最后送你一句华为云老运维的忠告:
Jenkins不是部署完就万事大吉的‘静态雕塑’,它是活的——每天要收Git webhook、要拉Docker镜像、要清理旧构建、要防暴力爆破。建议:
• 每周执行一次find /var/lib/jenkins/jobs/ -name 'builds' -type d -mtime +30 -exec rm -rf {} \;
• 每月检查一次df -h,Jenkins日志+Maven缓存+Docker layer,三个月不清理,50GB系统盘直接红灯报警;
• 把Jenkins home目录(/var/lib/jenkins)定期rsync到OBS桶——别等磁盘爆了才想起备份,那时连ls -la都卡顿。
好了,现在你可以合上这篇文档,打开华为云控制台,深吸一口气,点下‘创建ECS’了——这次,你知道该关哪个进程、该改哪行配置、该骂哪句日志。
毕竟,持续集成的第一步,从来不是写Pipeline,而是让Jenkins,稳稳地,活下来。

