在 Debian 上使用 Jenkins 实现自定义脚本
一 环境准备与安装
- 安装 Java 17(Debian 12 推荐):sudo apt-get install -y fontconfig openjdk-17-jre
- 导入 Jenkins 官方 APT 密钥 与源(使用签名文件方式):
- sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
- 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
- 安装并启动 Jenkins:sudo apt-get update && sudo apt-get install -y jenkins && sudo systemctl enable --now jenkins
- 获取解锁密钥:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 访问控制台:打开浏览器进入 http://<服务器IP>:8080,完成插件与管理员初始化。
二 自定义脚本的两种常见方式
- 方式 A 内联脚本(直接在任务中编写 Pipeline)
- 新建任务:New Item → 选择 Pipeline → 在 “Pipeline” 部分选择 Pipeline script,直接粘贴 Groovy 脚本。
- 适用:快速验证、演示或脚本较简单的场景。
- 方式 B SCM 管理脚本(推荐)
- 在代码仓库根目录放置 Jenkinsfile,将构建、测试、部署流程纳入版本控制。
- 任务配置选择 Pipeline script from SCM → 选择 Git → 填写仓库 URL 与凭据 → 指定脚本路径(如 Jenkinsfile)。
- 适用:团队协作、可审计、可回滚与多环境复用。
三 示例 Jenkinsfile 模板
- 多语言通用模板(拉取代码 → 构建 → 测试 → 归档 → 可选部署)
- pipeline {
agent any
environment {
APP_NAME = ‘myapp’
VERSION = ‘1.0.${BUILD_NUMBER}’
}
stages {
stage(‘Checkout’) {
steps { git branch: ‘main’, url: ‘https://github.com//.git’ }
}
stage(‘Build’) {
steps { sh ‘make build || ./mvnw package -DskipTests’ }
}
stage(‘Test’) {
steps { sh ‘make test || ./mvnw test’ }
post {
always { junit ‘/target/surefire-reports/*.xml’ }
}
}
stage(‘Archive’) {
steps { archiveArtifacts artifacts: '/target/.jar,/dist/', fingerprint: true }
}
stage(‘Deploy’) {
when { branch ‘main’ }
steps {
sh 'rsync -avz target/.jar user@prod-server:/opt/app/’
// 或使用 SSH Publisher 插件发布
}
}
}
post {
success { echo ‘Build and tests succeeded.’ }
failure { echo ‘Build or tests failed.’ }
always { echo ‘Pipeline finished.’ }
}
}
- 说明
- 语言/构建工具可按需替换(如 mvnw、npm、pip)。
- 测试报告归档使用 junit 步骤,归档产物使用 archiveArtifacts。
- 部署阶段可按需启用,结合凭据与远程命令/插件完成发布。
四 触发与集成
- 源码变更触发
- 轮询 SCM:在任务 “Build Triggers” 勾选 Poll SCM,如 H/5 * * * *(每 5 分钟检查一次)。
- Webhook(推荐):安装 GitHub Integration 插件,任务勾选 GitHub hook trigger for GITScm polling;在 GitHub 仓库 Settings → Webhooks 添加 Payload URL:http:///github-webhook/,Content type 选 application/json,事件选 Just the push event。
- 远程触发与通知
- 远程构建:使用 curl 或 GitHub webhook 触发构建,便于与外部系统集成。
- 构建后处理:可结合邮件或企业微信/钉钉通知插件,在 post 阶段执行通知逻辑。
五 安全与运维要点
- 凭据管理:在 Manage Jenkins → Credentials 添加 SSH 私钥、用户名/密码、Personal Access Token,在 Pipeline 中使用 withCredentials 绑定,避免明文存放。
- 权限与隔离:为 Jenkins 服务使用 专用系统用户,最小权限运行;不同项目使用独立 Agent/标签 与 工作空间,减少相互影响。
- 网络安全:仅开放必要端口(默认 8080),生产环境建议启用 反向代理 + HTTPS;如使用 UFW:sudo ufw allow 8080/tcp。
- 日志与审计:通过 Console Output 排查问题;关键操作纳入版本控制(Jenkinsfile 与脚本),保留变更记录与回滚能力。