云国际站 云国际站 立即咨询

谷歌云高权重账号 GCP谷歌云部署Jenkins集成

谷歌云GCP / 2026-04-17 19:29:07

话说那天我对着 Jenkins 的启动日志发呆,第17次看到 java.lang.OutOfMemoryError: Metaspace,窗外的鸽子正蹲在 GCP 控制台图标上拉了一泡——那一刻我顿悟:不是 Jenkins 不行,是它不该被塞进我那台 1核512MB 的免费 tier 实例里当苦力。

所以今天这篇,不讲「Jenkins 是什么」这种能让人秒睡的定义,也不甩一堆带星号的官方文档截图。咱们就干一件事:把 Jenkins 稳稳当当、舒舒服服、还能顺手调用 GCP 各种服务地,部署到 Google Cloud Platform 上。过程像煮一碗溏心蛋——火候要准,步骤要顺,翻车了……也别慌,锅底还留着蛋壳,能捞出来重打。

第一步:先给 Jenkins 找个「公寓」,别住地下室

别急着点「Create Instance」!GCP 默认推荐的 e2-micro 是慈善款,适合跑 hello world,不适合跑 CI/CD。Jenkins 启动就要吃掉 800MB+ 内存,加上插件、构建缓存、Java GC 开销——我们直接选 e2-standard-4(4核16GB),月均约 $32,但换来的是:构建不卡顿、页面不转圈、半夜告警不误报。省钱?省的是你反复重装的时间,和凌晨三点排查 Connection refused 的血压。

创建时勾选「Allow HTTP traffic」和「Allow HTTPS traffic」——别信「我后续再配防火墙」这种鬼话。等 Jenkins 跑起来了,你才发现 8080 端口被挡得严严实实,而你的 SSH 连接又刚好超时……那种绝望,堪比在微信里发了「在?」之后对方已读不回。

第二步:SSH 登上去,别急着 apt update

连上实例后,第一件事不是装 Jenkins,而是先升级系统并换源:

sudo apt update && sudo apt upgrade -y
# 换成阿里云源(GCP 新加坡节点访问快)
sudo sed -i 's|archive.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list
sudo sed -i 's|security.ubuntu.com|mirrors.aliyun.com|g' /etc/apt/sources.list
sudo apt update

然后装 OpenJDK 17(Jenkins 2.4x 起强制要求 Java 17+):

sudo apt install openjdk-17-jdk -y
java -version  # 输出应含 "17.0.x"

⚠️重点来了:别用 apt install jenkins!Ubuntu 官方源里的 Jenkins 版本老旧(2.3xx),且自带 systemd 配置有坑——它会把 JENKINS_HOME 锁死在 /var/lib/jenkins,后面你扩容磁盘、挂载 SSD、迁移到 Cloud Storage 备份时,会发现路径像焊死的防盗门。

第三步:手动部署 Jenkins —— 自己动手,丰衣足食

谷歌云高权重账号jenkins.io/download 下最新 LTS 的 WAR 包(比如 jenkins.war),上传到实例:

wget https://get.jenkins.io/war-stable/2.440.4/jenkins.war
sudo mkdir -p /opt/jenkins
sudo mv jenkins.war /opt/jenkins/

创建专用用户(安全起见,别用 root 跑 Jenkins):

sudo useradd -r -m -U -d /opt/jenkins -s /bin/false jenkins
sudo chown -R jenkins:jenkins /opt/jenkins

写个轻量级 systemd service(/etc/systemd/system/jenkins.service):

[Unit]
Description=Jenkins CI Server
After=network.target

[Service]
Type=simple
User=jenkins
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="JENKINS_HOME=/opt/jenkins/home"
ExecStart=/usr/bin/java -Djava.awt.headless=true -Djenkins.install.runSetupWizard=false -Xmx4g -XX:MaxMetaspaceSize=512m -jar /opt/jenkins/jenkins.war --httpPort=8080 --prefix=/
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

注意三个灵魂参数:
-Xmx4g:堆内存设为 4GB(总内存 16GB,留足余量);
-XX:MaxMetaspaceSize=512m:防 Metaspace 爆炸;
--httpPort=8080:先走明文,HTTPS 交由反向代理管。

启动:

sudo systemctl daemon-reload
sudo systemctl enable jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins  # 看一眼 ✅ Active (running)

第四步:搞个域名 + HTTPS,别让管理员密码裸奔

买个便宜域名(.dev/.site 首年不到 10 块),解析到实例公网 IP。然后用 Nginx 反代 + Let's Encrypt:

sudo apt install nginx certbot python3-certbot-nginx -y
sudo ufw allow 'Nginx Full'

配 Nginx(/etc/nginx/sites-available/jenkins):

server {
    listen 80;
    server_name ci.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name ci.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/ci.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ci.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
        proxy_redirect http:// https://;
    }
}

申请证书:

sudo ln -sf /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
certbot --nginx -d ci.yourdomain.com

现在打开 https://ci.yourdomain.com,输入初始密码(sudo cat /opt/jenkins/home/secrets/initialAdminPassword),一路下一步——插件选「建议的插件」即可,别手贱全装,Jenkins 会慢得像用算盘跑 Docker。

第五步:和 GCP 深度谈恋爱 —— 不是单相思

装好 Google OAuth Plugin(登录对接 GSuite),Google Cloud Storage Plugin(备份 job config 和 build artifacts 到 GCS Bucket),再建个 Service Account:

  • 进 IAM → 创建服务账号 → 给 Storage Object Admin + Cloud Build Editor 角色;
  • 下载 JSON 密钥,上传到 Jenkins 服务器(/opt/jenkins/gcp-key.json);
  • Jenkins 系统设置 → Google Cloud → 填入密钥路径 → 测试连接 ✅。

顺手把构建日志自动归档到 GCS:Job 配置 → 构建后操作 → 「Archive the artifacts」→ 勾选「Upload artifacts to Google Cloud Storage」→ 指定 bucket 和路径。从此再也不怕构建记录被磁盘撑爆清空。

更骚的操作:用 Cloud Build 当 webhook 触发器。在 GCP Console → Cloud Build → 触发器 → GitHub/GitLab → 关联仓库 → 设置构建配置文件 cloudbuild.yaml,内容里写:

steps:
- name: 'gcr.io/cloud-builders/curl'
  args: ['--data', '', 'https://ci.yourdomain.com/job/your-job-name/build?token=YOUR_TOKEN']

再在 Jenkins Job 中开启「Trigger builds remotely」,填上 token。这样 Git Push 后,Cloud Build 先跑 lint/test,再通知 Jenkins 打包部署——流水线分层清晰,出问题好定位,不像以前所有事都挤在 Jenkins 里,debug 时像在拆炸弹。

最后送你三条保命口诀

  1. 「备份先行」:每周用 gsutil rsync -r /opt/jenkins/home gs://your-backup-bucket/jenkins/ 同步一次,比祈祷有用;
  2. 「插件少装」:每多一个插件,Jenkins 启动慢 3 秒,内存多占 50MB,出问题概率 ×2;
  3. 「日志常看」:别等构建失败才翻 /opt/jenkins/home/logs/,每天扫一眼 jenkins.log 里有没有 WARNERROR,早发现早治疗。

部署完成那一刻,你可以泡杯茶,看着 Jenkins 首页右上角那个绿色小球稳定跳动——它不再是你焦虑的源头,而是你自动化流水线里最老实的守门员。至于那只曾经蹲在 GCP 图标上的鸽子?它现在正帮你把构建成功的通知,咕咕咕地发到 Slack 频道里。

下载.png
Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系