Azure 分销商 微软云部署Jenkins集成
你有没有试过,在凌晨两点盯着 Jenkins 控制台里那个永远卡在 Cloning repository... 的构建任务,一边啃冷披萨,一边怀疑人生:这破玩意儿是不是在用拨号上网同步代码?
别慌,这不是你的错——是它还没上云。
今天咱们不聊概念、不画架构图、不甩 PPT 术语,就干一件事儿:把 Jenkins 塞进微软 Azure 云里,让它跑得比你老板催上线还利索。全程基于真实部署记录,含泪写下每一步命令、每个报错截图(文字版)、以及三处差点让我砸键盘的隐藏陷阱。
第一步:先给 Jenkins 找个「云上出租屋」
Azure 虚拟机不是越贵越好,而是越「稳」越好。我们选 B2s(2 vCPU + 4 GiB RAM)——别笑,Jenkins 本身不吃 CPU,但插件、Git 克隆、Maven 编译全靠内存撑着。B1s?装完 JDK 就剩 300MB 可用内存,Jenkins 启动一半直接 OOM,日志里飘着一行温柔提醒:Killed process (java) total-vm:2859672kB, anon-rss:327680kB——翻译过来就是:「抱歉,系统帮你杀了它,因为太穷了」。
镜像选 Ubuntu 22.04 LTS(别用 24.04,Jenkins 官方插件仓库至今对新内核某些 syscall 有兼容性洁癖)。磁盘选「标准 SSD」,至少 64GB——别省,/var/lib/jenkins 默认往这儿塞,一个构建历史+插件缓存+workspace 能轻松吃掉 30GB。
网络组里记得开两个端口:8080(Jenkins 默认端口)和 22(你 SSH 的命脉)。顺手关掉「启动诊断」——它真会偷偷吃掉你 5% 的 I/O 性能,而且根本没人在意那张黑乎乎的串口日志截图。
第二步:SSH 登上去,开始「生存游戏」
连上机器第一件事:sudo apt update && sudo apt upgrade -y。别跳,Azure 镜像出厂自带一堆陈年包,不升级,后续装 Docker 会报 Failed to start docker.service: Unit docker.service not found.——查半天发现是旧版 containerd 和新版 docker-ce 在互相瞪眼。
装 Java?别用 apt install default-jdk。它给你装 OpenJDK 11,而最新 Jenkins LTS(2024.6)明确要求 JDK 17+。一行命令搞定:
sudo apt install openjdk-17-jdk-headless -y
java -version # 输出应为 openjdk version "17.0.1"...
然后设环境变量(别漏):
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' | sudo tee -a /etc/profile
source /etc/profile
第三步:Docker?必须的!但别急着 run
Jenkins 要跑 pipeline 里的 docker build,自己就得是 Docker 宿主。按官方文档走:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo systemctl enable docker
⚠️ 关键来了:执行完立刻 退出 SSH,重新登录!否则 docker: command not found 会反复问候你——组权限没生效,shell 还不知道自己已「入会」。
验证:docker run hello-world。如果看到那只可爱的小鲸鱼,恭喜,你离成功只剩半杯咖啡的距离。
第四步:Jenkins 本体登场,但别急着 start
微软云没预装 Jenkins,得手动加源:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y
装完别急着 systemctl start jenkins!先改配置——默认配置会让 Jenkins 绑定 127.0.0.1:8080,你在公网访问?只能看到连接超时的悲伤烟花。
编辑:sudo nano /etc/default/jenkins,找到这一行:
JENKINS_ARGS="--httpListenAddress=127.0.0.1 --httpPort=$HTTP_PORT"
改成:
JENKINS_ARGS="--httpListenAddress=0.0.0.0 --httpPort=$HTTP_PORT"
再顺手把 HTTP_PORT=8080 改成 HTTP_PORT=8081(留着 8080 给 Nginx 反代,安全又体面)。
启动:sudo systemctl daemon-reload && sudo systemctl start jenkins。检查:sudo systemctl status jenkins——绿色的 active (running) 是今日份小确幸。
第五步:Nginx 反向代理,让 Jenkins 有「域名体面」
装 Nginx:sudo apt install nginx -y,然后删掉默认站点:sudo rm /etc/nginx/sites-enabled/default。
新建:sudo nano /etc/nginx/sites-available/jenkins,贴入:
server {
listen 80;
server_name jenkins.yourdomain.com; # 替换为你的真实域名或公网 IP
location / {
proxy_pass http://127.0.0.1:8081;
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://; # 若配了 HTTPS 再启用
}
}
启用:sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/,测试配置:sudo nginx -t,重载:sudo systemctl reload nginx。
现在浏览器打开 http://你的公网IP,应该能看到 Jenkins 初始化页面——那个闪着蓝光的「解锁密码」提示框,正静静躺在 /var/lib/jenkins/secrets/initialAdminPassword 里等你。
第六步:插件安装 & GitHub 集成——真正的硬核时刻
推荐必装四件套:
• GitHub Integration Plugin(不是 GitHub plugin,名字差一个词,功能天差地别)
• Docker Pipeline(跑容器化构建)
• Blue Ocean(UI 不再像 2003 年网页)
• Role-based Authorization Strategy(别让实习生删了生产 Job)
GitHub Webhook 设置要点:
• Payload URL 填 http://你的域名/github-webhook/(结尾斜杠不能少!少就 404)
• Content type 选 application/json
• Secret 填 Jenkins 里 GitHub Server 配置的 token(别用个人 token,建个专用 bot 用户)
最后,来个实战 pipeline 示例(放在项目根目录 Jenkinsfile):
pipeline {
agent any
stages {
stage('Checkout') {
steps { checkout scm }
}
stage('Build') {
steps {
sh 'docker build -t myapp .'
}
}
stage('Test') {
steps {
sh 'docker run --rm myapp npm test'
}
}
}
}
保存,Push,看 Jenkins 自动触发——那一刻,你会听见云服务器风扇发出欣慰的嗡鸣。
写在最后:Jenkins 上云不是终点,而是你告别「本地调试一小时,上线崩溃五分钟」的起点。它不会自动变聪明,但只要你亲手把它安顿好,它就会用稳定的构建日志、清晰的失败定位、和准时准点的交付,默默回报你每一个敲下的命令。
Azure 分销商 哦对了——如果你看到这里还没重启过 Jenkins,建议现在就去终端敲一句:sudo systemctl restart jenkins。毕竟,运维的浪漫,始于一次干净的重启。

