Debian系统下Jenkins自定义构建脚本的完整流程
在Debian系统上,Jenkins的自定义构建脚本主要通过Pipeline(流水线)实现,支持将构建、测试、部署等步骤标准化、可视化。以下是具体操作步骤:
sudo apt update
sudo apt install openjdk-11-jdk
java -version # 验证安装(输出Java版本信息即成功)
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc
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
sudo apt update
sudo apt install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins # 开机自启
http://<服务器IP>:8080,通过/var/lib/jenkins/secrets/initialAdminPassword获取初始密码解锁,完成初始配置(如安装推荐插件)。Manage Jenkins > Plugin Manager,安装Pipeline(核心插件)、Git(代码托管库集成)、SSH Agent(远程服务器操作)等插件。New Item,输入任务名称(如my-app-ci),选择Pipeline类型,点击OK。Discard old builds(避免磁盘空间占用,可设置保留最近10次构建)。Pipeline script from SCM(从代码仓库获取脚本,推荐方式)。https://github.com/your-repo/my-app.git)。*/main,表示main分支)。Jenkinsfile,即仓库根目录下的Jenkinsfile文件)。Jenkinsfile是定义构建流程的核心脚本,采用Groovy语法,需放置在项目根目录下(与代码一起提交到仓库)。以下是一个通用模板(可根据实际需求调整):
pipeline {
agent any // 使用任意可用节点执行(若需指定节点,可改为`agent { label 'ubuntu-node' }`)
environment {
// 定义环境变量(可选)
ARTIFACT_DIR = "target" // 构建产物目录
DEPLOY_SERVER = "user@remote-server" // 远程服务器地址
DEPLOY_PATH = "/opt/my-app" // 远程部署路径
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/my-app.git' // 拉取代码(可直接复用SCM配置,此处为冗余示例)
}
}
stage('Build') {
steps {
echo '正在构建项目...'
sh 'mvn clean package -Dmaven.test.skip=true' // Maven项目构建(跳过测试)
// 若为Python项目:sh 'python setup.py build'
// 若为Node.js项目:sh 'npm install && npm run build'
}
}
stage('Test') {
steps {
echo '正在运行测试...'
sh 'mvn test' // Maven项目运行单元测试
// 若为Python项目:sh 'python -m pytest tests/'
}
}
stage('Deploy') {
steps {
echo '正在部署到远程服务器...'
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'remote-ssh', // 需提前在Jenkins中配置SSH凭据(Manage Jenkins > Credentials)
transfers: [
sshTransfer(
sourceFiles: "${ARTIFACT_DIR}/*.jar", // 本地构建产物路径
removePrefix: ARTIFACT_DIR, // 移除本地路径前缀
remoteDirectory: DEPLOY_PATH // 远程目标路径
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: true
)
]
)
// 若为直接执行脚本:sh 'ssh ${DEPLOY_SERVER} "cd ${DEPLOY_PATH} && ./restart.sh"'
}
}
}
post {
always {
echo '构建完成(无论成功失败都会执行)'
junit '**/target/surefire-reports/*.xml' // 发布测试报告(Maven项目)
// 若为其他测试框架:junit '**/tests/results/*.xml'
}
success {
echo '构建成功!'
mail to: 'team@example.com', subject: "构建成功: ${currentBuild.fullDisplayName}", body: "项目 ${currentBuild.fullDisplayName} 构建成功!"
}
failure {
echo '构建失败!'
mail to: 'team@example.com', subject: "构建失败: ${currentBuild.fullDisplayName}", body: "项目 ${currentBuild.fullDisplayName} 构建失败,请检查日志!"
}
}
}
关键说明:
any表示任意可用节点,生产环境建议指定固定节点)。stage(阶段),每个stage代表一个构建步骤(如Checkout拉取代码、Build编译、Test测试、Deploy部署)。stage下的具体操作,常用sh(执行Shell命令)、bat(Windows批处理)、echo(打印日志)等。若构建流程需要将产物部署到远程服务器,需提前配置SSH凭据:
Manage Jenkins > Credentials,点击System > Global credentials。Add Credentials,选择SSH Username with private key类型:
root、ubuntu)。Enter directly,粘贴远程服务器的私钥(需提前生成,如ssh-keygen -t rsa)。OK保存。Build Now即可手动启动构建。Pipeline配置中添加触发器,如:
H/5 * * * *表示每5分钟检查一次)。http://<Jenkins服务器IP>:8080/git/notifyCommit?url=<仓库URL>,实现代码提交后自动触发构建。Build History中的构建编号,可查看:
junit步骤)。target/*.jar文件,可通过Artifacts链接下载)。通过以上步骤,即可在Debian系统上完成Jenkins自定义构建脚本的配置。根据项目需求(如语言、部署目标),可调整Jenkinsfile中的steps和environment,实现灵活的CI/CD流程。